実店舗系のデータ解析に携わっているPDチーム/データサイエンティストの川上雄大です!
以前執筆した記事で,業務で利用した全国道路・街路交通情勢調査一般交通量調査(道路交通センサス:RTC)情報を国土交通省データプラットフォームのAPIで取得する方法を紹介ました.RTCデータは緯度経度に合わせて24時間自動車類交通量合計(metadata.RTC:24jikan_jidousharui_koutsuuryou_jouge_goukei_goukei
)のような道路交通量を代表するような値を取得できます.以下の図に東京都に関して取得したRTCデータを示します.

この表からわかる通り,表形式データでは,土地的な情報を理解することは難しいです.
そこで,本記事では,GeoPandasを使用して,道路交通センサス情報を整理し,地図上に可視化する方法を解説します.GeoPandasを使用することで,地理情報データを扱うための機能を提供し,地理情報データの可視化や解析を行う際に便利です.
特に今回は,表形式データで示された緯度経度上の交通量を地図上のヒートマップで可視化する例を紹介します!
本記事では,GeoPandasの説明,データ処理方法の順で解説を行います.
1. はじめに
まず,本節では,GeoPandasの概要について説明します.
GeoPandas とは
GeoPandasは,Pythonでジオスペーシャルデータを扱うためのライブラリです.GeoPandasは,pandasのデータフレームを拡張し,ジオメトリデータを扱うための機能を提供します.GeoPandasを使用すると,地理情報システム(GIS)のような専用のツールを使用せずに,Pythonでジオスペーシャルデータを簡単に操作できます.
GeoPandasは,地理情報データを扱うための機能を提供するため,地理情報データの可視化や解析を行う際に便利です.
2. データ処理方法
本節では,GeoPandasを使用して,取得した道路交通センサス情報を整理し,地図上に可視化する方法を解説します.
2.1. GeoPandasのインストール
まずはじめに,GeoPandasに関連するライブラリをインストールします.
pip install geopandas contextily
2.2. データの変換
まずは以前執筆した記事を参考に,東京都の2021年度のRTCデータを取得します.ここでは,DPF:prefecture_code
を13
(東京都)に設定して,東京都のRTCデータを取得します.前回の記事と重複するため,詳細は省略しますが,df_rtc
という変数にDataFrame形式でデータを取得します.
まずは,GeoPandasのデータフレームに変換します.
import geopandas as gpd
from shapely.geometry import Point
geometry = [Point(xy) for xy in zip(df_rtc['metadata.DPF:longitude'], df_rtc['metadata.DPF:latitude'])]
gdf = gpd.GeoDataFrame(
df_rtc[[
"metadata.RTC:24jikan_jidousharui_koutsuuryou_jouge_goukei_goukei",
]],
geometry=geometry,
crs='EPSG:4326',
)
gdf = gdf.to_crs(epsg=3099)
gdf
一見すると,通常のDataFrameと同じように見えますが,次のようなGeoDataFrameになっています.

ここで,緯度経度をPoint型に変換し,GeoDataFrameに変換しています.また,crs='EPSG:4326'
で緯度経度を示す座標系を指定し,to_crs(epsg=3099)
で日本の平面直角座標系に変換しています.平面座標系に変換することで,地図上にデータをプロットする際に,正確な距離関係の下で位置にプロットすることができます.
今回は,このままだとデータ数が多すぎるため,交通量が50000以上の主要道路のみを抽出します.
gdf_major = gdf[gdf['metadata.RTC:24jikan_jidousharui_koutsuuryou_jouge_goukei_goukei'] > 50000]
2.3. 地図上に可視化
最後に,地図上にデーカを可視化します.
import contextily as ctx
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
cmap = plt.get_cmap('coolwarm')
fig, ax = plt.subplots(figsize=(10, 10))
gdf_major.plot(
ax=ax,
column='metadata.RTC:24jikan_jidousharui_koutsuuryou_jouge_goukei_goukei',
cmap=cmap,
markersize=20,
marker='o',
legend=False,
alpha=0.8,
)
sm = plt.cm.ScalarMappable(cmap=cmap)
sm.set_array(gdf_major['metadata.RTC:24jikan_jidousharui_koutsuuryou_jouge_goukei_goukei'])
cbar = plt.colorbar(sm, ax=ax)
cbar.set_label('Traffic Volume')
ctx.add_basemap(ax, crs=gdf.crs.to_string(), alpha=0.4)
plt.xlabel('Easting (m)')
plt.ylabel('Northing (m)')
plt.show()
このコードを実行することで,次のように地図上に交通量が50000以上の主要道路のデータがプロットされます.

東京都では,湾岸部と中央部に交通量が多い道路が特に集中していることが確認できました!
3. まとめ
本記事では,GeoPandasを使用して,取得した道路交通センサス情報を整理し,地図上に可視化する方法を解説しました.GeoPandasを使用することで,地理情報データを扱うための機能を提供し,地理情報データの可視化や解析を行う際に便利です.
今回の記事を参考にして,GeoPandasを使用して,道路交通センサス情報を取得し,地図上に可視化してみてください!
参考文献