Findings

What the network says

Treating 142.2 million 2015 yellow-taxi trips as a directed, weighted graph turns a year of pickups and drop-offs into a set of measurable claims. Below is the results table first, then each headline finding with the figure and the numbers behind it. Every figure on this page is regenerated from the full trip set, and every number traces back to summary.json.

Results at a glance

One table, the whole study. These are the numbers the rest of the page unpacks. The graph is built on taxi zones rather than census tracts (the 2015 parquet ships zone IDs, not coordinates), so a node is a TLC zone and an edge is the annual flow from one zone to another.

Quantity Value What it means
Trips kept 142,199,201 97.4% of raw 2015 yellow-cab trips survive cleaning
Self-loop trips 6,460,370 4.54% start and end in the same zone
Nodes / edges (full) 262 / 42,347 Active zones and directed OD pairs observed
Communities 4 Leiden partition, mode of 100 seeds, z = 13.8
Modularity Q 0.189 vs null mean −0.022 (weight-concentration test)
Within-community trips 49.8% Half of all travel stays inside one community
Gravity decay β 1.146 Doubly-constrained model; flow falls off steeply with distance
Gravity fit (CPC) 0.816 Common Part of Commuters between observed and predicted
Weighted reciprocity 0.818 Most flow is matched by a return flow over the year
Degree assortativity −0.184 Mildly disassortative: hubs lean on smaller zones
Backbone edges (α = 0.05) 6,190 Disparity filter keeps 87.6% of trips

The reciprocity figure of 0.818 is an annual average. Over a full day flow looks balanced, but that hides a strong within-day directional structure that the day/night reversal section pulls back out.

Two further layers extend the study beyond 2015. A research-grade network-science pass measures how the graph breaks, whether it is scale-free, and how it compares to null models; a 10-year longitudinal pass tracks the same metrics from 2015 to 2024. The headline numbers from both:

−70.9%2019–2020 COVID volume collapse
0.004efficiency CV over 10 years
z = +217weighted reciprocity vs null
13%trips left after hub removal

Hub asymmetry: volume is not the same as reach

A hub can be big in two different ways. Midtown is big because a handful of central Manhattan zones each pour enormous volume into it. JFK is big because it pulls from almost everywhere. Plotting in- and out-degree against total trips separates the two kinds of hub: the inner-city draws sit high and to the right on volume but feed from a limited origin set, while the airports sit high on degree with far lower trips per source.

Scatter of zone in- and out-degree against total trips, separating high-volume inner-city draws from high-degree airports.
Figure 1. In- and out-degree against total trips. Inner-city draws like Penn Station and Midtown pull huge volume from a limited Manhattan origin set; airports pull from many scattered origins, giving them high degree but lower trips per source.

The contrast is sharpest in trips per source, the in-strength of a zone divided by the number of distinct origins feeding it. Midtown Center takes in about 22,900 trips per origin; JFK, despite drawing from nearly every zone in the city (in-degree 249), takes in about 4,510.

Zone In-strength In-degree Trips / source
Midtown Center 5,159,038 225 22,929
Times Sq / Theatre District 4,348,768 233 18,664
Penn Station / Madison Sq West 3,897,451 224 17,399
East Village 3,535,216 219 16,143
LaGuardia Airport 1,727,487 237 7,289
JFK Airport 1,123,029 249 4,510

JFK has a higher in-degree than Midtown Center yet a fifth of its trips per source. The airports are reach hubs; the Midtown cluster are volume hubs. A single weighted-degree number, the kind the 2016 pass reported, collapses that distinction.

Where Manhattan ends

Centrality on a map is not centrality in a network. Fit a doubly-constrained gravity model, which already accounts for each zone's own volume and for distance, and then look at what the model gets wrong per zone. The residual, a mean deviance "surprise", marks zones that are under- or over-connected given where they sit. The model reaches \(\beta = 1.146\) and a Common Part of Commuters of 0.816, so the residual is the interesting part: it is the structure the gravity baseline cannot explain.

