Python:日本人の年代別・性別死亡数を視覚化して考察する

その買うを、もっとハッピーに。|ハピタス

2017年の日本人死亡数の男女比を棒グラフ化して詳細(適当)に考察する。

スポンサーリンク

データの下準備

先ず、このサイトから必要なデータを入手する。

from pandas import *

df = read_csv('dead.csv',encoding='shift_jis')
df.head(2)
表章項目 死因年次推移分類 性別 年齢(5歳階級) /時間軸(年次) 2017年 2016年 2015年 2014年 2010年 1995年 1990年 1985年 1980年 1975年 1970年 1965年 1960年 1955年 1950年
0 死亡数【人】 総数 総数 総数 NaN 1340397 1307748 1290444 1273004 1197012 922139 820305 752283 722801 702275 712962 700438 706599 693523 904876
1 死亡数【人】 総数 総数 0〜4歳 NaN 2454 2618 2692 2883 3382 7040 7983 10834 16298 25884 32879 42572 64692 99399 222903

2 rows × 22 columns

df = df.set_index(['年齢(5歳階級)'])
df.drop(['表章項目','死因年次推移分類','性別','/時間軸(年次)'],axis=1,inplace=True)
df = df.apply(to_numeric, errors="coerce").astype(float)
df.reset_index(inplace=True)
df.head(2)
年齢(5歳階級) 2017年 2016年 2015年 2014年 2010年 2005年 2000年 1995年 1990年 1985年 1980年 1975年 1970年 1965年 1960年 1955年 1950年
0 総数 1340397.0 1307748.0 1290444.0 1273004.0 1197012.0 1083796.0 961653.0 922139.0 820305.0 752283.0 722801.0 702275.0 712962.0 700438.0 706599.0 693523.0 904876.0
1 0〜4歳 2454.0 2618.0 2692.0 2883.0 3382.0 4102.0 5269.0 7040.0 7983.0 10834.0 16298.0 25884.0 32879.0 42572.0 64692.0 99399.0 222903.0
スポンサーリンク

2017年の死亡者数を性別で比較する

df1 = df[['年齢(5歳階級)','2017年']][:46][24:]
df1.rename(columns={'2017年':'Male'}, inplace=True)
df1
年齢(5歳階級) Male
24 0〜4歳 1296.0
25 5〜9歳 209.0
26 10〜14歳 276.0
27 15〜19歳 810.0
28 20〜24歳 1468.0
29 25〜29歳 1547.0
30 30〜34歳 2154.0
31 35〜39歳 3074.0
32 40〜44歳 5503.0
33 45〜49歳 8942.0
34 50〜54歳 12345.0
35 55〜59歳 18506.0
36 60〜64歳 31103.0
37 65〜69歳 64245.0
38 70〜74歳 74272.0
39 75〜79歳 99591.0
40 80〜84歳 129904.0
41 85〜89歳 129775.0
42 90〜94歳 78355.0
43 95〜99歳 22846.0
44 100歳以上 4087.0
45 不詳 375.0
df2 = df[['年齢(5歳階級)','2017年']][:69][47:]
df2.rename(columns={'2017年':'Female'}, inplace=True)
df2
年齢(5歳階級) Female
47 0〜4歳 1158.0
48 5〜9歳 142.0
49 10〜14歳 161.0
50 15〜19歳 351.0
51 20〜24歳 556.0
52 25〜29歳 729.0
53 30〜34歳 1100.0
54 35〜39歳 1675.0
55 40〜44歳 3314.0
56 45〜49歳 5077.0
57 50〜54歳 6715.0
58 55〜59歳 9021.0
59 60〜64歳 13801.0
60 65〜69歳 28188.0
61 70〜74歳 34869.0
62 75〜79歳 56213.0
63 80〜84歳 96264.0
64 85〜89歳 140295.0
65 90〜94歳 145031.0
66 95〜99歳 81243.0
67 100歳以上 23717.0
68 不詳 94.0
df3 = merge(df1,df2,how='inner',on='年齢(5歳階級)')
df3['Total'] = df3['Male']+df3['Female']
df3['Female_Pct'] = df3['Female'] / df3['Total']
df3['Male_Pct'] = df3['Male'] / df3['Total']
from matplotlib.pyplot import *
from matplotlib.font_manager import FontProperties
from matplotlib import rcParams
import matplotlib.patches as mpatches
style.use('ggplot')

fp = FontProperties(fname='/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf', size=54)
rcParams['font.family'] = fp.get_name()
rcParams["font.size"] = "22"
fig, ax = subplots(figsize=(20,15))
for (i, row) in df3.iterrows():
    bar([row['年齢(5歳階級)']], [row['Male_Pct']],
        color=['#008AB8'], width=.95, align='center', edgecolor='none')
    bar([row['年齢(5歳階級)']], [row['Female_Pct']], bottom=[row['Male_Pct']],
            color=['#CC6699'], width=.95, align='center', edgecolor='none')
    
xlim(-0.6, 21.6)
ylim(0, 1)
xticks(range(0, 22), df3['年齢(5歳階級)'], fontsize=11)
grid(False)
yticks(np.arange(0, 1.01, 0.05),
       ['{}%'.format(int(x * 100)) for x in np.arange(0, 1.01, 0.05)])
xlabel('Age group')
a = mpatches.Patch(color='#CC6699', label='Female')
b = mpatches.Patch(color='#008AB8', label='Male')
plot([-0.425, 21.425], [0.5, 0.5], lw=2, color='black')
plot([-0.425, 21.425], [0.25, 0.25], lw=2, color='black')
plot([-0.425, 21.425], [0.8, 0.8], lw=2, color='black')
plot([-0.425, 21.425], [0.70, 0.70], lw=2, color='black')
plot([-0.425, 21.425], [0.15, 0.15], lw=2, color='black')
ax.legend(handles=[a,b],bbox_to_anchor=(0,1.02,1,0.2),loc="lower left",mode="None",\
          borderaxespad=0,ncol=2,prop={'size': 26});

15〜24歳で男が死に過ぎているのが気になる。20〜24歳に至っては、ほぼ4人に3人は男という酷い有様だ。さらに、年齢不詳は男が8割である。つまり、男が年齢不詳になるような死に方をする確率が圧倒的に高いということである。このグラフは、この国は男が非常に生き難い社会であることを如実に物語っている。まさに男はつらいよである。まぁ、ふうてんの寅さんが地方で野垂れ死にしていたら、間違いなく年齢不詳死体になっていただろう。90歳以上で女が多いのは、ただ単に、この年齢層の人口は女が圧倒的に多いからだ。

スポンサーリンク
スポンサーリンク