【Pandas】都道府県別の人口統計(総務省統計局令和元年国勢調査)
今回は、都道府県別の人口を表と棒グラフにします。
内容的には、apply関数とlambda関数を使ってSeriesの文字列を加工している点と、棒グラフを描く方法と、大したことやってません。初心者向けです。
元のデータは総務省統計局のもので、令和元年の国勢調査の推計値。令和元年以前のデータも入っているので、増減を可視化しても面白いかも。
都道府県別人口統計データ
総務省統計局
統計局ホームページ/日本の統計 2021−第2章 人口・世帯 にある都道府県別人口のExcelファイルを手作業でダウンロードしてから行っております。
# 都道府県別人口統計データ f = "n210200200.xlsx" import pandas as pd
# Excelの読み込み df_jinkou = pd.read_excel( f, sheet_name=[0], header=2 ) #df_jinkou[0] # 令和元年だけを抽出 df_jinkou = df_jinkou[0].iloc[6:-3, [0,6]] df_jinkou
| 都道府県 | 令和元年推計人口 | |
|---|---|---|
| 6 | 北海道 | 5250 |
| 7 | 青森 | 1246 |
| 8 | 岩手 | 1227 |
| 9 | 宮城 | 2306 |
| 10 | 秋田 | 966 |
| 11 | 山形 | 1078 |
| 12 | 福島 | 1846 |
| 13 | 茨城 | 2860 |
| 14 | 栃木 | 1934 |
| 15 | 群馬 | 1942 |
| 16 | 埼玉 | 7350 |
| 17 | 千葉 | 6259 |
| 18 | 東京 | 13921 |
| 19 | 神奈川 | 9198 |
| 20 | 新潟 | 2223 |
| 21 | 富山 | 1044 |
| 22 | 石川 | 1138 |
| 23 | 福井 | 768 |
| 24 | 山梨 | 811 |
| 25 | 長野 | 2049 |
| 26 | 岐阜 | 1987 |
| 27 | 静岡 | 3644 |
| 28 | 愛知 | 7552 |
| 29 | 三重 | 1781 |
| 30 | 滋賀 | 1414 |
| 31 | 京都 | 2583 |
| 32 | 大阪 | 8809 |
| 33 | 兵庫 | 5466 |
| 34 | 奈良 | 1330 |
| 35 | 和歌山 | 925 |
| 36 | 鳥取 | 556 |
| 37 | 島根 | 674 |
| 38 | 岡山 | 1890 |
| 39 | 広島 | 2804 |
| 40 | 山口 | 1358 |
| 41 | 徳島 | 728 |
| 42 | 香川 | 956 |
| 43 | 愛媛 | 1339 |
| 44 | 高知 | 698 |
| 45 | 福岡 | 5104 |
| 46 | 佐賀 | 815 |
| 47 | 長崎 | 1327 |
| 48 | 熊本 | 1748 |
| 49 | 大分 | 1135 |
| 50 | 宮崎 | 1073 |
| 51 | 鹿児島 | 1602 |
| 52 | 沖縄 | 1453 |
令和元年の国勢調査による人口統計を抽出した。
1000で割った数値になっている。
都・府・県をつける
都道府県名を加工し、インデックスにするなど、テーブルを整える。
# 都・府・県を末尾につける def func(x): if x == "東京": return x + "都" elif x == "京都" or x == "大阪": return x + "府" elif x == "北海道": return x else: return x + "県" df_jin = df_jinkou.copy() # 都道府県名加工 df_jin['都道府県'] = df_jinkou.iloc[:,0].apply(lambda x : func(x)) # 都道府県名をインデックスにする df_jin = df_jin.set_index("都道府県") #表示 df_jin
| 令和元年推計人口 | |
|---|---|
| 都道府県 | |
| 北海道 | 5250 |
| 青森県 | 1246 |
| 岩手県 | 1227 |
| 宮城県 | 2306 |
| 秋田県 | 966 |
| 山形県 | 1078 |
| 福島県 | 1846 |
| 茨城県 | 2860 |
| 栃木県 | 1934 |
| 群馬県 | 1942 |
| 埼玉県 | 7350 |
| 千葉県 | 6259 |
| 東京都 | 13921 |
| 神奈川県 | 9198 |
| 新潟県 | 2223 |
| 富山県 | 1044 |
| 石川県 | 1138 |
| 福井県 | 768 |
| 山梨県 | 811 |
| 長野県 | 2049 |
| 岐阜県 | 1987 |
| 静岡県 | 3644 |
| 愛知県 | 7552 |
| 三重県 | 1781 |
| 滋賀県 | 1414 |
| 京都府 | 2583 |
| 大阪府 | 8809 |
| 兵庫県 | 5466 |
| 奈良県 | 1330 |
| 和歌山県 | 925 |
| 鳥取県 | 556 |
| 島根県 | 674 |
| 岡山県 | 1890 |
| 広島県 | 2804 |
| 山口県 | 1358 |
| 徳島県 | 728 |
| 香川県 | 956 |
| 愛媛県 | 1339 |
| 高知県 | 698 |
| 福岡県 | 5104 |
| 佐賀県 | 815 |
| 長崎県 | 1327 |
| 熊本県 | 1748 |
| 大分県 | 1135 |
| 宮崎県 | 1073 |
| 鹿児島県 | 1602 |
| 沖縄県 | 1453 |
人口の多い順に並び替え棒グラフ
【並び替えの注意】
sort_values()の引数ascending=Falseにすると、通常では降順に並び替えられる。つまり大きい順になる。
降順のデータを使ってplt.bar()で棒グラフを描くと、正しく降順で並ぶ。
しかし、plt.barh()では、逆に並び替えられる。ascending=Falseで降順に並び替えたものが、グラフでは逆に昇順になる。
従って、下のコードではグラフを降順にしたいので、データをascending=True昇順に並び替えている。
import matplotlib.pyplot as plt import japanize_matplotlib plt.figure(figsize=(12,25), facecolor='lightgray') # 並び替え d = df_jin.sort_values('令和元年推計人口', ascending=True) plt.barh(d.index, d['令和元年推計人口'], color="orange") plt.title('令和元年都道府県別推計人口', size=20) plt.yticks(size=18) plt.xticks(size=15) plt.xlabel('推計人口/1000人', size=17) plt.grid() plt.savefig('令和元年都道府県別推計人口棒グラフ.jpg') plt.show()

沖縄が真ん中あたりに居る。米軍基地とサトウキビとパイナップルと観光だけでこれだけの人口を養ってるのだろうか。
東京都の人口の多さは、サービス業の効率化・合理化などやればネックになる。DXは魔都をうむ…。
以上。