Choropleth of per-zone gravity-model residuals across the Manhattan core; blue under-connected zones, red over-connected zones.
Figure 2. Per-zone mean deviance residual from the doubly-constrained gravity model, scoped to the high-coverage core. Blue zones are under-connected given their location, functionally peripheral despite central geography; red zones around Times Square and Midtown are over-connected.

The under-connected zones are not the outer boroughs. They are the Upper East and Upper West Sides and the East Village / Alphabet City cluster, all geographically central but residential in their taxi behaviour. The over-connected zones are the Midtown and Times Square commercial core. "Where Manhattan ends", functionally, runs along the edge of that commercial core, not along the river.

Most under-connected (core) Surprise Most over-connected (core) Surprise
Upper East Side North −20.28 Times Sq / Theatre District +9.40
Upper West Side South −16.32 Midtown South +6.26
Upper East Side South −16.13 Clinton East +5.23
Upper West Side North −15.68 Garment District +4.63
Lincoln Square East −12.30 Midtown East +4.10
East Village −5.09 Midtown Center +3.78

A negative surprise means the model expected more taxi flow than the city actually generated. The Upper East Side, perhaps the most "central" address in Manhattan, is the single most under-connected zone in the core. By taxi, it behaves like a periphery.

The day/night reversal

The annual graph is balanced; the daily graph is not. Weighted reciprocity over the year is 0.818, which makes most zones look like quiet two-way streets. Split the day into periods and the structure reappears. Midtown and the Financial District are net sinks in the morning (people arrive) and net sources in the evening (people leave). The East Village and Lower East Side are the exact mirror image.

Net-flow sign flip between morning and evening, with East Village's destination rank rising from day to night.
Annual net-flow index per zone, mostly near balanced over a full year.
Figures 3 and 4. Left: the AM/PM net-flow sign flip. Midtown and the Financial District are AM sinks and PM sources; the East Village and Lower East Side are the reverse, and the East Village climbs from roughly 42nd destination by day to 1st at night. Right: over a full year, the net-flow index leaves most zones near balanced, which is why the reversal only shows up once you look within the day.

The net-flow index (out-strength minus in-strength, normalised) flips sign between the morning and evening peaks for the zones that anchor the reversal:

Zone NFI, AM peak NFI, PM peak
Midtown Center−0.567+0.128
Times Sq / Theatre District−0.358+0.014
Financial District North−0.205+0.241
East Village+0.492−0.168
Lower East Side+0.372−0.209

The same swing shows up if you rank zones purely by how many trips arrive at night. Nightlife zones that barely register as daytime destinations dominate after midnight:

Zone Daytime destination rank Night destination rank
East Village421
Clinton East222
Lower East Side516
Meatpacking / West Village West4119
Greenwich Village North2929

The overlap between the AM and night top-hub sets is small (Jaccard 0.20): the city's busiest zones at 8 AM are largely not its busiest at 2 AM. The original blog read the Lower East Side as "suburb-like" because it looked quiet in aggregate. That was a daytime-only artefact; at night it is one of the busiest destinations in the city.

Temporal rhythms

The year has a season and the week has a shape. Volume peaks in spring: March is the single busiest month at 12.96 million trips, and the spring average runs 11.8% above the June-December average. That drop is partly weather and partly the rise of ride-hailing competition through 2015, so it should not be read as pure seasonality.

Monthly trip counts across 2015, peaking in spring and declining through the second half of the year.
Figure 5. Monthly trip counts. Volume peaks in spring (March-May, highlighted) and runs 11.8% lower across June-December. The decline is confounded by ride-hailing growth through 2015, not just weather.

Within the week, two bright bands dominate the hour-by-weekday density: the weekday commute and the weekend late night. Weekday 6-9 AM trips are 12.6% of all volume; weekend 0-4 AM trips are 5.9%. The single busiest cell is Friday around 7 PM, the overlap of the commute home and the start of the weekend.

