日本の歪で醜い人口ピラミッドをPythonで構築してみる

絶望的にお先真っ暗の日本の超高齢化・超少子化社会を如実に物語っているあまりにも残酷で悲惨過ぎる笑うしかない、今の日本の現実を体現しているかのような歪で醜い人口ピラミッドを構築してみる。

スポンサーリンク

データの準備

先ずこのサイトからダウンロードしたデータをチラ見する。

import pandas as pd

data1 = pd.read_excel(open('05k2-1.xls','rb'),sheetname='表')
data1.head(8)
Unnamed: 0 Unnamed: 1 Unnamed: 2 年 齢 (5 歳 階 級) , 男 女 別 人 口 Unnamed: 4 Unnamed: 5 Unnamed: 6 Unnamed: 7 Unnamed: 8 Unnamed: 9 Unnamed: 10 Unnamed: 11 Unnamed: 12
0 NaN NaN NaN Population Estimates by Age (Five-Yea… NaN NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN 2019年3月1日現在 (概算値) NaN NaN NaN 2018年10月1日現在 (確定値) NaN NaN NaN NaN NaN
3 NaN NaN NaN (平成31年) NaN NaN NaN (平成30年) NaN NaN NaN NaN NaN
4 NaN NaN NaN Mar. 1, 2019 (Provisional estimates) NaN NaN NaN October 1, 2018 (Final estimates) NaN NaN NaN NaN NaN
5 年 齢 階 級 NaN NaN 総 人 口 NaN NaN NaN NaN 総 人 口 NaN 日 本 人 人 口 NaN NaN
6 NaN NaN NaN Total population NaN NaN NaN Total population NaN NaN Japanese population NaN NaN
7 Age groups NaN NaN 男女計 NaN 男女計 男女計

見ての通りエクセルデータがメチャメチャになっているが、年齢区分項目だけを以下のようにして修正すれば問題ない。

import re
import mojimoji

df = data1[['Unnamed: 0','Unnamed: 10','Unnamed: 11','Unnamed: 12']]
x = df['Unnamed: 0'][12:33]
x = [s.replace('~','-') for s in x]
x = [s.replace(' ','') for s in x]
x = [mojimoji.zen_to_han(s) for s in x]
x = [re.sub(r'[^a-zA-Z0-9='+"-"+']', '',s) for s in x]
x = [s.replace('100','100<') for s in x]

データの下準備ができたので今度はプロットする。

日本の悲惨な人口ピラミッド

このサイトを参考にしながら、日本のあまりにも酷過ぎるお笑い人口ピラミッドを描画してみる。

%matplotlib inline
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(20, 15))
plt.rcParams["font.size"] = "17"
ax1 = fig.add_subplot(111)

for (i, row) in df[12:33].iterrows():
    plt.bar(row['Unnamed: 0'], [row['Unnamed: 11'], -row['Unnamed: 12']],
            color=['#CC6699', '#008AB8'], width=0.8, align='center',edgecolor='none')

plt.xlim(-0.6,20.6)
plt.ylim(-5000,5000)
plt.xticks(np.arange(0,21), x, fontsize=14)
plt.yticks(np.arange(-5000, 5000, 500),
 ['{}'.format(int(abs(x)/1)) if x!=0 else 0 for x in np.arange(-5000, 5000, 500)])
plt.xlabel('Age group')
plt.ylabel('Number of people (thousands)')
#plt.legend((''), ('Men', 'Women'))
a=mpatches.Patch(color='#CC6699', label='male')
b=mpatches.Patch(color='#008AB8', label='female')
plt.legend(handles=[a,b])
;
''
import matplotlib.patches as mpatches

fig = plt.figure(figsize=(20, 15))
plt.rcParams["font.size"] = "17"
ax1 = fig.add_subplot(111)
for (i, row) in df[12:33].iterrows():
    plt.barh(row['Unnamed: 0'],[row['Unnamed: 11'],-row['Unnamed: 12']],
    color=['#CC6699', '#008AB8'],height=.8, align='center',edgecolor='none')

