How this map was made
Every number on this site comes from public data, pulled by scripts/fetch_data.py. Nothing is typed in by hand.
Sources
- U.S. Census Bureau, American Community Survey (Census Data API). Neighborhood numbers are 2020–2024 5-year estimates for NYC's 55 Public Use Microdata Areas (PUMAs). Borough and citywide numbers come from the same survey for the 5 counties and New York City (place 51000). Trend lines use 1-year estimates (2011–2024, with no 2020 release).
- PUMA boundaries: NYC Open Data: 2020 Public Use Microdata Areas (PUMAs) (pikk-p9nv). They are simplified for the web with Douglas–Peucker.
- NYC Open Data, Affordable Housing Production by Building (HPD, dataset
hg8x-zxpr): 9,551 buildings and 320,946 units with start dates from 2014-01-03 to 2026-06-30. Each building is matched to a PUMA by its coordinates (point-in-polygon). - BLS CPI-U (U.S. city average, annual) puts dollar trend lines into constant 2024 dollars.
Why PUMAs?
A PUMA is the smallest area with at least 100,000 people that the Census publishes. In NYC, each PUMA matches a community district, or two combined, so it works as a stand-in for a "neighborhood". A PUMA is big enough for reliable 5-year estimates and small enough to show real differences.
Measures
| Measure | Definition | Source table |
|---|---|---|
| Born outside the U.S. | Share of residents born outside the United States and its territories. | ACS B05012 |
| Median gross rent | Monthly contract rent plus utilities for renter-occupied units, median. | ACS B25064 |
| Rent-burdened households | Renter households paying 30% or more of income on gross rent. | ACS B25070 |
| Severely rent-burdened | Renter households paying 50% or more of income on gross rent. | ACS B25070 |
| Households that rent | Share of occupied housing units that are renter-occupied. | ACS B25003 |
| Median household income | Household income in the past 12 months, median, in survey-year dollars. | ACS B19013 |
| Below the poverty line | Share of people whose income is below the federal poverty threshold. | ACS B17001 |
| Unemployment rate | Unemployed people as a share of the civilian labor force (16+). | ACS B23025 |
| Take the subway to work | Workers 16+ whose main way to work is subway or elevated rail. | ACS B08301 |
| Affordable units per 1,000 renter households | Units counted under NYC's Housing New York / Housing Our Neighbors plans (new + preserved), per 1,000 renter households. | NYC Open Data hg8x-zxpr + ACS B25003 |
Uncertainty
ACS numbers are survey estimates, so each one has a 90% margin of error (shown as ± on the station cards). For percentages built from two estimates, the margin of error uses the Census Bureau's formula for proportions. For sums like 30–34.9% + 35–39.9% + …, it uses the square root of the summed squared MOEs. When two neighborhoods' ranges overlap, the gap between them may not be real. Rents and incomes above the Census top-code are shown with a "+".
Statistics in the findings
Correlations are Pearson's r across all neighborhoods, and the scatterplot fit lines are ordinary least squares. They describe patterns across places, not individual households (beware the ecological fallacy), and they don't show cause and effect.
About the subway lines
Every stop is a real station, and the route bullets borrow MTA colors. But the lines are a storytelling device. The Q, 4 and 7 here don't follow their real routes exactly; the 7, for example, "transfers" to the Bronx, Brooklyn and the Staten Island Ferry. A stop shows the numbers for the PUMA it sits in.
Rebuild the data
export CENSUS_API_KEY=your_key
npm run dataLast generated 2026-10-16.