この記事はPandasを用いたヒストグラムの作成|Pythonの続き
今回も、愛知県の推計人口データを用いる
2024年9月と2023年11月の人口の差を求めて、人口の増減を出力することを目標とする
この記事は、以下の著作物を改変して利用しています。
あいちの人口(2024年9月1日現在) 愛知県人口動向調査結果 月報、愛知県、クリエイティブ・コモンズ・ライセンス
表示2.1日本(http://creativecommons.org/licenses/by/2.1/jp/)
データの読み込みと抽出
これまで同様、csvファイルを読み込み、国籍区分が日外、性別が男女の行のみを取り出す
さらに、出力が見やすくなるように、必要な列のみを抽出する
ソースコードは以下の通り
import pandas as pd
# データの読み込みと抽出
df = pd.read_csv('population.csv', encoding='shift_jis')
df = df[(df["国籍区分"]=="a)日外") & (df["性別"]=="a)男女")]
df = df[["ブロック", "郡市", "区町村", "20231101", "20240901"]]
dfは以下のようになる
ブロック 郡市 区町村 20231101 20240901
0 ― ― ― 7482401.0 7465512.0
1 名古屋 名古屋市 ― 2327950.0 2330385.0
2 名古屋 名古屋市 千種区 165197.0 165413.0
3 名古屋 名古屋市 東区 86851.0 87931.0
4 名古屋 名古屋市 北区 161255.0 161118.0
.. ... ... ... ... ...
66 知多 知多郡 武豊町 43284.0 43307.0
67 西三河 額田郡 幸田町 42235.0 42055.0
68 東三河 北設楽郡 設楽町 4006.0 3877.0
69 東三河 北設楽郡 東栄町 2658.0 2602.0
70 東三河 北設楽郡 豊根村 918.0 896.0
差の計算
人口データは読み込んだときにfloat型になっているようなので、列を指定して減算を行うだけでできる
とても簡単
計算結果はPandas.Series型になる
もとのデータフレームに追加するには、キー(列ラベル)を指定して代入してやればよい
今回は”人口変化”というラベルにしている
ソースコードは以下の通り
difference = df["20240901"] - df["20231101"]
df['人口変化'] = difference
dfに人口変化の列が増えていれば成功
ブロック 郡市 区町村 20231101 20240901 人口変化
0 ― ― ― 7482401.0 7465512.0 -16889.0
1 名古屋 名古屋市 ― 2327950.0 2330385.0 2435.0
2 名古屋 名古屋市 千種区 165197.0 165413.0 216.0
3 名古屋 名古屋市 東区 86851.0 87931.0 1080.0
4 名古屋 名古屋市 北区 161255.0 161118.0 -137.0
.. ... ... ... ... ... ...
66 知多 知多郡 武豊町 43284.0 43307.0 23.0
67 西三河 額田郡 幸田町 42235.0 42055.0 -180.0
68 東三河 北設楽郡 設楽町 4006.0 3877.0 -129.0
69 東三河 北設楽郡 東栄町 2658.0 2602.0 -56.0
70 東三河 北設楽郡 豊根村 918.0 896.0 -22.0
[71 rows x 6 columns]
人口が増加した市区町村のみを取り出す
‘人口変化’列の値が正の行のみを取り出せばよい
df[“人口変化”]のpandas.Seriesには比較演算子が使える
したがって、人口が増加した行のみを出力するプログラムは以下のようになる
print(df[df["人口変化"]>0])
実行結果
ブロック 郡市 区町村 20231101 20240901 人口変化
1 名古屋 名古屋市 ― 2327950.0 2330385.0 2435.0
2 名古屋 名古屋市 千種区 165197.0 165413.0 216.0
3 名古屋 名古屋市 東区 86851.0 87931.0 1080.0
5 名古屋 名古屋市 西区 151204.0 151621.0 417.0
6 名古屋 名古屋市 中村区 140199.0 141403.0 1204.0
7 名古屋 名古屋市 中区 99792.0 102707.0 2915.0
8 名古屋 名古屋市 昭和区 108462.0 108605.0 143.0
9 名古屋 名古屋市 瑞穂区 107689.0 107791.0 102.0
10 名古屋 名古屋市 熱田区 67121.0 67455.0 334.0
27 西三河 刈谷市 ― 153785.0 153938.0 153.0
41 西三河 知立市 ― 72198.0 72466.0 268.0
54 尾張北東部 長久手市 ― 61221.0 61513.0 292.0
56 尾張中西部・海部 西春日井郡 豊山町 15698.0 15759.0 61.0
58 尾張北東部 丹羽郡 扶桑町 34320.0 34327.0 7.0
59 尾張中西部・海部 海部郡 大治町 32904.0 32968.0 64.0
66 知多 知多郡 武豊町 43284.0 43307.0 23.0
71行あったデータが16行まで減った
ほとんどの市区町村で人口は減少しているようだ
おわりに
PandasのDataframeを用いて差の計算をした
forループを書かなくてよいのが良い
コメントを残す