はじめに

この記事では、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を使って、バスの運行データを分析する方法を紹介しました。このようなデータを分析することで、交通事業者がサービスの改善につなげることができます。