都道府県・市町村別人口データから、例えば、乳幼児人口が最も少ない村、100歳以上人口が最も多い市といった条件によって市町村を抽出する。人口が最も少ない村、人口が最も多い市を即答できる日本人はほとんどいないのではないだろうか。
import pandas as pd
df = pd.read_excel('jappopage.xls',encoding='cp932',skiprows=1)
df.head(3)
邪魔臭そうなcolumn(団体コード)を削除しておく。
df.drop(['団体コード'],axis=1,inplace=True)
df.head(2)
1億2770万7259人という人口は2018年1月1日のものらしい。
色々な条件で市町村を抽出する¶
先ずは100万(1e6)でふるい分けして日本の100万人都市を探し出す。
large_city = df['総数']>1e6
print(df[large_city]['市区町村名'].dropna().unique())
今度は人口500人未満の市町村を探し出す。
small_city = df['総数']<5e2
df[small_city]['市区町村名'].dropna().unique()
print(df[small_city]['市区町村名'].dropna().unique())
df[small_city].sort_values(by='総数',ascending=True).head()
人口ゼロとか訳分からんのが混じってるので、取り敢えずゼロを省く
small_city1 = df[(df['総数'] > 0) & (df['総数'] < 501) & (df['性別']=='計')]
small_city1.sort_values(by='総数',ascending=True).head()
東京都の青ヶ島村、御蔵島村、利島村がトップ3に名を連ねているのが面白い。次に、0〜4歳人口が最も少ない村と最も多い市を抽出する。
small_village = df[(df['0~4歳'] > 0) & (df['0~4歳'] < 100) & (df['性別']=='計')]
small_village.sort_values(by='0~4歳',ascending=True).head()
吉野郡上北山村が青ヶ島村を押さえてトップ。面白いのは、1位〜5位までが5人〜9人と連番になっていることと、奈良県の村が1位と3位に名を連ねていることだ。
large_city1=df[(df['0~4歳'] > 5e4) & (df['性別']=='計')]
large_city1.sort_values(by='0~4歳',ascending=False).dropna().head()
札幌市の0~4歳人口が多いことに驚かされた。横浜市が圧倒的に多いのは、浜っ子に憧れる世代の親が、自分の子供を浜っ子にしたいためだと思われる。
最後に、100歳以上人口の最大・最小を抜き出す。
small_village = df[(df['100歳以上'] > 0) & (df['100歳以上'] < 100) & (df['性別']=='計')]
small_village.sort_values(by='100歳以上',ascending=True).head()
山梨県北都留郡小菅村は、奥多摩湖の側にある村で、東京都と勘違いされやすい。小笠原村に100歳以上が住んでいることに驚かされた。
large_city1=df[(df['100歳以上'] > 5e2) & (df['性別']=='計')]
large_city1.sort_values(by='100歳以上',ascending=False).dropna().head()
人口の多い都市に100歳以上に人々が集うのは至極当然であろう。今度は30未満人口が多くて70歳以上人口が少ない都市を抽出する。
df['30歳未満'] = df['Male']
人口50万人以上都市をプロットする¶
largest_city = df[(df['総数'] >= 5e5) & (df['性別']=='計')]
largest_city.sort_values(by='総数',ascending=False).dropna().head()
a = largest_city.sort_values(by='総数',ascending=False).dropna()
from matplotlib.pyplot import *
from matplotlib.font_manager import FontProperties
from matplotlib import rcParams
style.use('dark_background')
fp = FontProperties(fname='/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf', size=54)
rcParams['font.family'] = fp.get_name()
rcParams["font.size"] = "20"
fig, ax = subplots(figsize=(20,15))
a[['市区町村名','総数']].sort_values(by='総数',ascending=True).set_index('市区町村名').plot(ax=ax,kind='barh')
xticks(np.arange(0,4.1e6,1e6/4),
['{}万'.format(int(x/1e4)) if x > 0 else 0 for x in np.arange(0,4.1e6,1e6/4)])
ax.set_xlabel('人口(人)',fontsize=24)
ax.legend(["人口総数"],loc='lower right',fancybox=True,framealpha=0.5,prop={'size': 26});
宇都宮市が50万人都市で千葉市が100万人都市ではないのは意外だった。というより、船橋市が相模原市に人口で負けているというのが納得いかない。船橋市は、平成の大合併の時に市川市と鎌ヶ谷市と合併しておくべきだった(松戸市はいらん)。