Sources
All three datasets are City of Toronto Open Data under the Open Government Licence - Toronto, pulled 2026-10-09 (portal last refreshed 2026-09-21): TTC Subway Delay Data, TTC Streetcar Delay Data, and TTC Bus Delay Data. Resources were enumerated with the CKAN catalog API (package_show on each dataset slug); exact resource IDs and pull dates are in resource_meta.json in the repo.
What was joined
Subway: yearly XLSX files 2014-2024 (12 monthly sheets each) plus the rolling 'TTC Subway Delay Data since 2025' CSV. Streetcar and bus: yearly XLSX 2014-2024 plus the rolling 2025+ CSVs. The official code-description tables were joined first: 140 subway codes, the TTC legacy subway table of 71 codes, 85 streetcar codes, 46 bus codes. Prior-art articles at opendatacanada.ca were methodology reference only; every number was recomputed from the raw files.
What was normalized
Monthly-sheet column renames (Gap/Delay, Incident ID), the bus/streetcar Route/Line vs subway Line/Bound difference, and 117 subway station spelling variants normalized to canonical names (2,099 rows, e.g. DANFORT to DANFORTH). One incident-level table results: date, time, mode, line/route, station/location, raw cause code, crosswalked cause category, delay minutes, day of week, hour.
What was left out
Dropped rows: streetcar/bus Line placeholders of 999 or 500 (1,752 rows), Min Delay of exactly 999 as a data-entry cap (1,235), Min Delay over 300 minutes (5,391), negative Min Delay (10). Zero-minute rows were kept but flagged (221,620). Raw rows ingested: 1,248,435. Cleaned rows: 1,240,037.
Exact computation
Delay-minutes are summed per row of the cleaned incident table; incident counts count rows. Average minutes per incident is total delay-minutes divided by incident count. Category shares are category delay-minutes divided by the mode total. Line shares are line delay-minutes divided by the subway total. All aggregates are published in data/aggregates/; the export script scripts/export_site_data.py reproduces every figure on this page from them.
Crosswalk v1
539 rows, methods official 271, official-legacy 71, direct-label 58, cross-mode-official 45, pattern 94; confidence high 416, medium 67, low 56. By incident rows, 99.3% map at high or medium confidence; 8,618 rows (0.7%) rest on pattern matching; zero rows are unmapped. No TTC-published crosswalk exists; this one is editorial and versioned.
Built October 2026 from City of Toronto open data.