Cincinnati Metro Transit Network Vulnerability Analysis
Description
This dataset supports a graph-theoretic vulnerability analysis of the Southwest Ohio Regional Transit Authority (SORTA) Cincinnati Metro weekday bus network. The study constructs a directed weighted graph from publicly available GTFS schedule data, computes composite vulnerability scores using Principal Component Analysis (PCA) across four centrality metrics, simulates four Cincinnati-specific disruption scenarios, and overlays results with U.S. Census equity data. Network: 3,532 connected stops | 4,048 directed edges | 50 routes | 6,435 weekday trips | service_id: 2603-QG & BH-Weekday-010 Key findings: - Most vulnerable stop: Government Square Area F (PCA score = 100.0, betweenness = 0.230) - Government Square hub shutdown (6 stops): 0.17% network disruption — network is resilient to single-hub closure - Ohio River flood scenario (235 stops, FEMA Zone AE): 6.82% disruption, 241 stops isolated — most severe scenario - Downtown power outage (96 stops, 0.5-mile radius): 2.89% disruption, 102 stops isolated - Spearman ρ = 0.18 (p < 0.001) between vulnerability score and neighborhood poverty rate Dataset contents: - SORTA_Stops_Vulnerability_Scores.csv: Main dataset (3,532 stops) with PCA vulnerability scores, four centrality metrics (betweenness, closeness, degree, trip frequency), Census equity variables (median income, poverty rate, car-free household rate, transit dependency, equity impact score), and binary scenario flags for all four disruption scenarios. - Disruption_Scenarios_Summary.csv: Quantified outcomes for four scenarios (stops removed, reachability, disruption %, isolated stops). - Sequential_Removal_Simulation.csv: Network reachability R(G') across 15 sequential stop removals (reachability curve data for Figure 5). - Network_Statistics_Summary.csv: Scalar network metrics reported in the paper. - Cincinnati_Neighborhoods_Demographics.csv: Demographic profile of 20 neighborhoods. - Shapefiles (EPSG:4326): SORTA_Stops (point), Cincinnati_Neighborhoods (polygon), FEMA_FloodZone_AE (polygon). - Figures 2–5 at 300 DPI. - Complete analysis pipeline as a Google Colab-compatible Jupyter notebook. Primary data sources (not redistributed): SORTA GTFS (go-metro.com/about/developer-data), U.S. Census ACS 5-Year 2018–2022 (api.census.gov), FEMA NFHL (msc.fema.gov). All public domain / freely available.
Files
Steps to reproduce
Full pipeline runs in Google Colab (free tier, ~15 minutes). The included Jupyter notebook (code/Cincinnati_Transit_Vulnerability_Analysis.ipynb) automates all steps. QUICK START: 1. Upload the notebook to Google Colab (colab.research.google.com) 2. Run all 20 cells in order (Runtime → Run all) CELL-BY-CELL SUMMARY: Cell 1: Install dependencies — requests, geopandas, networkx, pandas, numpy, scikit-learn, scipy, matplotlib, folium, cenpy Cell 2: Imports and output folder setup Cell 3: Download SORTA GTFS directly from go-metro.com/about/developer-data (~2 MB zip) Cell 4: Parse stops.txt (3,743 stops), routes.txt (50), trips.txt (6,435), stop_times.txt (435,964 events) Cell 5: Identify weekday service_id = "2603-QG & BH-Weekday-010" Cell 6: Build directed weighted graph — 3,532 nodes, 4,048 edges (211 isolated stops removed) Cell 7: Compute betweenness, closeness, degree centrality, and trip frequency (1–3 min) Cell 8: PCA on 4 standardized metrics → PC1 explains 50.4% variance → normalize to V(v) ∈ [0,100] Cell 9: Top 20 vulnerable stops table Cell 10: Census ACS demographics for Hamilton County OH — tries three methods in order: (1) Census REST API at api.census.gov/data/2022/acs/acs5 for tract-level B19013/B17001/B25044, (2) cenpy with year fallback, (3) curated neighborhood values from published ACS tables. Any method produces identical downstream results. Cell 11: Proximity join stops to neighborhoods + compute T(c) = 0.4×poverty + 0.6×no_car + EI(v) = V(v)×T(c) + Spearman ρ Cell 12: Sequential removal simulation (15 steps, reachability curve) Cell 13: Four Cincinnati scenarios — A: Gov Sq (6 stops, 0.17%), B: Flood (235 stops, 6.82%), C: Power outage (96 stops, 2.89%), D: Top-5 (5 stops, 0.14%) Cells 14–17: Generate Figures 2–5 at 300 DPI Cell 18: Export shapefiles (EPSG:4326) via geopandas Cell 19: Interactive Folium map (HTML) Cell 20: Final summary statistics TO USE THE PRE-COMPUTED DATA WITHOUT RERUNNING: import pandas as pd stops = pd.read_csv("data/network/SORTA_Stops_Vulnerability_Scores.csv") scenarios = pd.read_csv("data/scenarios/Disruption_Scenarios_Summary.csv") SOFTWARE: Python 3.10 | NetworkX 3.1 | pandas 2.0 | scikit-learn 1.3 | geopandas 0.13 | scipy 1.11 | matplotlib 3.7 See documentation/Reproducibility_Guide.md for full details, ArcGIS/QGIS loading instructions, and Census API notes.
Institutions
- Texas Tech UniversityTexas, Lubbock