The summer jobs factor map: methodology & sources
What the map is for
New York City's Summer Youth Employment Program (SYEP) pays 14- to 24-year-olds for summer work. Deciding where to add slots or sites means weighing several things at once: how many young people live in a neighborhood, how many are poor or out of school and work, how much violence and police contact young people there experience, and how many program sites are already nearby. The map does not combine these into a score. It lets a reader set any two side by side. Its companion, The summer jobs gap, builds an explicit need index at a coarser geography; What the evidence shows, Vital City's evidence browser, collects the evaluations of these programs.
Young people and summer jobs: the 25 measures
| Measure | Source and formula |
|---|---|
| Residents 16 to 24; share; per square mile | American Community Survey (ACS) 2020–24 5-year estimates, table B23001 age-group totals (16–19, 20–21, 22–24, both sexes). Share divides by B01003 total population; density by land area. |
| Residents 14 to 24 (2020 count) | 2020 census Demographic and Housing Characteristics file, table PCT12, single years 14 through 24, both sexes. Matches the program's eligible ages exactly. Census Bureau disclosure-avoidance noise applies. |
| Children under 18; residents under 25; share under 25 | ACS 2020–24, B01001 age cells (under 5 through 15–17; under 5 through 22–24). |
| Poverty rate, ages 16 to 24 | B17001: below-poverty 16–17 and 18–24, both sexes ÷ (below + at or above) for the same ages. Students in college dorms are outside the poverty universe; students living off campus on their own are counted by their own incomes, which raises youth poverty around campuses. |
| Child poverty rate | B17001: below-poverty under-18 cells ÷ all under-18 cells with poverty status determined. |
| Unemployment rate, ages 16 to 24 | B23001: unemployed ÷ civilian labor force, ages 16–19, 20–21 and 22–24, both sexes. |
| Teens 16 to 19 not in school or working | B14005: not enrolled in school and either unemployed or not in the labor force (high school graduates and non-graduates, both sexes) ÷ all 16- to 19-year-olds. |
| Young adults 18 to 24 without a diploma | B15001: 18–24 with less than 9th grade or 9th–12th grade without a diploma ÷ all 18–24. |
| Arrests under 18; ages 18 to 24; under 25 (counts and rates) | NYPD Arrests Data (Historic), 8h9b-rp9u, calendar 2024, age_group "<18" and "18-24", NYPD's own jurisdictions only (jurisdiction_code 0, 1 and 2: patrol, transit and housing), placed where the arrest was made (see station houses below). Rates per 1,000 residents aged 10–17 (B01001 10–14 and 15–17), 18–24, or 10–24 for the combined under-25 measure. NYPD records age only in bands, so “under 25” (24 and younger) is the closest available cut to “under 24.” |
| Shooting victims under 25; shootings with a suspect under 25 (counts and rates) | NYPD Shootings 5ucz-vwe8, Shooting Victims pztn-9bne and Shooting Offenders gdk4-mbsv, joined on incident_key; incidents July 1, 2023, through June 30, 2026, by occurrence date. A victim counts if victim_age_group is "<18" or "18-24"; an incident counts if any listed offender's perp_age_group is. Rates are yearly averages over the three years: victims per 10,000 residents under 25; incidents per 10,000 residents. |
| Violent crimes against people under 25 (count and rate) | NYPD Complaint Data, Historic qgea-i56i (July–December 2025) plus Year-to-Date 5uac-w243 (January–June 2026), by report date (rpt_dt). Offense codes 101 murder, 105 robbery and 106 felony assault, with vic_age_group "<18" or "18-24". Rate per 1,000 residents under 25. |
| Summer jobs sites within a mile | Department of Youth and Community Development (DYCD) Program Sites, ebkm-iyma, program_area = SYEP, latest fiscal year (2026, meaning summer 2025), year-round types dropped (Work, Learn & Grow and Year Round Sector Focus), one entry per location: 122 sites. The count is taken from where young people live: sites within 1 mile (great-circle distance) of each census tract's internal point from the 2020 Census Gazetteer, a point inside the tract near its middle, then averaged across the neighborhood's tracts weighted by residents 16 to 24. (A count of sites inside each neighborhood's borders was dropped from the menu on Oct. 9, 2026; the within-a-mile measure answers the access question better.) |
Age bands. The program serves 14- to 24-year-olds. The survey's small-area tables on poverty, work and schooling break at 15, 16 and 18, so most measures here use 16 to 24, as The summer jobs gap does. NYPD's age groups are "under 18" and "18 to 24", so "under 25" here means 24 and younger.
Rates need enough residents. Arrest, shooting and violence rates are left blank where the relevant age group has fewer than 100 residents. Counts are always shown.
Where it happened, not where they live. Arrests, shootings and complaints are placed where they occurred; the survey counts young people where they live. Neighborhoods that draw young people from elsewhere, such as shopping strips and transit hubs, show high per-resident rates for that reason.
Station houses: where NYPD puts records it cannot place
NYPD's arrest data footnotes say arrests that cannot be geocoded are located at the station house of the precinct where they happened. The same thing happens, without a footnote, in the other files: in the first half of 2026, 1,003 of 1,065 rape complaints (94%) sit within 130 meters of their precinct's station house, a deliberate choice to protect victims, and shootings stack there too (20 shootings in the window sit on the 46th Precinct's station-house point). Left alone, a whole precinct's share of these records would land in the one tract that holds the station house.
These records have no known street location. The map finds them and leaves them out, in three steps:
- Find the station houses. The address of all 78 precincts was read from each precinct's page on nyc.gov and geocoded with NYC Planning's GeoSearch; every geocoded ZIP code matches the page. The 40th Precinct moved from 257 Alexander Avenue to 567 East 149th Street in late 2024, and NYPD still places 40th Precinct records at the old building, so both count (Bronx Times; Bronx Community Board 4).
- Pick a radius from the data. NYPD's station point and the geocoded address are not identical. Among 2024 arrests, in 75 of the 76 precincts with a large stack of arrests spanning at least 15 offense types, the biggest such stack sits within 140 meters of the geocoded station house. The exception is the 14th Precinct, where the biggest stack is Macy's Herald Square, a real arrest location; its station-house stack is second, 60 meters from the address. A record within 140 meters of its own precinct's station house is treated as placed there.
- Leave them out of the neighborhood view. A record within 140 meters of its own precinct's station house is not counted in any neighborhood. No record is ever assigned to a neighborhood by its precinct alone. The counts below are what the neighborhood view is missing; the precinct view counts all of them.
| Records | Total | At a station house: left out of the neighborhood view, counted in the precinct view |
|---|---|---|
| Arrests of people under 25, 2024 (NYPD jurisdictions) | 51,471 with coordinates | 12,842 (24.9%): 3,153 of 9,450 under 18 (33.4%) and 9,689 of 42,021 aged 18–24 (23.1%) |
| Shootings with a suspect under 25, July 2023–June 2026 | 702 | 81 (11.5%) |
| Shooting victims under 25, same period | 1,125 | 141 (12.5%) |
| Murders, robberies and felony assaults with a victim under 25, July 2025–June 2026 | 10,057 | 192 (1.9%) |
What leaving them out costs. Counts and rates understate, and unevenly: the share of 2024 youth arrests logged at the station house ranges from 15% to 44% across precincts with at least 50 such arrests, so a precinct that logs more arrests this way looks lower than it is. A real incident that happens within 140 meters of a station house is also left out. The two alternatives were worse or less honest. Left where NYPD put them, a precinct's worth of records piles into the one tract holding the station house (some of those tracts carried as many as 95 extra violent felonies a year). Spread across the precinct in proportion to its other records, which an earlier version of this map did, they would be counted in neighborhoods by estimate rather than by any known location.
Where they do count: the precinct view. NYPD gives every record a precinct even when it has no street location, so a map drawn by precinct can count them all, and since Oct. 9, 2026 that is the map's default. A neighborhood map cannot: precinct lines cross neighborhood lines constantly. A precinct overlaps a median of four of the city's neighborhoods and as many as ten, and only 2 of the 78 precincts lie within a single neighborhood, so placing a station-house record in a neighborhood would mean guessing which part of the precinct it came from.
Records on a boundary
NYPD does not publish exact addresses. Its arrest data footnotes (number 4) say an arrest near an intersection is placed at the intersection and any other arrest at the middle of the nearest street segment, and the shooting and complaint files are placed the same way. Most census tract and neighborhood boundaries run down street centerlines, so many records sit exactly on a boundary, and which side they fall on would come down to hairline differences between NYPD's street map and City Planning's boundary lines. The build works tract by tract, the units the Census data arrive in, and shares any record within 10 meters of a tract boundary equally among the tracts that meet there; the tracts are then summed into neighborhoods. Of the 38,629 street-located youth arrests in 2024, 20,124 (52%) were shared this way, most of them between tracts in the same neighborhood, where the sharing cancels out; about one in five street-located youth arrests sits on a boundary between two neighborhoods. Counts can therefore be fractional.
Why 2024 arrests
NYPD's 2025 arrest file, as published in 2026, records the age group as the text "(null)" on 147,237 of 278,953 arrests (52.8%), falling from 67% of January arrests to 20% of December's: 61% in the Bronx, 55% in Brooklyn, 54% in Manhattan, 42% in Queens and 34% on Staten Island. Under-18 arrests in 2025 would therefore look half as common as in 2024 for no real reason. The build refuses any arrest year in which more than 2% of arrests lack an age. 2024 is complete (every arrest has an age group). As a check, the neighborhood pattern of 2024 youth arrests was compared with January–June 2026, the most recent complete months: the correlation across the 262 neighborhoods is 0.86 for under-18 arrests and 0.96 for arrests at 18 to 24.
Arrests by other agencies
NYPD's arrest file also records arrests under other agencies' jurisdictions (codes 3 and up, per the dataset's own column description). They are 1,223 of the 52,699 arrests of people under 25 in 2024 (2.3%), and the map leaves them out. Most come from a single point in Hunts Point, where 457 arrests of all ages in 2024 were recorded under jurisdiction code 72, mostly for offenses against public administration and felony assault. Left in, they would have doubled the 18-to-24 arrest rate of the Hunts Point neighborhood.
Shootings data quirks
On 2,084 of the 2,406 shooting incidents in the window, the latitude and longitude columns are swapped; the build detects and fixes each one. Every incident also carries NYPD's New York State Plane coordinates, and after the fix the two agree within 1.3 meters on every incident where both are valid. One incident had latitude and longitude of zero and was located from its state-plane coordinates (it sits at the old 40th Precinct station house and is left out accordingly). NYPD lists at least one offender for 1,478 of the 2,406 incidents (61.4%), so the suspect measure undercounts; an offender in this file is someone identified or described, not necessarily arrested.
Violent crimes against young people
Rape is excluded because its location is withheld (see station houses above). Of the 44,408 murders, robberies and felony assaults reported in the 12 months, 2,140 (4.8%) carry no victim age and are not counted; the share is steady from month to month. Most complaints without a victim age list a business or organization (mostly robberies) or the People of the State of New York, rather than a person, as the victim: 777 of the 962 in January–June 2026.
Summer jobs sites
DYCD's file lists one row per site, fiscal year, program type and contract. The build keeps fiscal 2026 (summer 2025), drops the year-round types and counts each distinct coordinate pair once, the same rules as The summer jobs gap; both yield 122 sites, the same number as in fiscal 2025. These are where provider organizations enroll and serve participants. The jobs themselves are at employer worksites whose locations DYCD does not publish, and its file has no slot counts by site, so site counts measure presence, not capacity.
Checks performed
- Every Census cell checked against the Bureau's label. The build stops if any of the 101 table cells behind the young-people measures, or the parent lines that disambiguate them (male or female, below or above poverty, enrolled or not), carries a different label than expected. The 2020 census age cells are checked the same way.
- Neighborhood figures checked against City Planning. City Planning publishes 2020–24 tables for every neighborhood. Children under 18 and residents under 25 match in all 262 neighborhoods, and the child poverty rate matches in all 197 residential neighborhoods. Median income, age, rent and home value match within $2 and 0.1 year.
- Totals reconciled with the source files. 9,450 under-18 and 42,026 18-to-24 arrests in NYPD's jurisdictions in 2024 (five have no coordinates); 702 shootings with a suspect under 25 and 1,125 victims under 25; 10,057 violent crimes against people under 25; 122 program sites. The map's neighborhood sums equal these totals minus the station-house records left out (see the table above).
- Preset explanations checked against the data. Every place named in a preset's text sits in the cell the text describes at the neighborhood level.
- Independent recomputation. A separate check, written from scratch without the build scripts, recomputed ten neighborhoods (Mott Haven-Port Morris, Borough Park, Jamaica, Bedford-Stuyvesant (West), Washington Heights (South), East New York-New Lots, Great Kills-Eltingville, Corona, Harlem (North) and Morningside Heights) from the raw sources, pulling the survey tables from the Census Bureau's own API rather than Census Reporter. All eight survey measures matched exactly in all ten neighborhoods, and in every tract within them; the 2020 census counts matched in every tract; every NYPD and program-site total and every rate matched; and its own reconstruction of the station-house handling (each precinct's busiest arrest point taken as its station house) agreed with the map's within about 3%. That check ran on an earlier version that counted other agencies' arrests and spread station-house records across the precinct; the later rules (NYPD jurisdictions only; station-house records left out; boundary records shared) were checked against NYPD's own counts and the totals in the table above. It also caught three wording problems and a distance formula that ran 0.26% long and left six tracts one site short; all were fixed.
Data sources
- Young people, poverty, work and schooling: U.S. Census Bureau, American Community Survey 2020–2024 5-year estimates (tables B01001, B01003, B14005, B15001, B17001, B23001), fetched by census tract through the Census Reporter API, a no-key copy of the Census Bureau's data. The independent check above pulled the same cells from the Bureau's own API and matched them exactly.
- Residents 14 to 24 in 2020: 2020 census Demographic and Housing Characteristics file, table PCT12 (single years of age).
- Arrests, shootings and violent crimes: NYC Open Data, NYPD Arrests Data (Historic)
8h9b-rp9u; Shootings5ucz-vwe8with Shooting Victimspztn-9bneand Shooting Offendersgdk4-mbsv; Complaint Data Historicqgea-i56iand Year-to-Date5uac-w243. Placement rules above. - Summer jobs sites: DYCD Program Sites
ebkm-iyma, fiscal 2026. - Boundaries: NYC Department of City Planning police precincts (
y76i-bdw7), 2020 Neighborhood Tabulation Areas and the 2020 census tracts that build them (shoreline-clipped); 2020 census blocks with their populations and internal points from the Census Bureau's TIGERweb service, for splitting tracts along precinct lines; 2020 Census Gazetteer tract internal points for the within-a-mile measure; NYPD precinct station-house addresses from each precinct's nyc.gov page.
Geography: precincts and neighborhoods
The map opens on NYPD's 77 patrol precincts plus the Central Park precinct, using City Planning's shoreline-clipped precinct boundaries (NYC Open Data y76i-bdw7). A switch shows City Planning's 262 Neighborhood Tabulation Areas (NTAs) instead: 197 residential neighborhoods plus 65 parks, cemeteries, airports, military installations, jails or industrial areas. Both are built from the same census-tract data.
Precincts
- NYPD records are counted by the precinct NYPD assigned each one (
arrest_precinct, the shooting file'sprecinct, the complaint file'saddr_pct_cd), for the same time windows, ages and jurisdictions as the neighborhood view. Nothing is left out: the precinct totals are 9,450 arrests under 18 and 42,026 aged 18 to 24 in 2024, 702 shootings with a suspect under 25 and 1,125 victims under 25 (July 2023–June 2026), and 10,058 violent crimes against people under 25 (July 2025–June 2026; one more than the neighborhood pull, which needed coordinates). Every record carried a valid precinct. - Census figures come by tract, and tract lines do not always follow precinct lines. Each tract is split by where its residents lived in the 2020 census: every 2020 census block (37,984 of them, from the Census Bureau's TIGERweb service) is placed in a precinct by its internal point, and a tract's share in a precinct is the share of its 2020 residents living in those blocks. 2,167 of 2,327 tracts have at least 95% of their residents in one precinct; the other 160 are split. A precinct's survey cells are the weighted sums of its tracts' cells, and its rates are recomputed from those sums. Tracts with no residents are split by land area.
- Margins of error for split tracts are approximated by scaling each tract's MOE by its share, then combining as for any sum: √Σ(share × moe)². That treats the share as fixed; it slightly understates uncertainty in the 160 split tracts.
- Sites within a mile is averaged across the precinct's tracts, weighted by each tract's residents 16 to 24 times its share.
- Checks. Precinct sums equal the city totals exactly: 8,483,844 residents, 871,901 residents 16 to 24, and every NYPD total above.
- The trade-off. Precincts average about 110,000 residents (from 24,000 in Midtown South to 248,000), against about 43,000 for a residential neighborhood, so they blur differences inside them; their lines are drawn for policing, not for communities. Each precinct is labeled with the neighborhoods holding at least 10% of its residents. The Central Park precinct has no residents and gets counts but no rates.
Neighborhoods
Each neighborhood is built from whole 2020 census tracts, about nine on average, and the build works tract by tract before adding the tracts up.
- Counts and shares are recomputed from summed cells. A neighborhood's youth poverty rate is all poor 16- to 24-year-olds ÷ all 16- to 24-year-olds whose poverty status is determined, summed across its tracts, not an average of tract rates. NYPD and site counts are summed the same way.
- Why not tracts. Until Oct. 9, 2026, the map also offered a tract view. It was dropped because tract estimates of small youth groups are too noisy to rank: combining about nine tracts cuts a typical relative margin of error to roughly a third. The tract view also showed no records that the neighborhood view leaves out; station-house records are missing from both (see above).
- Non-residential areas. The few people counted in parks, airports, jails and bases live in places like Rikers Island, Randall's Island and Fort Hamilton, and their rates swing widely. These areas keep their counts but show no shares or rates, and are drawn pale.
Margins of error and reliability
The survey is a sample, not a count. Every estimate carries a margin of error (MOE) at 90% confidence, and for small youth groups it can be a large fraction of the estimate. The map shows it three ways:
- Tooltips show "± X" beside each value, with a badge for three reliability tiers that follow a common convention (used by Esri and many local agencies; the Census Bureau publishes no official cutoffs): reliable (MOE ≤ 20% of the estimate), use with caution (20–66%) and unreliable (more than 66%).
- The detail panel shows ± for every measure with a margin of error.
- A "Fade unreliable estimates" checkbox fades any area whose value is in the unreliable tier, without hiding the data.
MOEs for shares follow the Census Bureau's formulas in the ACS General Handbook, chapter 8: moe(p) = √[moe(x)² − p² · moe(y)²] / y when the numerator is part of the denominator, falling back to the ratio formula when the term under the root is negative; sums of cells use √Σmoe². NYPD counts and site counts are tallies, not estimates, and carry no MOE; the rates built on them inherit the uncertainty of their survey denominators.
Color scales
- Quantile (default): seven equally populated classes, so each color holds roughly the same number of areas. Where many neighborhoods share a value (zero, say), cut points repeat; the map drops the repeats, so a measure can show fewer than seven classes, and a value exactly on a cut point goes in the class below it.
- Linear: a continuous gradient from the lowest to the highest value, which keeps the spacing between neighborhoods but can be dominated by outliers.
Two measures. Each measure is split into thirds (low, middle, high) across the areas that have both values, and the 3×3 palette colors each neighborhood by its pair of thirds. The legend labels the cut points and how many neighborhoods fall in each third; ties can make the thirds uneven. The correlation shown is Pearson's r across the same areas, each counted once regardless of population. Each ready-made comparison has one explanation per view, and a script checks every place, cell, borough count and correlation they name against the data on every build.
Summary statistics. The lowest, middle, average and highest values in the sidebar describe the areas on the map, each counted once. They are not citywide figures: the average of 77 precinct poverty rates is not the city's poverty rate.
Known limits
- Survey figures are five-year averages (2020–2024); any single year may differ.
- Arrests, shootings and violent crimes are counted where they happened; the residents they are divided by live there. Rates run high in places that draw young people from elsewhere.
- In the neighborhood view, station-house records are left out, so arrest counts in particular understate, by different amounts in different precincts. The precinct view counts them but is coarser.
- Precinct survey figures for the 160 tracts that cross precinct lines rest on where residents lived in 2020.
- Arrests reflect police activity as well as offending.
- Program sites are where providers enroll and serve participants; the employer worksites are not published, nor are slots or participants by site.
- The program serves 14- to 24-year-olds; most survey measures start at 16 because the Census Bureau's small-area tables do.
Reproducing this map
Source code is on GitHub. fetch_youth.py scrapes and geocodes the station houses and pulls the NYPD, DYCD and 2020 census data, placing every record in a tract (nypd_places.py does the placement, the station-house exclusion and the boundary sharing). fetch_precincts.py pulls the precinct boundaries and 2020 census blocks, works out how each tract splits across precincts, and counts every NYPD record by precinct for the same windows. build.py pulls the American Community Survey tables from Census Reporter, derives every measure tract by tract, sums the tracts into neighborhoods and precincts and writes the files the page reads. Each pull checks itself and stops rather than write an empty or implausible file. scripts_check_presets.py checks the ready-made comparisons against the data. The page is plain HTML and JavaScript, with Leaflet for the map and d3 for the color scales.