昨日は,政府統計の交通事故発生状況をPythonで可視化しました.
昨日のコードだと,交通事故による死者数や負傷者数が,当時の人口を考慮できていませんでした.
今日は,死者数や負傷者数を当時の人口10万人あたりにして,公平に比べてみます.
記事のコードはこちらで実行可能です.一緒に実行してみてください.
交通事故発生状況の可視化
今回扱うデータは,「道路の交通に関する統計 交通事故の発生状況」です.
データの取得方法などは,昨日の記事をご覧ください.
可視化のコードは次のようになります.appIdのところには自分のappIdを入力します.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | importurllib.request importjson importmatplotlib.pyplotasplt url='http://api.e-stat.go.jp/rest/2.1/app/json/getStatsData?appId=&lang=J&statsDataId=0003281500&metaGetFlg=Y&cntGetFlg=N§ionHeaderFlg=1' withurllib.request.urlopen(url)asresponse: data=response.read() d=json.loads(data.decode()) defget_data(unit="件",tab="1010"): x=[] y=[] forvalueind["GET_STATS_DATA"]["STATISTICAL_DATA"]["DATA_INF"]["VALUE"]: ifvalue["@unit"]==unitandvalue["@tab"]==tab: x.append(float(value["@time"])/1000000) y.append(float(value["$"])) returnx,y x,y=get_data(unit="件",tab="1010") x_d,y_d=get_data(unit="人",tab="1470") x_i,y_i=get_data(unit="人",tab="1480") fig,ax1=plt.subplots() ax1.plot(x,list(map(lambdai:i/1000,y)),label="Occurences",color="b") ax2=ax1.twinx() ax2.plot(x_d,y_d,label="Dead",color="r") ax1.tick_params(labelsize=15) ax2.tick_params(labelsize=15) ax1.legend(bbox_to_anchor=(0,1.15),fontsize=13,loc='upper left') ax2.legend(bbox_to_anchor=(1,1.15),fontsize=13,loc='upper right') ax1.set_xlabel("Year",fontsize=15) ax1.set_ylabel("Number of occurences [K]",fontsize=15) ax2.set_ylabel("Number of dead people \n per 100,000 population",fontsize=15) plt.show() fig,ax1=plt.subplots() ax1.plot(x,list(map(lambdai:i/1000,y)),label="Occurences",color="b") ax2=ax1.twinx() ax2.plot(x_i,y_i,label="Injured",color="r") ax1.tick_params(labelsize=15) ax2.tick_params(labelsize=15) ax1.legend(bbox_to_anchor=(0,1.15),fontsize=13,loc='upper left') ax2.legend(bbox_to_anchor=(1,1.15),fontsize=13,loc='upper right') ax1.set_xlabel("Year",fontsize=15) ax1.set_ylabel("Number of occurences [K]",fontsize=15) ax2.set_ylabel("Number of injured people \n per 100,000 population",fontsize=15) plt.show() |
y軸のラベルは,改行コード\n
を使って2行にしています.
このコードで,
- 交通事故発生件数と人口10万人あたりの死者数
- 交通事故発生件数と人口10万人あたりの負傷者数
の2つのグラフが得られるはずです.
交通事故発生状況の考察
1枚目は,左軸が交通事故発生件数,右軸が人口10万人あたりの負傷者数です.
2枚目は,左軸が交通事故発生件数,右軸が人口10万人あたりの死者数です.
ポイントを箇条書きで残しておきます.(参考:YAHOO! JAPAN ニュース 「戦後の交通事故・負傷者・死者数を探る (2019年発表版)」,ウィキペディア 「交通戦争」)
- 1955年〜:第一次交通戦争(交通事故死者数が日清戦争での日本側の戦死者数を上回る.戦後の急激なモータリゼーションにより法整備が遅れたことが原因)
- 1973年〜1974年:第一次石油危機(交通事故発生件数・死者数・負傷者数の減少)
- 1980年〜:第二次交通戦争(交通事故による死者数が再び増加し,1988年に1万人を超える.警察白書によると、「自動車交通の成長に交通違反取締りを行う交通警察官の増員や、交通安全施設等の整備等を推進するための予算を国や地方公共団体が十分に措置できなくなったため」)
- 1999年:運転中の携帯電話の通話,カーナビの操作が禁止となる
- 2000年:チャイルドシートが義務化
- 2002年:道路交通法改正(危険運転致死傷の新設,飲酒運転の厳罰化)
まとめ
いつか使えそうな統計データをまとめていますが,とても勉強になりますね.
交通事故の減少には法整備だけでなく,安全運転技術の向上もあるのでしょう.
交通事故発生件数は近年,下げ止まりと言われているようですが,自動運転などの関心も高まっているので,関連するニュースに注目したいです.
クレジット
「このサービスは、政府統計総合窓口(e-Stat)のAPI機能を使用していますが、サービスの内容は国によって保証されたものではありません。」
(https://www.e-stat.go.jp/api/api-info/credit)
My favorite food is Sushi and Yakiniku.
コメント