用 TDX 開放資料實測「台鐵誤點導致旅客錯過下一段高鐵」的發生率。 資料期間 2025-01-21 ~ 2026-07-27(553 天),約 3,940 萬筆列車動態紀錄。
在板橋站台鐵轉高鐵的行程中,約 12.4% 會因上游誤點而錯過原訂班次 — 大約每 8 次轉乘就有 1 次接不上。
真正意外的是:多留緩衝時間幾乎沒有幫助。
| 預留轉乘緩衝 | 斷鏈率 |
|---|---|
| 10 分鐘 | 12.43% |
| 15 分鐘 | 11.42% |
| 20 分鐘 | 11.71% |
緩衝加倍,斷鏈率只降 0.7 個百分點,甚至在 20 分鐘時回升。
原因是高鐵板橋站的班距中位數只有 10 分鐘:無論你多早出門,系統都會把你排進「表定抵達 + 緩衝」之後最早的一班,所以你相對於那一班的寬裕度永遠落在 0–10 分鐘之間。提早出門只是換到另一班同樣脆弱的車。
推論:這個問題旅客無法靠自己的行為解決,只能靠事前資訊。
完整方法、口徑與限制見 docs/findings.md。
如果你要用 TDX 歷史 API — 直接看 docs/tdx-api-notes.md。
裡面是實測踩出來的坑,官方文件上查不到:
- 歷史 API 的路徑要有
/Historical/這一段,少了就 404 - 同一個 API 群組有三種回傳格式(單一 JSON 物件 / JSON 陣列 / NDJSON),要分別處理
- 日期參數有兩種慣例:時刻表走路徑
/Date/{date},其他走查詢字串?Dates= - 氣象資料用
-99當缺值哨符,不轉換會污染統計 - 保存期限:文件寫 2021/06 起,實測只回溯到 2025-01-21,是約 18 個月的滾動窗口
- 高鐵
AlertInfo在特定日期會固定回 HTTP 500(伺服器端 bug,重試無效)
如果你想重現這個分析 — 見下方「重現步驟」。
| 路徑 | 內容 |
|---|---|
src/ |
全部程式(抓取、轉檔、分析、繪圖) |
docs/tdx-api-notes.md |
TDX 端點盤點與踩坑筆記(本 repo 最有參考價值的部分) |
docs/data-catalog.md |
各資料集的欄位、筆數與兩種台鐵動態資料來源的差異 |
docs/findings.md |
分析結果、方法與限制 |
output/ |
分析圖表與結果 CSV |
data/ |
資料集本體(不在版控內,2.9 GB,需自行抓取) |
pip install -r requirements.txt
cp .env.example .env # 填入自己的 TDX 憑證TDX 憑證申請:https://tdx.transportdata.tw/register 歷史資料 API 需要歷史資料等級的訂閱權限,一般帳號會拿到 403。
python -u src/fetch_extra_api.py # 抓歷史資料(可中斷續跑,會跳過已存在的日期)
python src/analyze_connection.py # 產出斷鏈率分析
python src/analyze.py # 產出誤點分布圖表fetch_extra_api.py 逐日抓取並寫成 parquet,已存在的日期會自動跳過,所以中斷後直接重跑即可。全量約需數小時。
TDX 歷史 API 是約 18 個月的滾動窗口,舊資料會持續往外掉。
這個 repo 不含資料本體,而本文的分析期間(2025-01-21 起)已有部分落在窗口外,無法再抓取。若你要完整重現,實際能拿到的起始日會晚於此。
想長期累積的話,把 fetch_extra_api.py 設成每日排程抓前一天,成本極低。
程式碼採 MIT License — 可自由使用、修改、散布,保留著作權標示即可。
授權只涵蓋程式碼,不涵蓋資料。 TDX 與各政府開放平台的資料各有其使用條款,再散布前請自行確認。本專案的做法是只提供抓取程式,資料由使用者以自己的憑證取得。
- 開發環境為 Windows 11 + Python 3.13
requirements.txt中pandas==3.0.0/pyarrow==22.0.0為刻意鎖版:更新版本的 pyarrow DLL 會被 Windows Smart App Control 阻擋而無法載入