Heatmap of trip density by hour of day and day of week, with bright weekday-commute and weekend-late-night bands.
Figure 6. Hour by weekday density. Bright bands at the weekday 6-9 AM and evening commute and at the weekend 0-4 AM hours reproduce the original heatmap finding, now on the full year.

Zones do not all share one rhythm. Clustering each zone's 24-hour weekday pickup curve separates three clean types: commuter-residential zones that peak in the morning, the commercial core that peaks in the evening, and a nightlife group (Lower East Side, the Williamsburgs, Park Slope) whose pickups peak near 11 PM.

K-means clusters of zones by their 24-hour weekday pickup shape, separating morning, evening, and late-night peaks.
Figure 7. K-means clusters of each zone's 24-hour weekday pickup shape. Commuter-residential (morning peak, hour 8), commercial core (evening peak, hour 21) and nightlife (late-night peak near hour 23; Lower East Side, Williamsburg) separate cleanly.

The $52 band is a fare rule, not a rounding artefact

A flat line on the fare-versus-duration plot has an explanation. Plot fare against trip duration and a horizontal band appears at about $52, independent of how long the trip took. The original write-up guessed this was rounded tips. It is not. It is the JFK flat fare (RatecodeID 2): a fixed $52 between Manhattan and JFK regardless of time in traffic.

Scatter of fare against trip duration showing a flat band at about $52 independent of duration.
Figure 8. Fare versus duration. The flat band at about $52, independent of duration, is the JFK flat fare (RatecodeID 2). This explains the "constant-cost outliers" the original guessed were rounded tips.

In a 300,000-trip sample, the JFK flat fare is exactly $52 (median $52, interquartile range $52-$52) and accounts for 2.03% of trips. The full $49-53 constant-cost band is 2.19% of trips, and 92.7% of that band is JFK flat-fare travel. The flatness is a tariff, not a measurement quirk.

The network, measured

