よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

【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()

f:id:chayarokurokuro:20210726034421j:plain

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



以上。