日本の交通事故死亡者数の推移を性別・年齢別に棒グラフ化する

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

日本ほど歩行者軽視の先進国は他に存在しないというようなことを以前書きましたが、日本の交通事故死者数はどうなっているのか気になったので、1950年〜2017年の67年間の交通事故死亡数の推移をグラフ化してみることにしました。意外だったのは、交通事故死亡者数がかなり劇的に減少しているということでした。自分が子供の頃は2万人近く死んでいただけに、昨今の死亡者数の大幅な減少はかなりの驚きに値します。

スポンサーリンク

## データの下準備

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

from pandas import *

df = read_csv('caraccident.csv',encoding='cp932')
df.head(2)
表章項目 死因年次推移分類 性別 年齢(5歳階級) /時間軸(年次) 2017年 2016年 2015年 2014年 2010年 1995年 1990年 1985年 1980年 1975年 1970年 1965年 1960年 1955年 1950年
0 死亡数【人】 Hi15_交通事故 総数 総数 NaN 5004 5278 5646 5717 7222 15147 15828 14401 13302 16191 24096 19516 17757 10500 7542
1 死亡数【人】 Hi15_交通事故 総数 0~4歳 NaN 30 31 40 31 53 194 293 332 565 996 1190 1139 1266 1108 1007

2 rows × 22 columns

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 総数 5004 5278 5646 5717 7222 10028 12857 15147 15828 14401 13302 16191 24096 19516 17757 10500 7542
1 0~4歳 30 31 40 31 53 82 120 194 293 332 565 996 1190 1139 1266 1108 1007
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.
スポンサーリンク

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=(25,20))
df[:23][1:].set_index('年齢(5歳階級)').T.plot(kind='barh',ax=ax,stacked=True)
ax.legend(loc='lower right', fancybox=True, framealpha=0.5);
xticks(np.arange(0,2.6e4,1e4/5),
    ['{}万'.format(float(x/1e4)) if x > 0 else 0 for x in np.arange(0,2.6e4,1e4/5)]);

2017年の交通事故死亡者数は、警察庁発表だと3694人となっていますが、これは24時間以内死亡数で、30日以内死亡数は4431人となっています。厚労省のデータは1年以内死亡数ということらしいのですが、このデータには水上事故や航空事故も入っています。路上交通事故死亡数については4452人となっています。

スポンサーリンク

若年層の交通事故死亡数の推移を考察する

年齢層を、0〜19歳、20〜39歳、40〜59歳、60歳以上に分けて、特に、若年層の交通事故死亡者数の推移に焦点を当ててみたいと思います。