A flow graph invites the standard battery of network-science tests. Run them and the answers are sometimes a clean finding and sometimes an honest "no". The four diagnostics below ask how the graph fails under attack, whether it is scale-free, how it stacks up against null models, and how efficiently it routes through real geography. Where the data does not support a headline claim, the verdict says so. First, the object itself.

    hover a zone · click a community · scroll to zoom, drag to pan
    The network itself. All 262 active zones, colored by their four Leiden communities and sized by total strength; edges are the disparity-filter backbone, the ~6,190 connections that carry 87.6% of trips. Force-directed pulls the communities into separate lobes; edge bundling wraps them onto a ring and bundles the inter-district flows. Everything measured below is a property of this object.

    Robustness: random failure is survivable, hub removal is not

    Remove zones at random and the network barely notices: dropping 10% of zones leaves about 82% of trips and roughly 96% of weighted efficiency intact. Remove the top 10% of zones by strength or by PageRank and only about 13% of trips survive, with weighted efficiency falling to between 17% and 26%. The Molloy-Reed criterion puts \(\kappa = 365.5\), so the random-failure percolation threshold is essentially 1: the giant component holds until almost everything is gone. This is a hub-and-spoke network that shrugs off accidents and falls apart under a targeted strike.

    Robustness curves comparing random zone failure against targeted hub removal, on unweighted connectivity, trips retained, and weighted efficiency.
    Figure 9. Random failure against targeted attack. On the unweighted connectivity curve the two are indistinguishable and the fragility is invisible; only the flow-weighted curves, trips retained and weighted efficiency, reveal that targeting strength or PageRank hubs collapses the network while random removal leaves it almost whole.

    Scale-free testing: heavy-tailed, but not a power law

    The zone-strength distribution is strongly heavy-tailed and beats an exponential decisively. That is as far as the evidence goes. A discrete Clauset-Shalizi-Newman fit rejects a clean power law and cannot distinguish the tail from a lognormal, and with only 262 zones the tail is too short to support any scale-free claim. The strength power-law exponent estimates land around \(\alpha \approx 1.23\) to \(1.35\), in the divergent-mean regime below 2, which is another reason to be wary of reading a power law into so few points. The honest verdict is heavy-tailed and hub-dominated, not scale-free.

    Log-log complementary cumulative distribution of zone strength with fitted power-law, lognormal, and exponential candidates.
    Figure 10. Zone-strength distribution on log-log axes with candidate fits. The tail crushes the exponential but the power law and the lognormal are statistically indistinguishable, and 262 zones is too short a tail to call. Reported as heavy-tailed, not scale-free.

    Null models: topology is uninformative, weight is not

    The graph is near-complete, with density about 0.66, so the classical topological nulls are degenerate: an Erdos-Renyi graph and a configuration model both reproduce a near-complete graph, and tell us nothing. The informative null is the one that preserves the weight sequence. Against it, weighted reciprocity sits far out in the tail at \(z = +217\): heavy flows are not scattered, they organise into round-trip corridors, Midtown to the airports and Midtown to downtown and back.

    Observed weighted reciprocity overlaid on the distribution from a weight-preserving null model, far in the right tail.
    Figure 11. Observed statistics against null-model distributions. The topological nulls collapse because the graph is near-complete; the weight-preserving null is the one that bites, and weighted reciprocity lands \(z = +217\) into its tail.

    Spatial efficiency and cascades

    Taxi routes are close to straight lines. The mean circuity is 1.006 and global efficiency reaches 99.7% of the straight-line ideal, so the network is about as spatially efficient as geometry allows. Betweenness shows little spatial clustering: Moran's I is small, about 0.028. A Motter-Lai overload cascade triggered at JFK collapses the giant component at every tolerance tested, which sounds dramatic but carries a caveat: 149 of 259 nodes carry zero initial load and therefore zero capacity, so the "no safe tolerance" result is partly a zero-capacity artefact rather than a pure fragility finding.

    Panels of route circuity, spatial autocorrelation of betweenness, and a Motter-Lai cascade triggered at JFK.
    Figure 12. Spatial efficiency and the JFK-triggered cascade. Routes are near-straight (mean circuity 1.006, global efficiency 99.7% of ideal) and betweenness is weakly clustered (Moran's I about 0.028). The cascade collapses the giant component at every tolerance, with the zero-capacity caveat noted in the text.

    Ten years: a 71% collapse, an invariant geometry

    Run the same pipeline on every year from 2015 to 2024. The fleet shrinks dramatically while its shape barely moves. Yellow-taxi monthly volume falls 42.4% from 2015 to 2019 as ride-hailing substitutes for cabs, collapses 70.9% from 2019 to 2020 under COVID, and recovers to only 48.6% of the 2019 level by 2024. The volume story is one of decline; the structural story is one of near-perfect stability.

    Monthly yellow-taxi trip volume from 2015 to 2024, declining through 2019, collapsing in 2020, and partially recovering.
    Figure 13. Monthly yellow-taxi volume, 2015 to 2024. A 42.4% ride-hailing-era decline to 2019, a 70.9% COVID collapse in 2020, and a recovery that reaches only 48.6% of the 2019 level by 2024.
    Panel detailing the 2019 to 2020 collapse and the partial recovery through 2024.
    Figure 14. The collapse and partial recovery in detail. The 2020 drop is the sharpest single-year move in the decade, and the post-2020 climb stalls well below the pre-pandemic baseline.

    What holds steady

    Hold the structure up against that volume. Annual trips have a coefficient of variation of 0.61 across the decade, a fleet that changes size by more than half, yet the geometry does not move with it. Global efficiency has a CV of 0.004 around a mean of 0.169; the gravity-model CPC a CV of 0.007 around 0.81; the gravity decay \(\beta\) a CV of 0.064; modularity \(Q\) a CV of 0.074; the maximum k-core a CV of 0.098. Degree assortativity stays negative throughout, between \(-0.123\) and \(-0.184\), so the hub-and-spoke structure never dissolves. The communities are just as durable: consecutive-year Leiden partitions align at an average Adjusted Rand Index of 0.883, and the 2019 to 2020 COVID boundary scores 0.943, so the shock did not re-draw the city's functional districts. The one genuine reshuffle is 2015 to 2016 (ARI 0.536), before the steady decline rather than during the pandemic. The spatial geometry of taxi travel is a structural invariant of the city, not of the fleet.

    The gravity decay exponent beta plotted per year from 2015 to 2024, nearly flat despite the collapse in volume.
    Figure 15. The gravity decay exponent \(\beta\) per year, barely moving (CV 0.064) while the fleet loses most of its volume.
    Adjusted Rand Index between consecutive-year Leiden community partitions, high throughout including across the COVID boundary.
    Figure 16. Consecutive-year Leiden alignment (Adjusted Rand Index): mean 0.883, the 2019 to 2020 COVID boundary 0.943, only 2015 to 2016 (0.536) a real reshuffle.

    What shifts

    The few things that do change are changes of identity, not of shape. The top arrival hub flips from the commercial core to residential Manhattan: Midtown Center, Murray Hill and Times Square lead in 2015, but the Upper East Side North and South take the top spots from 2020 onward, as work-trip demand fell faster than residential demand. And the "where Manhattan ends" finding does not just survive the decade, it sharpens: tracking the per-year gravity-residual rank of the flagged zones, the East Village drifts further into the under-connected tail, from about the 30th percentile of the Manhattan core down to the 13th, while Times Square stays pinned at the over-connected top and the Upper East Side North at the under-connected bottom.

    The top arrival hub by year, shifting from commercial-core zones in 2015 to Upper East Side residential zones from 2020 on.
    Figure 17. The top arrival hub by year: the commercial core leads early; from 2020 the Upper East Side North and South lead, a shift of identity even as the hub-and-spoke shape holds.
    Per-year gravity-residual rank of flagged zones, with the East Village drifting deeper into the under-connected tail over the decade.
    Figure 18. Per-year gravity-residual rank of the flagged zones: the East Village drifts from roughly the 30th to the 13th percentile of the core; Times Square stays over-connected, Upper East Side North under-connected.

    Read together, the panel of metrics over time tells one story: the fleet shrank by more than two-thirds, but distance decay, efficiency, hub dominance and community structure held almost perfectly steady. If you want to see all of these at once, the method page shows the full metric-evolution panel, and the live map still reads the per-zone structure that this decade leaves intact.

    Divergences from the original blog

    The modernization changed some headline numbers. The 2016-17 project worked at census-tract resolution on a smaller, differently cleaned slice. The 2015 parquet ships taxi-zone IDs rather than coordinates, so the rebuilt graph is zone-based. That changes the node count and several figures, and it also corrects two claims outright.

    Quantity Original blog This rebuild Why it changed
    Spatial unit ~580 tracts 262 zones 2015 parquet has zone IDs, not lat/long
    Frequent edges (>500/yr) ~1,275 7,945 Zone aggregation packs trips into fewer, heavier pairs; the blog counted a Manhattan tract subset
    "Constant-cost outliers" rounded tips JFK flat fare $52 RatecodeID 2, 92.7% of the band
    Lower East Side "suburb-like" night #6 destination Aggregate hid a strong day/night swing
    Degree treatment single degree directed in / out Splitting degree exposes hub asymmetry

    Two caveats carry through all of this. Yellow taxis over-sample Manhattan and the airports, so the outer boroughs are thin in this data and the gravity residuals are scoped to the high-coverage core. And because the rebuild works on taxi zones rather than tracts, the spatial resolution is coarser than the original. The method page documents both, and the live map lets you read the per-zone numbers directly.