【Python】dfの「都道府県」の項目から、「東日本」「東北」等のカテゴリ変数を付与する

2_Python操作メモ

やりたいこと

オープンデータにはよく「都道府県」の項目が存在する。
(例)https://www.nstac.go.jp/use/literacy/ssdse/#SSDSE-C
   →家計消費データ
この「都道府県」項目から、各レコードに「東日本/西日本」や「東北」等のカテゴリ変数を付与したいときの実装を考える。

実装

ライブラリのインポート、データの読み込み。
取ってきたデータはヘッダとして使えるのが2行目になるので、1行目はスキップする。
またデータ部の1レコード目は都道府県が「全国」のレコードであり、今回はこれを使わないので削除し、インデックスを振り直す。

import pandas as pd
import numpy as np
#2行目をヘッダにして、全国の行を削除する
df = pd.read_csv('./data/SSDSE-C-2024.csv',skiprows=1)
df = df.drop(0)
df = df.reset_index()
df.head()
#必要な列のみ取り出し
df = df[['都道府県']]
df.head()

東日本、西日本に各都道府県を格納したリストを定義する。
dfに東日本、西日本のカテゴリを格納する列を作成する。

#東西日本に分けるためのlistを定義

east = ['北海道','青森県','岩手県','宮城県','秋田県',
        '山形県','福島県','茨城県','栃木県','群馬県',
        '埼玉県','千葉県','東京都','神奈川県','新潟県',
        '山梨県','長野県','静岡県']
        
west = ['石川県','富山県','福井県','岐阜県','愛知県',
        '三重県','滋賀県','京都府','大阪府','兵庫県',
        '奈良県','和歌山県','鳥取県','島根県','岡山県',
        '広島県','山口県','徳島県','香川県','愛媛県',
        '高知県','福岡県','佐賀県','長崎県','熊本県',
        '大分県','宮崎県','鹿児島県','沖縄県']

#東西カテゴリを追加
df['東西'] = ''
df.head()

都道府県を振り分ける処理の関数を定義。
dfの項目A(=都道府県)に対してリストの要素を一つづつ繰り返し突合していき、一致した項目があればdfの項目B(=東西)に東、西等のカテゴリを付与する。これをdfのレコード数ぶん繰り返す。

def match_category_fromlist(df,A,listA,B,C):
    """dfの項目Aについて、listの項目と突合して
    一致した項目があれば項目BにカテゴリCを付与する
    """
    for i in range(len(df)):
        for j in range(len(listA)):
            if df[A][i] == listA[j]:
                df[B][i] = C
    return df

東日本と西日本の振り分け処理。それぞれ先ほど定義したリストを渡している。

#振り分け処理

df = match_category_fromlist(df,'都道府県',east,'東西','東')
df = match_category_fromlist(df,'都道府県',west,'東西','西')

うまく振り分けることができた。

同じ要領で、「東北」「関西」等の地域を振ってみる。

#地域別でやってみよう

hokkaido = ['北海道']
tohoku = ['青森県','岩手県','宮城県','秋田県','山形県','福島県']
kanto = ['茨城県','栃木県','群馬県','埼玉県','千葉県','東京都','神奈川県']
koshinetsu = ['新潟県','山梨県','長野県']
tokai = ['静岡県','岐阜県','愛知県','三重県']
hokuriku = ['石川県','富山県','福井県']
kansai = ['滋賀県','京都府','大阪府','兵庫県','奈良県','和歌山県']
chugoku = ['鳥取県','島根県','岡山県','広島県','山口県']
shikoku = ['徳島県','香川県','愛媛県','高知県']
kyushu = ['福岡県','佐賀県','長崎県','熊本県','大分県','宮崎県','鹿児島県','沖縄県']
df['地域'] = ''
df.head()
df = match_category_fromlist(df,'都道府県',hokkaido,'地域','北海道')
df = match_category_fromlist(df,'都道府県',tohoku,'地域','東北')
df = match_category_fromlist(df,'都道府県',kanto,'地域','関東')
df = match_category_fromlist(df,'都道府県',koshinetsu,'地域','甲信越')
df = match_category_fromlist(df,'都道府県',tokai,'地域','東海')
df = match_category_fromlist(df,'都道府県',hokuriku,'地域','北陸')
df = match_category_fromlist(df,'都道府県',kansai,'地域','関西')
df = match_category_fromlist(df,'都道府県',chugoku,'地域','中国')
df = match_category_fromlist(df,'都道府県',shikoku,'地域','四国')
df = match_category_fromlist(df,'都道府県',kyushu,'地域','九州')

「地域」列に地域カテゴリを振ることができた。

以上

コメント

タイトルとURLをコピーしました