plt.ylim(-0.6,20.6)
plt.xlim(-5000,5000)
plt.yticks(np.arange(0,21), x, fontsize=14)
plt.xticks(np.arange(-5000, 5000, 500),
 ['{}'.format(int(abs(x)/1)) if x!=0 else 0 for x in np.arange(-5000, 5000, 500)])
plt.ylabel('Age group')
plt.xlabel('Number of people (thousands)')
#plt.legend((''), ('Men', 'Women'))
a=mpatches.Patch(color='#CC6699', label='male')
b=mpatches.Patch(color='#008AB8', label='female')
plt.legend(handles=[a,b])
;
''

底がどんどん細くなっていくのがよく分かる。0〜4歳人口よりも80〜84歳人口の方が多いというのは洒落になってない。5年後の未曾有の令和大恐慌により、10年後には0〜4歳人口よりも95歳〜99歳人口の方がはるかに多くなり、底が細くなり過ぎてポキっと折れているだろう。このあまりにも絶望的な国家滅亡級の悲惨な人口ピラミッドを見れば、若者の心が折れるのも無理はないだろう。こんな悲劇的な未来が待っている日本で子供を産む人間は、何があっても路頭に迷わないという自信がある一部の富裕層か、後先考えずに産む底辺DQNくらいだろう。

日本人人口の男女比をプロットする

data1['Male_Pct'] = df['Unnamed: 11'][12:33] / df['Unnamed: 10'][12:33]
data1['Female_Pct'] = df['Unnamed: 12'][12:33] / df['Unnamed: 10'][12:33]
df = data1[['Unnamed: 0','Unnamed: 10','Unnamed: 11','Unnamed: 12','Female_Pct','Male_Pct']]
plt.rcParams['figure.figsize'] = 14,8
plt.rcParams["font.size"] = "17"

for (i, row) in df[12:33].iterrows():
    plt.bar([row['Unnamed: 0']], [row['Male_Pct']],
            color=['#CC6699'], width=0.9, align='center', edgecolor='none')
    plt.bar([row['Unnamed: 0']], [row['Female_Pct']], bottom=[row['Male_Pct']],
            color=['#008AB8'], width=0.9, align='center', edgecolor='none')
    
plt.xlim(-0.6, 20.6)
plt.ylim(0, 1)
plt.xticks(range(0, 21), x, fontsize=12)
plt.grid(False)
plt.yticks(np.arange(0, 1.01, 0.25),
           ['{}%'.format(int(x * 100)) for x in np.arange(0, 1.01, 0.25)])
plt.xlabel('Age group')
plt.ylabel('Percentage of age group')
plt.plot([-0.425, 20.425], [0.5, 0.5], lw=2, color='black')
plt.plot([-0.425, 20.425], [0.25, 0.25], lw=2, color='black')
a=mpatches.Patch(color='#CC6699', label='male')
b=mpatches.Patch(color='#008AB8', label='female')
plt.legend(handles=[a,b])
;
''

0歳〜50歳は圧倒的に女不足だが、60歳を過ぎると女の方が圧倒的に多くなるので、婚活戦争に敗れてあぶれた男達は60歳過ぎの女性と結婚すればいいのではないだろうか。

結論

昭和脳の老害や脳天気な馬鹿は、戦後の日本はもっと酷かったんだから日本はまたやり直せると言うが、戦後の日本が立ち直れたのは国が若かったからだ。1950年のほぼ三角形の人口ピラミッドを見れば良く分かる。さらにあの時代は戦争で多くの男が戦死したことで、女があぶれていた時代でもある。昭和25年の生涯未婚率が1.5%という事実も、日本が復活できた大きな要因になっている。今後日本の人口ピラミッドは逆三角形になっていくだけではなく、ごく近い将来、日本人男性の3人に1人が生涯未婚者になる。余程の馬鹿でもない限り、日本が人口動態的に詰んでいることに気付くはずだ。