This project provides a bridge-aware adjacency graph for NYC TLC taxi zones. It exports a ready-to-use adjacency matrix and map for demand forecasting, graph ML, simulation, and spatial feature engineering. Unlike plain polygon-neighbor methods, it can add bridge and tunnel links using the NYC road network.
Builds an adjacency graph for NYC taxi zones using:
- polygon edge-sharing (rook contiguity), and
- extra bridge/tunnel links from a NYC road GraphML network.
The pipeline produces:
zones/data/taxi_zones_adjacency_matrix.csvzones/data/taxi_zones_adjacency_map.png
zones/generate_adj_grid.py: builds adjacency matrix CSV.zones/visualise_adj_map.py: draws adjacency map PNG from CSV.zones/run_pipeline.py: runs both steps.zones/data/taxi_zones/: input taxi zone shapefile.utils/utils.py: CRS helper utilities.
- Python 3.10+
- GEOS/GDAL/PROJ-compatible environment for GeoPandas stack
Install Python dependencies:
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtRun full pipeline:
python zones/run_pipeline.pyInclude disconnected islands in outputs:
python zones/run_pipeline.py --include-islandszones/run_pipeline.py
--zones(default:zones/data/taxi_zones/taxi_zones.shp)--adjacency-out(default:zones/data/taxi_zones_adjacency_matrix.csv)--map-out(default:zones/data/taxi_zones_adjacency_map.png)--graphmloptional GraphML path--include-islandskeep zero-degree zones
zones/generate_adj_grid.py
--zones--adjacency-out--graphml--include-islands
zones/visualise_adj_map.py
--zones--adjacency--output--include-islands
For bridge/tunnel enrichment, the script resolves GraphML in this order:
- path passed via
--graphml - local file at
zones/data/newyork.graphml - Kaggle download via
kagglehub(crailtap/street-network-of-new-york-in-graphml)
If Kaggle download is unavailable, pass --graphml explicitly.
- Contiguity uses rook adjacency (shared boundary edge only).
- Island/disconnected-zone warnings from
libpysalare expected. - Output directory is created automatically if missing.
MIT License (see LICENSE).