Data Ingestion
Builds the normalized SQLite database from canonical local CSV sources.
Transit Performance Knowledge Base
Pipeline, analyses, and source lineage for on-time performance and ridership research.
Built 2026-06-15 11:52 UTC · Commit e5cf673
Builds the normalized SQLite database from canonical local CSV sources.
Loads monthly scheduled trip counts and schedule periods from WPRDC exports.
Fetches NOAA daily weather and aggregates monthly features for OTP modeling.
Computes route-level traffic exposure metrics by spatially joining GTFS and PennDOT AADT data.
Loads national monthly ridership benchmark data from the NTD workbook.
Loads NTD TS2.2 annual VRH, VRM, UPT, and VOMS data into prt.db for service-level comparative analysis across US transit agencies (1991-2023).
Computes route-level traffic signal exposure (count and density) by spatially joining GTFS routes with OpenStreetMap traffic-signal nodes.
Computes route-level road-type metrics (lane count, functional class, posted speed, divided-road share) by spatially joining GTFS routes with PennDOT RMSSEG roadway segment and administrative layers.
Computes route-level road-width metrics (length-weighted lane count, one-way share, limited-access share) by spatially joining GTFS routes with the City of Pittsburgh street centerline, which (unlike PennDOT RMSSEG) includes local streets.
Computes route-level pavement-quality metrics (length-weighted IRI roughness, overall pavement index, poor-condition share) by spatially joining GTFS routes with SPC's National Highway System pavement-condition layer.
Loads PRT's authoritative classification of every bus stop as no-signal, near-side, or far-side of a traffic signal into the stop_signals table, resolving each stop to its GTFS stop_id for downstream joins.
| #▲ | Analysis▲ | Theme▲ | Outputs | Summary |
|---|---|---|---|---|
| 1 | System-Wide OTP Trend | Core OTP Patterns | dataimage |
Tracks the overall PRT on-time performance trend from 2019 through 2025, including COVID impact and recovery. |
| 2 | Mode Comparison | Core OTP Patterns | dataimage |
Compares on-time performance across service modes (BUS, RAIL, INCLINE) and route types (local, limited, express, busway). |
| 3 | Route Ranking | Core OTP Patterns | dataimage |
Ranks routes by average OTP, trend direction, and volatility to identify best/worst performers and most (in)consistent routes. |
| 4 | Tract Equity | Core OTP Patterns | dataimage |
PRT routes serving the lowest-income census tracts run on time only ~65.2% of the time, vs ~68.8% for upper-middle-income tracts -- a ~3.6 percentage-point gap that the previous neighborhood-name analysis could not see. Built by point-in-polygon assignment of every PRT stop to its containing 2020 census tract, ranking 247 tracts (vs 89 hand-curated neighborhoods). |
| 5 | Anomaly Investigation | Core OTP Patterns | dataimage |
Identifies and investigates sharp OTP drops that may indicate route restructuring, detours, or data quality issues. |
| 6 | Seasonal Patterns | Core OTP Patterns | dataimage |
Decomposes route-level OTP into trend, seasonal, and residual components to identify whether summer or winter months systematically affect performance. |
| 7 | Stop Count vs OTP | Core OTP Patterns | dataimage |
Tests whether routes with more stops have worse on-time performance, using a scatter plot of stop count against average OTP with mode-based coloring. |
| 8 | Hot-Spot Map | Core OTP Patterns | datahtmlimage |
Visualizes stop-level on-time performance on a geographic scatter plot to identify corridor-level bottlenecks and clusters of poor performance. |
| 9 | Incline Investigation | Core OTP Patterns | data |
Audits the Monongahela Incline data across all database tables to determine why it appears in OTP data with zero/null values. |
| 10 | Trip Frequency vs OTP | Route and Service Drivers | dataimage |
Tests whether high-frequency routes have worse on-time performance, using weekday trip counts as a proxy for service frequency. |
| 11 | Directional Asymmetry | Route and Service Drivers | dataimage |
Investigates whether routes with a structural imbalance between inbound and outbound trip frequency have worse on-time performance. |
| 12 | Route Geographic Span vs OTP | Route and Service Drivers | dataimage |
Computes the geographic span (max distance between any two stops) for each route and tests whether longer routes have worse on-time performance, disentangling route length from stop count. |
| 13 | Cross-Route Correlation Clustering | Route and Service Drivers | dataimage |
Computes pairwise OTP time-series correlations between all routes and uses hierarchical clustering to identify groups of routes whose performance rises and falls together. |
| 14 | COVID Recovery Trajectories | Route and Service Drivers | dataimage |
Measures how far each route's OTP has recovered relative to its pre-COVID baseline and identifies route characteristics that predict faster or slower recovery. |
| 15 | Municipal/County Equity | Route and Service Drivers | dataimage |
Aggregates on-time performance by municipality and county to assess service reliability equity at a broader geographic level than neighborhood analysis (Analysis 04). |
| 16 | Transfer Hub Performance | Route and Service Drivers | dataimage |
Identifies high-connectivity stops (served by many routes) and tests whether passengers at transfer hubs experience worse OTP than those at low-connectivity stops. |
| 17 | Weekend vs Weekday Service Profile | Route and Service Drivers | dataimage |
Tests whether routes with different weekend-to-weekday service ratios show different OTP patterns, distinguishing commuter-oriented routes from all-day service routes. |
| 18 | Multivariate OTP Model | Route and Service Drivers | dataimage |
Combines stop count, mode, bus subtype, geographic span, and service profile into a single OLS regression model to quantify relative importance and total explained variance. |
| 19 | Ridership-Weighted OTP | Route and Service Drivers | dataimage |
Compute system OTP weighted by actual average daily ridership instead of scheduled trip frequency, to measure the average rider's experience. |
| 20 | OTP → Ridership Causality | Ridership and External Factors | dataimage |
Test whether OTP declines predict subsequent ridership losses using lagged correlation and Granger causality tests. |
| 21 | COVID Ridership vs OTP Recovery | Ridership and External Factors | dataimage |
Compare ridership recovery trajectories with OTP recovery trajectories post-COVID to identify whether ridership recovery degrades OTP. |
| 22 | Passenger-Weighted Delay Burden | Ridership and External Factors | dataimage |
Estimate late rider-trips per route per month by combining ridership with OTP to identify where the most total human impact occurs. |
| 23 | Garage-Level Performance | Ridership and External Factors | dataimage |
Compare OTP and ridership trends across PRT garages (Ross, Collier, East Liberty, West Mifflin) to surface operational differences. |
| 24 | Weekday vs Weekend Ridership Trends | Ridership and External Factors | dataimage |
Track how weekday, Saturday, and Sunday ridership patterns shifted post-COVID and whether weekend ridership share correlates with OTP. |
| 25 | Ridership Concentration & Equity | Ridership and External Factors | dataimage |
Measure what share of total system ridership is carried by the lowest-OTP routes using Lorenz curves and Gini coefficients. |
| 26 | Ridership in Multivariate OTP Model | Ridership and External Factors | dataimage |
Add ridership as a predictor to the Analysis 18 OLS model to test whether it adds explanatory power beyond stop count, span, and mode. |
| 27 | Traffic Congestion and OTP | Ridership and External Factors | dataimage |
Tests whether PennDOT AADT traffic volume explains OTP variance beyond structural features |
| 28 | Weather Impact | Ridership and External Factors | dataimage |
Tests whether weather (precipitation, snow, temperature) explains OTP variance or the counterintuitive seasonal pattern from Analysis 06. |
| 29 | Service Change Impact on OTP | Ridership and External Factors | dataimage |
Do schedule changes (pick period transitions) correlate with OTP shifts? |
| 30 | Service Level vs OTP Longitudinal | Equity and Strategic Planning | dataimage |
Within-route panel: does changing trip frequency improve or degrade OTP? |
| 31 | Stop Consolidation Candidates | Equity and Strategic Planning | dataimage |
Identify low-usage stops that could be consolidated to improve OTP, leveraging the finding that stop count is the strongest OTP predictor. |
| 32 | Shelter Equity | Equity and Strategic Planning | dataimage |
Assess whether bus shelters are equitably placed relative to stop-level ridership volume and demographics. |
| 33 | Pandemic Ridership Geography | Equity and Strategic Planning | dataimage |
Map the spatial pattern of stop-level ridership loss and recovery between pre-pandemic and pandemic periods. |
| 34 | Ridership Concentration (Pareto) | Equity and Strategic Planning | dataimage |
Quantify how concentrated ridership is across stops and test whether concentration correlates with route OTP. |
| 35 | Boarding/Alighting Flow Analysis | Equity and Strategic Planning | dataimage |
Analyze net boarding-alighting flows by stop and direction to identify major trip generators and attractors. |
| 36 | National Ridership Growth (2019 vs 2024) | Equity and Strategic Planning | dataimage |
Compare 2019-to-2024 ridership recovery across the 150 largest US transit agencies using NTD data; rank PRT nationally. |
| 37 | Peer City Ridership Comparison | Equity and Strategic Planning | dataimage |
Track indexed monthly ridership for Pittsburgh and 7 peer cities from 2019-2025 using NTD data; compare recovery trajectories and mode splits. |
| 38 | Downtown Recovery Gap | Ridership & Recovery | dataimage |
Routes serving downtown recovered less ridership post-COVID, but the gap is driven mainly by commuter/express services (34% recovered) rather than local buses (59% recovered). Within local routes, downtown dependence alone does not predict worse recovery. |
| 39 | National Service Cuts (2019 vs 2024) | Equity and Strategic Planning | dataimage |
PRT cut 13% of vehicle revenue hours between 2019 and 2024, ranking 104th of 150 large agencies. Contrasts supply-side service cuts with demand-side ridership loss to distinguish agencies that cut service from those that lost riders despite maintaining service. |
| 40 | Peer City Dashboard | Equity and Strategic Planning | dataimage |
Pittsburgh lost 41% of riders and 13% of service hours between 2019 and 2024 — roughly middle-of-the-pack among 8 peer cities. But it is the only peer where fare revenue per trip increased ($1.57 to $1.70), suggesting PRT maintained fares while others discounted. Farebox recovery fell everywhere, though Pittsburgh's 12.8% remains second-highest among peers. |
| 41 | Operating Cost Drivers | Equity and Strategic Planning | dataimage |
PRT spends $3.34 per trip on vehicle maintenance — the highest of 8 peer cities and 47% above average. Bus fleet age does not explain the gap (PRT's buses are mid-age at 7.1 years), but the light rail fleet averages 32 years old. General administration is PRT's leanest cost category at $2.23 per trip. |
| 42 | Allegheny Go Equity | Ungrouped | dataimage |
Municipalities with poor bus reliability do not have lower Allegheny Go adoption — the program successfully reaches areas across the OTP spectrum, with no significant correlation between on-time performance and enrollment (ρ = −0.08, p = 0.50). |
| 43 | Allegheny Go Program Growth | Ungrouped | dataimage |
The Allegheny Go fare program grew from 262 rides per week to over 30,000 in 18 months, accumulating 2.27 million total rides. Ridership growth is uncorrelated with system OTP (r = 0.13, p = 0.60), driven by enrollment expansion rather than service quality. |
| 44 | Route Population Reach | Ungrouped | dataimage |
The PRT routes that reach the most residents are the RED Line LRT (58,000 people within walking distance), bus 69 to Trafford (55,000), and the SLVR Line (53,000). The Oakland-East End bus corridor (61A/B/C, 67) and the cross-town 54 each cover 43,000+ residents, making them the highest-impact routes when service is disrupted. Light-rail stations average 3-5x more reach per stop than bus stops because of their wider walking-distance buffer and dense South Hills catchments. |
| 45 | Population-Weighted System OTP | Route and Service Drivers | dataimage |
Routes in PRT's network where many people live run late more often than the system as a whole. The average resident-near-a-route experiences ~68.1% on-time service, vs ~67.3% for the average scheduled trip and ~69.4% across all routes equally — confirming that ridership and population concentrate on the more lateness-prone urban-core routes. |
| 46 | Population Transit Proximity | Ungrouped | dataimage |
Allegheny County's densest neighborhoods are also its best-served: population density and distance to the nearest PRT stop are strongly negatively correlated (Spearman rho = -0.62). The median distance to a stop falls from 1,350 m in the sparsest quarter of census tracts to just 151 m in the densest. About 68% of county residents live within a half-mile of a stop; the rest are concentrated in lower-density tracts on the periphery. |
| 47 | Route Ridership Ranking | Ungrouped | dataimage |
Ranking Pittsburgh's transit routes by weekday ridership from 2017 to 2024, the busiest is the P1 East Busway bus (about 6,600 riders a day), ahead of the Red Line and Blue Line light rail and the 51 Carrick bus. Ridership is concentrated: the 18 busiest routes carry half of all weekday riders, while roughly half of the 103 routes each account for under 1%. |
| 48 | Service Productivity (Passengers per Revenue Hour) | Equity and Strategic Planning | dataimage |
Each hour of PRT's fixed-route service carries about 40% fewer riders than it did in 1991 — productivity fell from 39 passengers per service hour to 23. Both service and ridership fell, but ridership fell far faster: service hours dropped 26% while ridership dropped 57%, so buses and trains are running emptier rather than being right-sized to demand. PRT's 32% drop since 2019 is the steepest of 8 peer cities. Population loss is not the cause: Allegheny County has only about 8% fewer residents than in 1991, so ridership per resident has itself roughly halved — fewer residents explains only about a tenth of the decline. Correction (June 2026): an earlier version of this analysis reported service hours as "barely moved" (down just 5%). That figure was wrong because the federal NTD database quietly added ACCESS paratransit hours to its agency-wide total starting in 2008, creating an artificial 18% jump that masked real service cuts. The charts and numbers above use a corrected series that excludes paratransit throughout for a fair comparison. |
| 49 | Transit Service & Boardings vs Population Density | Equity and Strategic Planning | dataimage |
Pittsburgh's denser neighborhoods don't just get a closer bus stop -- they get far more service. Across Allegheny County census tracts, the densest quarter has about 26 times as many weekly bus trips as the sparsest. Boardings follow the same pattern and shadow service almost exactly, but they pile up far more unevenly than people do: the densest quarter of tracts holds 23% of residents yet generates 73% of all boardings, and Downtown alone accounts for 27%. A tract's population barely predicts its boardings at all -- riders board where trips start, which concentrates them in a few job and activity centers like Downtown, the riverfront, and the airport, not evenly across where people live. |
| 50 | Bus vs. Rail: Productivity by Mode | Equity and Strategic Planning | dataimage |
Analysis 48 found that PRT carries about 18 passengers per hour of service it runs, half what it managed in the 1990s. But that one number blends four very different services. Splitting them apart, the light rail "T" actually runs fuller than the bus — 25.7 passengers per service hour in 2024 versus 22.2 for motor buses. The door-to-door ACCESS service for riders with disabilities carries 1.9: it accounts for just 2.4% of trips but uses 23% of all service hours, which is normal for a federally required service that picks people up one at a time. Set ACCESS aside and PRT's regular bus-and-rail network runs at 22.5 passengers per hour — about a quarter higher than the headline figure suggests. Productivity fell at every mode after 2019, with light rail down the steepest of the two main modes. |
| 51 | Traffic Signals and OTP | Ridership and External Factors | dataimage |
Buses that pass more traffic signals per mile run measurably later. Counting every traffic signal along each route, the densest-signal routes -- inner-city local lines through the East End and Hill District -- average around 60% on time, while suburban routes with few signals run 70% or better. Signal density is a strong predictor of poor on-time performance even after accounting for how many stops a route has and how long it is, lifting the share of explained performance differences from 47% to 60%. Notably, an earlier analysis found that overall traffic volume had no such effect: it is the fixed stop-and-wait at each signal, not how busy the road is, that tracks with delay. PRT's own authoritative stop records independently confirm this: the share of a route's stops that sit at a signal predicts lateness just as strongly (and agrees with the map-based count), so the finding does not hinge on the open-data estimate. |
| 52 | VRH and Vehicle Revenue Miles | Ungrouped | dataimage |
PRT's bus operating speed has held steady at roughly 12.8–13.0 mph for 22 years (2002–2024), suggesting traffic congestion has not measurably slowed the fixed-route fleet. Over the same period, bus service volume contracted ~34% (both VRH and VRM fell in lockstep). The main speed shift is in paratransit, which slowed from 15 mph in 2019 to 13.8 mph in 2024 — a 9% decline likely tied to longer or more complex trip routing. Paratransit now makes up about 24% of all PRT vehicle revenue hours. |
| 53 | Near-Side vs. Far-Side Stop Placement | Ungrouped | dataimage |
Using PRT's own authoritative stop records, 86% of bus stops at traffic signals are placed before the light (near-side) and only 14% after it (far-side) — the legacy default that modern transit guidance advises against. A from-scratch map-based estimate built from OpenStreetMap matched PRT's records on 98% of stops, validating the method. Whether a route has more near-side or far-side stops has no measurable link to how on-time it runs. |
| 54 | Stop Position and Near-Side Placement | Ungrouped | dataimage |
Near-side stop placement is uniformly distributed along PRT routes — 81–85% near-side at every position quintile, with no gradient toward the end where delay accumulates. Splitting routes into first-half and second-half near-side fractions does not improve the OTP correlation (r ≈ −0.12–0.14, all p > 0.28). |
| 55 | Road Classification and OTP | Ridership and External Factors | dataimage |
Buses that run along wider, multi-lane roads are consistently more likely to run late. Accounting for the type of road a route travels — especially its number of lanes — explains far more of the gap in on-time performance between routes than route length, stop count, or overall traffic volume do, lifting the share of variation explained from 40% to 58%. The likely culprit is congested multi-lane city streets clogged with traffic signals and turning cars, not fast highways: where wide roads actually move at speed, buses keep their schedule. |
| 56 | City Centerline and OTP | Ungrouped | dataimage |
An independent check confirms the earlier finding: buses on wider, multi-lane roads run late more often. Using the City of Pittsburgh's own street map — which counts lanes on every city street, not just state highways — road width still tracks on-time performance just as strongly (correlation -0.44, versus -0.47 from the state-road data). Adding lane count to a model of route structure raises the share of on-time-performance differences explained from 43% to 60%. Two maps built by different agencies pointing to the same answer means road width is a real, robust correlate of lateness, not a quirk of one dataset. |
| 57 | Pavement Condition and OTP | Ungrouped | dataimage |
Bumpy roads don't make buses late -- once you account for road width. Rough pavement does sit on routes that run a little later, but that's because the roughest roads are the wide, busy arterials that were already shown to hurt on-time performance. After controlling for road width, pavement roughness adds nothing measurable (no significant effect; the share of on-time-performance differences explained barely moves, 56% to 57%). The takeaway: the road-type effect on reliability is about how a road is laid out -- lanes, traffic, stops -- not the condition of its surface, so repaving alone would not be expected to make buses more punctual. |
| 58 | Stop Signal Placement Equity | Ungrouped | dataimage |
Stops placed at traffic signals — and the operationally worse "near-side" stops that sit before the light — are spread evenly across Pittsburgh's neighborhoods regardless of income, car ownership, or racial makeup. The near-side share holds at about 85% whether a stop is in the poorest or richest quartile of neighborhoods, and no demographic measure shows a meaningful relationship with where signalized stops are placed. The legacy near-side pattern is a system-wide design inheritance, not an equity gap — so fixing it would help riders broadly rather than redress a disparity. The finding holds even after weighting each stop by how many riders actually use it. |
| 59 | National Service Elasticity of Ridership | Ungrouped | dataimage |
When a transit agency cuts service, it loses riders — but far fewer than you might expect. Looking at more than 8,000 year-to-year changes at hundreds of US transit agencies from 1991 to 2024, a 1% cut in service hours goes hand in hand with about a 0.5% drop in ridership. Agencies that cut service deeply (10% or more in a year) lost a median of about 6% of their riders, while agencies that added service gained riders in step. The relationship has held steady for three decades. But service levels explain only about an eighth of why ridership rises or falls year to year — most of the swing comes from forces outside the agency's control, like gas prices, the economy, and how many people are commuting. Pittsburgh's own history fits this national pattern closely. |
| No analyses match your filters. | ||||