若年・中年・高年・超高年層死亡数推移(1950年〜2017年)

若年(0〜29歳)、中年(30〜59歳)、高年(60〜89歳)、超高年(90歳以上)の年代区分別死亡数を棒グラフで視覚化してみる。0〜34歳を若年層(35歳以上の無職者はニートとは言わない)、35〜69歳(70歳定年制とか言われている)、70歳以上の3区分でもいいかもしれない。

スポンサーリンク

データの下準備

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

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.convert_objects(convert_numeric=True)
/root/.pyenv/versions/miniconda3-latest/envs/py368/lib/python3.6/site-packages/ipykernel_launcher.py:1: FutureWarning: convert_objects is deprecated.  To re-infer data dtypes for object columns, use DataFrame.infer_objects()
For all other conversions use the data-type specific converters pd.to_datetime, pd.to_timedelta and pd.to_numeric.
  """Entry point for launching an IPython kernel.
df.drop(['表章項目','死因年次推移分類','性別','/時間軸(年次)'],axis=1,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
スポンサーリンク

0〜100歳以上の年次別死亡数をプロット

from matplotlib.pyplot import *
from matplotlib.font_manager import FontProperties
from matplotlib import rcParams
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"] = "20"
fig, ax = subplots(figsize=(23,17))
df[:23][1:].set_index('年齢(5歳階級)').T.plot(kind='barh',ax=ax,stacked=True)
ax.legend(loc='upper right', fancybox=True, framealpha=0.5)
xticks(np.arange(0,1.44e6,1e6/10),
   ['{}万'.format(int(x/1e4)) if x > 0 else 0 for x in np.arange(0,1.44e6,1e6/10)]);

非常に醜い(見難い)グラフなので、年齢区分をもっと大雑把なものにする。

スポンサーリンク

若年・中年・高年・超高年層死亡数推移

年齢区分を4分割する。

df1 = df[:22][1:].groupby(np.arange(len(df[:22][1:]))//6).sum()
df1.index = df[:22][1:].loc[1::6, '年齢(5歳階級)']
df1.head(2)
2017年 2016年 2015年 2014年 2010年 2005年 2000年 1995年 1990年 1985年 1980年 1975年 1970年 1965年 1960年 1955年 1950年
年齢(5歳階級)
0〜4歳 8703.0 9177.0 9551.0 10242.0 12027.0 14689.0 18000.0 22504.0 24027.0 27880.0 35864.0 52084.0 66990.0 79669.0 118547.0 169924.0 342888.0
30〜34歳 77426.0 79544.0 80713.0 83722.0 98426.0 117956.0 124692.0 126596.0 128427.0 137877.0 134657.0 135064.0 145234.0 148718.0 157994.0 161843.0 206659.0

インデックスの年齢区分を変更する。

df1.rename(index={'0〜4歳':'0〜29歳','30〜34歳':'30〜59歳','60〜64歳':'60〜89歳','90〜94歳':'90歳〜'},inplace=True)
df1.head(2)
2017年 2016年 2015年 2014年 2010年 2005年 2000年 1995年 1990年 1985年 1980年 1975年 1970年 1965年 1960年 1955年 1950年
年齢(5歳階級)
0〜29歳 8703.0 9177.0 9551.0 10242.0 12027.0 14689.0 18000.0 22504.0 24027.0 27880.0 35864.0 52084.0 66990.0 79669.0 118547.0 169924.0 342888.0
30〜59歳 77426.0 79544.0 80713.0 83722.0 98426.0 117956.0 124692.0 126596.0 128427.0 137877.0 134657.0 135064.0 145234.0 148718.0 157994.0 161843.0 206659.0

インデックスをリセットする。

df1.reset_index(inplace=True)
df1.head(2)
年齢(5歳階級) 2017年 2016年 2015年 2014年 2010年 2005年 2000年 1995年 1990年 1985年 1980年 1975年 1970年 1965年 1960年 1955年 1950年
0 0〜29歳 8703.0 9177.0 9551.0 10242.0 12027.0 14689.0 18000.0 22504.0 24027.0 27880.0 35864.0 52084.0 66990.0 79669.0 118547.0 169924.0 342888.0
1 30〜59歳 77426.0 79544.0 80713.0 83722.0 98426.0 117956.0 124692.0 126596.0 128427.0 137877.0 134657.0 135064.0 145234.0 148718.0 157994.0 161843.0 206659.0
style.use('fivethirtyeight')

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=(18,10))
df1.set_index('年齢(5歳階級)').T.plot(kind='barh', ax=ax)
ax.legend(loc='upper right', fancybox=True, framealpha=0.5)
xticks(np.arange(0,9.1e5,1e5/2),
   ['{}万'.format(int(x/1e4)) if x > 0 else 0 for x in np.arange(0,9.1e5,1e5/2)]);

もっと見やすい棒グラフをプロットする。

style.use('seaborn-dark')
fp = FontProperties(fname='/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf', size=54)
rcParams['font.family'] = fp.get_name()
rcParams["font.size"] = "18"
fig, ax = subplots(figsize=(18,10))
df1.set_index('年齢(5歳階級)').T.plot(kind='barh',ax=ax,stacked=True)
ax.legend(loc='upper right',fancybox=True,framealpha=0.5,prop={'size': 26})
xticks(np.arange(0,1.41e6,1e6/10),
   ['{}万'.format(int(x/1e4)) if x > 0 else 0 for x in np.arange(0,1.41e6,1e6/10)]);

1950年は若年層が大量に死んでいる。朝鮮戦争に参戦してたかのような死にっぷりだが、実際は乳幼児が栄養失調や病気が原因で大量死している。この後、日本は朝鮮戦争特需によって奇跡の復興を遂げ、乳幼児死亡数は劇的に減少している。

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

フォローする