Analysis

09: Incline Investigation

Core OTP Patterns

Coverage: 2019-01 to 2025-11 (from otp_monthly).

Built 2026-03-03 02:23 UTC ยท Commit defd5c8

Page Navigation

Analysis Navigation

Data Provenance

flowchart LR
  09_incline_investigation(["09: Incline Investigation"])
  t_otp_monthly[("otp_monthly")] --> 09_incline_investigation
  01_data_ingestion[["Data Ingestion"]] --> t_otp_monthly
  t_route_stops[("route_stops")] --> 09_incline_investigation
  01_data_ingestion[["Data Ingestion"]] --> t_route_stops
  t_routes[("routes")] --> 09_incline_investigation
  01_data_ingestion[["Data Ingestion"]] --> t_routes
  t_stop_reference[("stop_reference")] --> 09_incline_investigation
  01_data_ingestion[["Data Ingestion"]] --> t_stop_reference
  t_stops[("stops")] --> 09_incline_investigation
  01_data_ingestion[["Data Ingestion"]] --> t_stops
  d1_09_incline_investigation(("polars (lib)")) --> 09_incline_investigation
  classDef page fill:#dbeafe,stroke:#1d4ed8,color:#1e3a8a,stroke-width:2px;
  classDef table fill:#ecfeff,stroke:#0e7490,color:#164e63;
  classDef dep fill:#fff7ed,stroke:#c2410c,color:#7c2d12,stroke-dasharray: 4 2;
  classDef file fill:#eef2ff,stroke:#6366f1,color:#3730a3;
  classDef api fill:#f0fdf4,stroke:#16a34a,color:#14532d;
  classDef pipeline fill:#f5f3ff,stroke:#7c3aed,color:#4c1d95;
  class 09_incline_investigation page;
  class t_otp_monthly,t_route_stops,t_routes,t_stop_reference,t_stops table;
  class d1_09_incline_investigation dep;
  class 01_data_ingestion pipeline;

Findings

Findings: Incline Investigation

Summary

The Monongahela Incline is a data pipeline artifact. It appears in the route catalog but has zero OTP measurements. OTP was never recorded for either of Pittsburgh's two inclines.

What the Data Shows

Table MI Records Details
routes 1 row route_id=MI, mode=INCLINE
otp_monthly 0 rows No OTP data whatsoever
route_stops 2 rows Upper Station, Lower Station (78 weekday trips, 549 weekly)
stops 2 Incline stops W15307 (Upper, Mount Washington), W15308 (Lower, South Shore)
stop_reference 4 Incline stops Both inclines present historically (first_served=1503, last_served=2510)

Observations

  • Both the Monongahela Incline (MI) and the Duquesne Incline (DQI) exist in the routes table with mode=INCLINE, but neither has any OTP data.
  • The inclines are physically operational and appear in PRT's GTFS feed with regular service (78 weekday trips).
  • The OTP measurement system (whatever generates routes_by_month.csv) simply does not cover incline routes. This is likely because inclines run on a fixed schedule with no traffic interference, making OTP measurement less meaningful.
  • The ANALYSIS-PROPOSAL.md described this as "zero values" -- in fact, there are no values at all, not even zeros.

Conclusion

This is not a data quality issue to fix. The inclines were included in the route catalog because they're part of PRT's GTFS feed, but were excluded from OTP measurement, likely by design. No further action needed.

Review History

Output

Methods

Methods: Monongahela Incline Investigation

Question

The Monongahela Incline may have zero or missing OTP data. Is this a data pipeline artifact, or was OTP never measured for the Incline?

Approach

  • Query the otp_monthly table for both incline route_ids ('MI' and 'DQI') and examine all values.
  • Check if 'MI' appears in route_stops and what stops are associated.
  • Check the routes table for mode and name (including all INCLINE-mode routes).
  • Cross-reference with the stop_reference table for historical Incline stops.
  • Summarize findings as a data quality report.

Data

Name Description Source
otp_monthly Any MI records prt.db table
routes MI metadata prt.db table
route_stops MI stop associations prt.db table
stops Physical Incline stops prt.db table
stop_reference Historical Incline stops prt.db table

Output

  • output/incline_report.csv -- all data found for MI across tables
  • output/incline_report.txt -- plain-text summary of findings

Sources

NameTypeWhy It MattersOwnerFreshnessCaveat
otp_monthly table Primary analytical table used in this page's computations. Produced by Data Ingestion. Updated when the producing pipeline step is rerun. Coverage depends on upstream source availability and ETL assumptions.
route_stops table Primary analytical table used in this page's computations. Produced by Data Ingestion. Updated when the producing pipeline step is rerun. Coverage depends on upstream source availability and ETL assumptions.
routes table Primary analytical table used in this page's computations. Produced by Data Ingestion. Updated when the producing pipeline step is rerun. Coverage depends on upstream source availability and ETL assumptions.
stop_reference table Primary analytical table used in this page's computations. Produced by Data Ingestion. Updated when the producing pipeline step is rerun. Coverage depends on upstream source availability and ETL assumptions.
stops table Primary analytical table used in this page's computations. Produced by Data Ingestion. Updated when the producing pipeline step is rerun. Coverage depends on upstream source availability and ETL assumptions.
polars dependency Runtime dependency required for this page's pipeline or analysis code. Open-source Python ecosystem maintainers. Version pinned by project environment until dependency updates are applied. Library updates may change behavior or defaults.