df1 = df[:5][1:].groupby(np.arange(len(df[:5][1:]))//4).sum()
df1.index = df[:5][1:].loc[1::4, '年齢(5歳階級)']
df2 = df[:9][5:].groupby(np.arange(len(df[:9][5:]))//4).sum()
df2.index = df[:9][5:].loc[1::4, '年齢(5歳階級)']
df3 = df[:13][9:].groupby(np.arange(len(df[:13][9:]))//4).sum()
df3.index = df[:13][9:].loc[1::4, '年齢(5歳階級)']
df4 = df[:22][13:].groupby(np.arange(len(df[:22][13:]))//9).sum()
df4.index = df[:22][13:].loc[1::9, '年齢(5歳階級)']
df5 = concat([df1,df2,df3,df4], axis=0)
df5.rename(index={'0~4歳':'0〜19歳','20~24歳':'20〜39歳','40~44歳':'40〜59歳','60~64歳':'60歳〜'},inplace=True)
df5.reset_index(inplace=True)
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"] = "18"
fig, ax = subplots(figsize=(18,10))
df5.set_index('年齢(5歳階級)').T.plot(kind='barh',ax=ax,stacked=True)
ax.legend(loc='lower right',fancybox=True,framealpha=0.5,prop={'size': 26})
xticks(np.arange(0,2.6e4,1e4/5),
    ['{}万'.format(float(x/1e4)) if x > 0 else 0 for x in np.arange(0,2.6e4,1e4/5)]);

60年代、70年代は、交通戦争と言われるぐらい交通事故死者数が多かったことが見て取れます。あの時代はモータリゼーションが始まったばかりの頃だったので車はポンコツ、道路事情も劣悪な上、運転マナーも板に付かない時代であったことを考えれば、この数字は致し方ない、もしくは至極当然と言わざるを得ないでしょう。今の未成年者は、交通事故で非業の死を遂げる確率がかなり減ったので幸せだと言えます。昔の未成年者は、交通事故死の恐怖だけではなく、病死の確率も今とは比べ物にならないくらい高かったので、非常に生きるのが難しかった時代とも言えます。気になるのは、交通事故死亡数の半数が、歩行者と自転車運転者の二大交通弱者であるということです。弱者に残酷な日本の実態を象徴しています。交通事故死亡者数が半世紀で大幅に減少しているのは、少子化で運転の荒い若者が激減すると同時に、失われた24年で貧困化し車にすら乗れなくなったことと、さらに、日本国民の多くが外出すると金がかかるので外出を控えるようになり、死亡事故の15%を占めるバイク乗りが大幅に減少したためです。言い換えれば、長期にわたる経済の低迷が、交通死亡事故を大幅に減少させたということになります。何とも皮肉な話ではないでしょうか。

スポンサーリンク

2017年の交通死亡数男女比較

df6 = df[['年齢(5歳階級)','2017年']][:44][24:]
df6.rename(columns={'2017年':'Male'}, inplace=True)
df6
年齢(5歳階級) Male
24 0~4歳 16.0
25 5~9歳 21.0
26 10~14歳 10.0
27 15~19歳 103.0
28 20~24歳 169.0
29 25~29歳 127.0
30 30~34歳 104.0
31 35~39歳 110.0
32 40~44歳 162.0
33 45~49歳 239.0
34 50~54歳 193.0
35 55~59歳 232.0
36 60~64歳 226.0
37 65~69歳 325.0
38 70~74歳 312.0
39 75~79歳 334.0
40 80~84歳 358.0
41 85~89歳 258.0
42 90~94歳 80.0
43 95~99歳 8.0
df7 = df[['年齢(5歳階級)','2017年']][:67][47:]
df7.rename(columns={'2017年':'Female'}, inplace=True)
df7
年齢(5歳階級) Female
47 0~4歳 14.0
48 5~9歳 10.0
49 10~14歳 5.0
50 15~19歳 25.0
51 20~24歳 32.0
52 25~29歳 24.0
53 30~34歳 17.0
54 35~39歳 17.0
55 40~44歳 33.0
56 45~49歳 30.0
57 50~54歳 49.0
58 55~59歳 58.0
59 60~64歳 90.0
60 65~69歳 147.0
61 70~74歳 195.0
62 75~79歳 265.0
63 80~84歳 288.0
64 85~89歳 211.0
65 90~94歳 84.0
66 95~99歳 18.0
df8 = merge(df6,df7,how='inner',on='年齢(5歳階級)')
df8['Total'] = df8['Male']+df8['Female']
df8['Female_Pct'] = df8['Female'] / df8['Total']
df8['Male_Pct'] = df8['Male'] / df8['Total']
rcParams['figure.figsize'] = 20,12
rcParams["font.size"] = "16"

for (i, row) in df8.iterrows():
    bar([row['年齢(5歳階級)']], [row['Male_Pct']],
        color=['#008AB8'], width=0.9, align='center', edgecolor='none')
    bar([row['年齢(5歳階級)']], [row['Female_Pct']], bottom=[row['Male_Pct']],
            color=['#CC6699'], width=0.9, align='center', edgecolor='none')
    
xlim(-0.6, 19.6)
ylim(0, 1)
xticks(range(0, 20), df8['年齢(5歳階級)'], fontsize=13.5)
grid(False)
yticks(np.arange(0, 1.01, 0.25),
       ['{}%'.format(int(x * 100)) for x in np.arange(0, 1.01, 0.25)])
xlabel('Age group')
ylabel('Percentage of age group')

plot([-0.425, 20.425], [0.5, 0.5], lw=2, color='black')
plot([-0.425, 20.425], [0.25, 0.25], lw=2, color='black')
plot([-0.425, 20.425], [0.75, 0.75], lw=2, color='black');

2017年の交通事故死亡数の男女比を見ると、あまりにも男が死に過ぎていることに気付かされるはずです。男性死亡数が女性死亡数より少ないのは90歳以上のみとなっていますが、これはただ単に、90歳以上人口は女性の方が男性より圧倒的に多いためです。交通死亡事故の64%以上は、歩行者、自転車と二輪車の乗員が犠牲になっているという事実を考えると、交通弱者は事故に遭わないように細心の注意が必要なことが分かります。暴走車が突っ込んでくるのは防ぎようがありませんが、無理な横断や無茶な自転車運転(例えば雨の日の自転車運転)を慎むだけで、歩行者と自転車運転者の事故死の危険性は減少するはずです。結局は、自分の身は自分が守るしかないの一言に尽きます。子供がいる親なら、子供を守るのは親の責任であることは言うまでもないでしょう。注意一秒怪我一生、飛び出すな車は急に止まれないと言われるように、車に当たったら死ぬ可能性が高いということと、車の運転者はあなたを轢き殺しても大した罪にはならないこと、つまり、交通事故死は完全に犬死でしかないということを肝に銘じておくべきです。

1947年〜2018年の出生数と婚姻・離婚件数の推移をプロット
1950年〜2017年の日本人女性の年代別出産数推移をグラフ化
1908年〜2017年の平均婚姻年齢(初婚・全婚姻)をグラフ化
若年・中年・高年・超高年層死亡数推移(1950年〜2017年)
日本の右肩下がりの出生数と右肩上がりの死亡者数をグラフ化する
Python:日本人の年齢別死亡者数の推移をプロットして考察する
Python:年齢別交通事故死亡数を死亡割合に変換する
Python:在留外国人比率の高い市町村を条件別に抽出する
Python:日本人の年代別・性別死亡数を視覚化して考察する
Python:結婚適齢期女性が最も余っている都市を探し出す
Python:国籍別に在留外国人数の多い市町村を抽出する
Python:1950年〜2017年の年齢別自殺数推移を棒グラフ化する

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