初老のボケ防止日記

おっさんのひとりごとだから気にしないようにな。

スポンサーリンク

Python Pandasをさわってみる(6)



前回でグラフも描いたことだし今度はMultiIndexな操作も試してみる。

前回の記事で、色々とDataFrameの操作をしたり、グラフを書いてみた。でも実は今までインデックスを指定しないでやってたのだ。

osa030.hatenablog.com

せっかく、年と都道府県名というキーが複数あるので「MultiIndex」とやらを試してみよう。

MultiIndex / Advanced Indexing — pandas 0.16.2 documentation

動作環境

環境

OS Windows 8.1(64bit)
Python 2.7.9(32bit)
Pandas 0.16.2

対象データ

政府が公開している統計データEXCELファイルを変換したCSVファイル。フォーマットは以下。

year 西暦
prefecture 都道府県名
young 0-14歳の人口
adult 15-64歳の人口
elder 65歳以上の人口

詳細は、以下の記事を参照

osa030.hatenablog.com

以下は全部「ipython」での実行。Pandasの詳細は以下を参考にした。

pandas: powerful Python data analysis toolkit — pandas 0.16.2 documentation

MultiIndexで読み込む

西暦,都道府県

  • 読込
In [1]: import pandas as pd
In [2]: df = pd.read_csv("./1970-2014.csv",index_col=['year','prefecture'],na_values='-')
  • 先頭5件
In [3]: df.head(5)
Out[3]:
                 young  adult  elder
year prefecture
1970 北海道          1309   3576    299
1971 北海道          1302   3577    309
1972 北海道          1302   3580    323
1973 北海道          1308   3588    336
1974 北海道          1316   3611    352
  • 1970年の先頭5件
In [4]: df.loc[1970].head(5)
Out[4]:
            young  adult  elder
prefecture
北海道          1309   3576    299
青森県           397    940     90
岩手県           362    909    100
宮城県           449   1245    126
秋田県           303    848     91
  • 1970年の末尾5件
In [5]: df.loc[1970].tail(5)
Out[5]:
            young  adult  elder
prefecture
熊本県           430   1111    160
大分県           280    766    110
宮崎県           278    684     89
鹿児島県          469   1086    174
沖縄県           NaN    NaN    NaN
  • 1970年の埼玉県
In [6]: df.loc[1970,'埼玉県']
Out[6]:
young    1003
adult    2665
elder     199
Name: (1970, 埼玉県), dtype: float64

都道府県,西暦

  • 読込
In [1]: import pandas as pd
In [2]: df = pd.read_csv("./1970-2014.csv",index_col=['prefecture','year'],na_values='-')
  • 先頭5件
In [3]: df.head(5)
Out[3]:
                 young  adult  elder
prefecture year
北海道      1970   1309   3576    299
           1971   1302   3577    309
           1972   1302   3580    323
           1973   1308   3588    336
           1974   1316   3611    352
  • 埼玉県の先頭5件
In [4]: df.loc['埼玉県'].head(5)
Out[4]:
      young  adult  elder
year
1970   1003   2665    199
1971   1068   2788    206
1972   1141   2910    217
1973   1215   3032    228
1974   1277   3137    240
  • 埼玉県の先頭5件
In [5]: df.loc['埼玉県'].tail(5)
Out[5]:
      young  adult  elder
year
2010    955   4769   1470
2011    949   4752   1506
2012    940   4687   1585
2013    934   4627   1661
2014    929   4573   1737
  • 埼玉県の1970年
In [6]: df.loc['埼玉県',1970]
Out[6]:
young    1003
adult    2665
elder     199
Name: (埼玉県, 1970), dtype: float64

MultiIndexなDataFrameに高齢化率を追加してソートしてみる

高齢化率列

  • 読込/高齢化率列の追加
In [1]: import pandas as pd
In [2]: df = pd.read_csv("./1970-2014.csv",index_col=['year','prefecture'],na_values='-')
In [3]: df['aging'] = (df.elder /df.sum(axis=1) * 100).round(2)
  • 追加された高齢化率の確認
In [5]: df.head(5)
Out[5]:
                 young  adult  elder  aging
year prefecture
1970 北海道          1309   3576    299   5.77
1971 北海道          1302   3577    309   5.96
1972 北海道          1302   3580    323   6.21
1973 北海道          1308   3588    336   6.42
1974 北海道          1316   3611    352   6.67

1970年のデータ

  • 高齢化率が低い県TOP5
In [6]: df.loc[1970].sort(columns='aging').head(5)
Out[6]:
            young  adult  elder  aging
prefecture
神奈川県         1302   3915    256   4.68
埼玉県          1003   2665    199   5.15
大阪府          1821   5406    394   5.17
東京都          2401   8417    591   5.18
愛知県          1310   3769    308   5.72
  • 高齢化率が高い県TOP5
In [7]: df.loc[1970].sort(columns='aging',ascending=False).head(5)
Out[7]:
            young  adult  elder  aging
prefecture
高知県           172    525     90  11.44
島根県           178    508     87  11.25
鹿児島県          469   1086    174  10.06
鳥取県           132    380     57  10.02
岡山県           385   1156    166   9.72

2014年のデータ

  • 高齢化率が低い県TOP5
In [8]: df.loc[2014].sort(columns='aging').head(5)
Out[8]:
            young  adult  elder  aging
prefecture
沖縄県           249    903    270  18.99
東京都          1517   8862   3011  22.49
愛知県          1041   4686   1728  23.18
神奈川県         1161   5820   2115  23.25
滋賀県           207    877    332  23.45
  • 高齢化率が高い県TOP5
In [9]: df.loc[2014].sort(columns='aging',ascending=False).head(5)
Out[9]:
            young  adult  elder  aging
prefecture
秋田県           112    587    339  32.66
高知県            86    414    237  32.16
島根県            88    387    221  31.75
山口県           174    793    441  31.32
和歌山県          119    556    296  30.48

沖縄県は1970年のデータがないので除外して考えると、高齢化率の低いところは都市部、高齢化率の高いところは地方っていう感じにみえる。あとは1970年にはTOP5にランクインしていなかった秋田県がワーストTOP1になってるのも興味深い。

とまあ、時系列で都道府県別の順位を眺めるだけでもまた違った見方ができるのかなあと。こういうのがデータ分析というものでしょうかね。中々おもしろい。

過疎化が進行する地元を救うことはできないのか?ちょっとオタクな、お坊さんが考えたこと。5分で読めるシリーズ

過疎化が進行する地元を救うことはできないのか?ちょっとオタクな、お坊さんが考えたこと。5分で読めるシリーズ

スポンサーリンク