はじめに
警察庁から交通事故の詳細なデータがオープンデータとして公開されています。
このデータを色々こねてみて、最終的には交通事故発生予想みたいなことをしたい。
前回は交通事故データを読み込んでヒートマップで表示するところまでをやりました。
今回は、個別の事故位置を地図上に表示し、各データを表示してみようと思います。
時系列ヒートマップの作製
本題に移る前に、前回実施したヒートマップを時系列変化で表示する方法があったのでやってみます。
まず前回のデータの緯度経度を1時間ごとに区切ってlist化します。
honhyo2023_all_latlon_24 = [[] for _ in range(24)]
for ind, row in honhyo2023.iterrows():
h = row["datetime"].hour
honhyo2023_all_latlon_24[h].append([row["lat"], row["lon"]])
次にfoliumのHeatMapWithTime機能を使って1時間ごとの時系列表示をできるようにします。
from folium.plugins import HeatMapWithTime
map = folium.Map(location=[35, 139], zoom_start=9, tiles='cartodbdark_matter')
HeatMapWithTime(data=honhyo2023_all_latlon_24).add_to(map)
map
当然ですが深夜は事故が少なくて日中は多いですね。描画も重くなってます。
朝9時くらいがピークに見えます。
個別の事故位置を地図上で表示する
ヒートマップでは事故発生場所の分布がわかりますが個別の発生地点は分かりません。
なので個別の位置がわかるように地図表示します。
ただし、2023年だけで30万件以上の事故情報があるため、すべて表示してしまうと固まってしまいます。
そこで、foliumのMarkerClusterを使用してまとまって表示できるようにします。
map = folium.Map(location=[35, 139], zoom_start=9, tiles='cartodbdark_matter')
marker_cluster = MarkerCluster().add_to(map)
for i in range(0, len(honhyo2023)):
folium.Marker(
location=[honhyo2023["lat"][i], honhyo2023["lon"][i]],
).add_to(marker_cluster)
map
終わりに
この記事では警察庁の交通事故オープンデータをヒートマップとマーカーを使って可視化しました。
事故地点まで可視化したので次は事故情報も同時に可視化できるようにしたいと思います。