スポンサーリンク

【Python】PandasでCSVファイルを読み込む

Python
スポンサーリンク
本ページにはプロモーションが含まれています。
たろ
たろ

PandasでCSVファイルの読み込みってどうやるんだろう?

こんな疑問を解決します。

本記事の内容
  • Pythonによるデータ分析の入り口
  • PandasでCSVファイルを読み込む
  • グラフ描画ライブラリで読み込んだデータをグラフにしてみる

こんにちは。

先日、このブログのMySQLにPythonで接続する方法を検証してみましたが、データが少なくいい解析ができそうにありませんでした。

そこでまとまったテストデータがないか調べてみたところ、「e-Stat 統計で見る日本 」というサイトを見つけました。

e-Statは、日本の統計情報がCSV形式でダウンロードすることができ、練習には最適じゃないかということで使ってみることにしました!

データのフォーマーットがCSV形式だったのでPythonのライブラリPandasを使って触ってみたときの備忘です。

スポンサーリンク

PandasでCSVファイル読み込み

今回e-Statから「年齢(各歳),男女別人口及び人口性比-総人口,日本人人口」の情報を取得し、Pandasに取り込みます。

CSVファイルを読み込むには Pandasread_csv を使います。

import pandas as pd
df = pd.read_csv('./population_data.csv')
print(df)

ダウンロードしたCSVファイルの上から10行ほど余計な情報が含まれていたので削除済みです。

プリントすると次のような結果が出力されました。

     全国 コード  全国  時間軸(年月日現在) コード    時間軸(年月日現在)  年齢各歳 コード    年齢各歳  /男女別・性比  \
0         0  全国            1201  2019年10月1日現在      1000      総数      NaN   
1         0  全国            1201  2019年10月1日現在      1001      0歳      NaN   
2         0  全国            1201  2019年10月1日現在      1002      1歳      NaN   
3         0  全国            1201  2019年10月1日現在      1003      2歳      NaN   
4         0  全国            1201  2019年10月1日現在      1004      3歳      NaN   
..      ...  ..             ...           ...       ...     ...      ...   
97        0  全国            1201  2019年10月1日現在      1097     96歳      NaN   
98        0  全国            1201  2019年10月1日現在      1098     97歳      NaN   
99        0  全国            1201  2019年10月1日現在      1099     98歳      NaN   
100       0  全国            1201  2019年10月1日現在      1100     99歳      NaN   
101       0  全国            1201  2019年10月1日現在      1101  100歳以上      NaN   

     男女計【千人】   男【千人】   女【千人】  人口性比【女性=100】 男女計【千人】.1 男【千人】.1 女【千人】.1  \
0    126,167  61,411  64,756          94.8   123,731  60,208  63,523   
1        894     458     436         105.2       877     450     427   
2        941     482     459         105.1       925     474     451   
3        962     493     469         105.1       946     484     461   
4      1,001     514     487         105.6       985     506     479   
..       ...     ...     ...           ...       ...     ...     ...   
97       126      23     103          22.2       126      23     103   
98        84      14      70          19.7        84      14      70   
99        59       9      50          18.2        59       9      50   
100       44       6      37          16.6        43       6      37   
101       69       9      60          14.9        69       9      60   

     人口性比【女性=100】.1  
0              94.8  
1             105.2  
2             105.1  
3             105.0  
4             105.6  
..              ...  
97             22.2  
98             19.7  
99             18.1  
100            16.6  
101            14.8  

[102 rows x 15 columns]

CSVファイルが読み込みされたことを確認できました。

さて、読み込みまでできたので少しデータをいじってみたいと思います。

カラム名(列の見出し)の変更などのデータの前処理

カラム名が日本語のままだとちょっぴし扱いづらいので、英語に置換します。

データフレームの置換には rename を使います。

df.rename(columns = {"男【千人】":"man"}, inplace = True)
df.rename(columns = {"女【千人】":"woman"}, inplace = True)
df.rename(columns = {"年齢各歳":"age"}, inplace = True)

さらにデータ内の日本語や余計な文字列などを前処理します。

age = df['age'].str.replace('歳', '').str.replace('以上', '')
man = df['man'].str.replace(',', '')
woman = df['woman'].str.replace(',', '')

age = np.array(age, dtype=np.int64)
man = np.array(man, dtype=np.int64)
woman = np.array(woman, dtype=np.int64)

上の例では、年齢のカラムに「歳」や「以上」という言葉が含まれていたのでデータから取り除き、数字のデータだけにしました。

また、人口データには1,000などのように「, 」 が含まれているため、こちらも削除しました。

最後に、文字列だったデータを「dtype=np.int64」と指定し型を変換しました。

人口推移を表示してみる

Pythonのグラフ表示ライブラリはMatplotlibが有名です。

Matplotlibを使ってグラフに表示してみます。

plt.figure(figsize=(10,5))
plt.plot(age, man, label="Man")
plt.plot(age, woman, label="Woman")
plt.ylabel('population[10^3]')
plt.xlabel('age')
plt.title('population_data Oct, 2019')
plt.legend()
plt.yticks(np.arange(0, 1200 + 1, 100))
plt.xticks(np.arange(0, 100 + 1, 5))
plt.show()

日本の人口のボリュームゾーンは70才前後に集中しているという結果がわかりました。

あと53才ほどのときに一気に人口が減っているので時代背景が気になりました。

的なことがグラフにするとより具体的にわかりますね。

まとめ

  • PandasでCSVファイルを取り込むには read_csv を使う
  • データのグラフにするにはMatplotlibを使う
  • データ分析には前処理がとても重要

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