はじめに
この記事では、Pythonを使ってバスの運行データを分析する方法について説明します。具体的には、乗車人数や遅延時間などのデータを取得し、可視化する方法を紹介します。
必要なライブラリ
このプロジェクトで使用するライブラリは次のとおりです。
- pandas
- matplotlib
- seaborn
- requests
データの取得
データは、公共交通オープンデータセンターから取得します。APIを使用して、特定の日付のバスの運行データを取得できます。APIエンドポイントは以下の通りです。
http://api-tokyochallenge.odpt.org/api/v4/odpt:BusRoutePattern?odpt:busroute=<路線ID>&acl:consumerKey=<APIキー>&odpt:operator=<事業者ID>&dc:date=<日付>
必要なパラメータを指定して、requestsモジュールを使ってデータを取得します。
import requests
url = "http://api-tokyochallenge.odpt.org/api/v4/odpt:BusRoutePattern"
params = {
"odpt:busroute": "都06-01",
"acl:consumerKey": "YOUR_API_KEY",
"odpt:operator": "odpt.Operator:Toei",
"dc:date": "2023-02-20"
}
response = requests.get(url, params=params)
data = response.json()
データの前処理
取得したデータをpandasのデータフレームに変換して、必要なデータだけを抽出します。
import pandas as pd
df = pd.DataFrame(data)
df = df[["odpt:busRoutePatternId", "odpt:delay", "odpt:passengerJourneys"]]
df = df.dropna()
df["odpt:delay"] = df["odpt:delay"].astype(int)
df["odpt:passengerJourneys"] = df["odpt:passengerJourneys"].astype(int)
データの可視化
matplotlibとseabornを使用して、データを可視化します。まずは、乗車人数と遅延時間の散布図を描画してみましょう。
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("darkgrid")
sns.scatterplot(data=df, x="odpt:passengerJourneys", y="odpt:delay")
plt.xlabel("乗車人数")
plt.ylabel("遅延時間(秒)")
plt.show()
次に、乗車人数と遅延時間の関係をヒートマップで表示してみましょう。
heatmap_data = df.pivot_table(index="odpt:passengerJourneys", columns="odpt:delay", aggfunc=len
plt.figure(figsize=(10, 8))
sns.heatmap(heatmap_data, cmap="YlGnBu")
plt.xlabel("遅延時間(秒)")
plt.ylabel("乗車人数")
plt.show()
結果
乗車人数が多いほど遅延時間が長くなる傾向が見られました。また、特に乗車人数が多い時間帯には、遅延が発生することが多いことがわかりました。
おわりに
Pythonを使って、バスの運行データを分析する方法を紹介しました。このようなデータを分析することで、交通事業者がサービスの改善につなげることができます。