読者です 読者をやめる 読者になる 読者になる

初老のボケ防止日記

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

スポンサーリンク

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

Python Pandas


いよいよPandasっぽい操作をすることができるのか。どうなのか。

前回の記事で、返還後のCSVを無事Pandasで読み込めた

osa030.hatenablog.com

今回は読み込んだデータを元にあれこれしてみる。

動作環境

環境

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

列を追加してみる

CSVを読み込んだDataFrameに列を追加してみる。

In [1]: import pandas as pd
In [2]: df = pd.read_csv("./1970-2014.csv")

総人口列

生データは「young」「adult」「edler」の三区分で人口数が存在しているんだけど、それを合計した総人口値を新たな列としてDataFrameに追加してみる。

  • 総人口列の追加
In [3]: df['total'] = df.young + df.adult + df.elder
  • 確認
In [4]: df.head(5)
Out[4]:
   year prefecture young adult elder        total
0  1970        北海道  1309  3576   299  13093576299
1  1971        北海道  1302  3577   309  13023577309
2  1972        北海道  1302  3580   323  13023580323
3  1973        北海道  1308  3588   336  13083588336
4  1974        北海道  1316  3611   352  13163611352

あれ?なんか違う。

どうやら文字列として連結されているようだ。DataFrameのカラムの型を見てみる。

  • 型の確認
In [6]: df.dtypes
Out[6]:
year           int64
prefecture    object
young         object
adult         object
elder         object
total         object
dtype: object

「year」はint64となっているけど、それ以外はObject扱いになってる。「prefecture」は都道府県名なので整数型にならないのはわかるのだけれども。それ以外はなんでだろうなあ、ということで調べてみよう。

In [7]: df[df.young == '-']
Out[7]:
      year prefecture young adult elder total
1380  1970        沖縄県     -     -     -   ---
1381  1971        沖縄県     -     -     -   ---

なるほど。データが存在しない年度には「-」が入っているのでそれは数字に変換できないのでObject扱いとなっているのか。ではそれを除外すればいいのか。

  • 読込時に'-'をNaNとする
In [8]: df = pd.read_csv("./1970-2014.csv",na_values='-')
  • 型の確認
In [9]: df.dtypes
Out[9]:
year            int64
prefecture     object
young         float64
adult         float64
elder         float64
dtype: object

成功。ちなみに先程のデータはどうなっているのかというと、

In [10]: df[df.prefecture == '沖縄県'].head(2)
Out[10]:
      year prefecture  young  adult  elder
1380  1970        沖縄県    NaN    NaN    NaN
1381  1971        沖縄県    NaN    NaN    NaN

「NaN」ということでしょう。
うん、これで文字ではないので多分問題なかろう。もう一度総人口列を作ろう

  • 総人口列の追加/列の型の確認
In [13]: df['total'] = df.young + df.adult + df.elder

In [14]: df.dtypes
Out[14]:
year            int64
prefecture     object
young         float64
adult         float64
elder         float64
total         float64
dtype: object
  • 追加された総人口列の確認
In [15]: df.head(5)
Out[15]:
   year prefecture  young  adult  elder  total
0  1970        北海道   1309   3576    299   5184
1  1971        北海道   1302   3577    309   5188
2  1972        北海道   1302   3580    323   5205
3  1973        北海道   1308   3588    336   5232
4  1974        北海道   1316   3611    352   5279

はい、いけました。

高齢化率列

今度は調子にのって「高齢化率」を求めてみよう。高齢化率は単純に以下の式で出すことにする。

高齢化率(こうれいかりつ)とは、65歳以上の高齢者人口(老年人口)が総人口に占める割合のこと。

高齢化率 - Wikipedia

で、高齢化率の計算は

高齢化率は以下の計算により算出しています。
高齢化率(%)= 高齢者人口 ÷(総人口-年齢不詳人口)× 100

高齢化率の算出方法について教えてください。/千葉県

らしいのだけれども、年齢不詳人口がデータにないから以下としている。

高齢化率 = 65歳以上の人口 ÷ 総人口 × 100

  • 高齢化率列の追加/列の型の確認
In [16]: df['aging'] = (df.elder / df.total * 100).round(2)
In [17]: df.dtypes
Out[17]:
year            int64
prefecture     object
young         float64
adult         float64
elder         float64
total         float64
aging         float64
dtype: object
  • 追加された高齢化率の確認
In [18]: df.head(5)
Out[18]:
   year prefecture  young  adult  elder  total  aging
0  1970        北海道   1309   3576    299   5184   5.77
1  1971        北海道   1302   3577    309   5188   5.96
2  1972        北海道   1302   3580    323   5205   6.21
3  1973        北海道   1308   3588    336   5232   6.42
4  1974        北海道   1316   3611    352   5279   6.67

こんな感じでデータを加工できるわけだね。

データサイエンティスト養成読本 [ビッグデータ時代のビジネスを支えるデータ分析力が身につく! ] (Software Design plus)

データサイエンティスト養成読本 [ビッグデータ時代のビジネスを支えるデータ分析力が身につく! ] (Software Design plus)

  • 作者: 佐藤洋行,原田博植,下田倫大,大成弘子,奥野晃裕,中川帝人,橋本武彦,里洋平,和田計也,早川敦士,倉橋一成
  • 出版社/メーカー: 技術評論社
  • 発売日: 2013/08/08
  • メディア: 大型本
  • この商品を含むブログ (10件) を見る

スポンサーリンク