今日は,政府統計の交通事故発生状況をPythonで可視化します.
政府統計ポータルサイトe-Statの登録および使い方については以前の記事をご覧ください.
記事のコードはこちらで実行可能です.一緒に実行してみてください.
統計データの取得
今回扱うデータは,「道路の交通に関する統計 交通事故の発生状況」です.
いつも通り,APIを押して,APIリクエストURLを取得します.
あとは,Python上で必要なライブラリをインポートして,データを取得します.
APIリクエストURLのappIdのところには,自分のappIdを入力してください.(詳しくはこちら)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import urllib.request import json import matplotlib.pyplot as plt url = 'http://api.e-stat.go.jp/rest/2.1/app/json/getStatsData?appId=&lang=J&statsDataId=0003281500&metaGetFlg=Y&cntGetFlg=N§ionHeaderFlg=1' with urllib.request.urlopen(url) as response: data = response.read() d = json.loads(data.decode()) def get_data(unit="件",tab="1010"): x=[] y=[] for value in d["GET_STATS_DATA"]["STATISTICAL_DATA"]["DATA_INF"]["VALUE"]: if value["@unit"]==unit and value["@tab"]==tab: x.append(int(value["@time"])/1000000) y.append(int(value["$"])) return x,y |
交通事故発生状況の可視化
元コードでは,何パターンか可視化しましたが,ここでは,2つグラフを示したいと思います.
まずは,以下のデータを用意します.
- 交通事故の発生件数
- 死者数
- 負傷者数
1 2 3 | x,y = get_data(unit="件",tab="1010") x_d,y_d = get_data(unit="人",tab="1080") x_i,y_i = get_data(unit="人",tab="1190") |
はじめに,交通事故の発生件数と負傷者数を一つのグラフに表示します.全体のコードはこんな感じ.
1 2 3 4 5 6 7 8 9 10 11 12 | fig,ax1 = plt.subplots() ax1.plot(x,list(map(lambdai:i/1000,y)),label="Occurences",color="b") ax2 = ax1.twinx() ax2.plot(x_i,list(map(lambdai:i/1000,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 [K]",fontsize=15) plt.show() |
一つのグラフで,二つの軸を扱うには, ax2=ax1.twinx() を実行します.
これで左右にそれぞれ軸を設定し,2つのグラフを連携させることができます.
また,リストに格納されているy座標の値は大きすぎるので,map関数とlamnda関数でリスト内の全ての値を1000で割っておきます. list(map(lambdai:i/1000,y)) 単位がずれたので,縦軸の単位は千人 (K)に直しておきました.
ここでは,左軸が交通事故の発生件数,右軸が負傷者数です.
交通事故の発生件数と負傷者数には強い相関がありますね.
次は,交通事故の発生件数と死者数の関係をグラフに表示してみます.
確かに,グラフの山谷は一致していますが,1970年代以前と以降で傾向が大きく変わっています.
1970年代以前は事故あたりの死者数が多いのに対して,以降は事故あたりの死者数が大きく減少しています.
これは,交通安全に対する技術や法整備が進んだからでしょうか?調べてみたいと思いました.
「死者数に至っては1970年代の昭和40年代の“交通戦争”と呼ばれる交通事故が多発した時期と比較すると、約4分の1にまで減少しています。」
「平成19年自動車運転過失致死傷罪が制定された」
こちらのサイトによると,1970年代の山は”交通戦争”と呼ばれる期間のようです.
2010年以降の交通事故発生件数の減少は,法整備が進んだからのようですね.
この辺も気になったので,調べてまとめたいものです.
まとめ
今回は,政府統計の交通事故に関するデータをPythonで可視化してみました.
色々と面白い発見がありましたが,このデータだと人口増減を考慮できていないので,人口あたりのデータで見直す必要がありそうです.
クレジット
「このサービスは、政府統計総合窓口(e-Stat)のAPI機能を使用していますが、サービスの内容は国によって保証されたものではありません。」
(https://www.e-stat.go.jp/api/api-info/credit)
My favorite food is Sushi and Yakiniku.
コメント