← Back to the map
Methodology & sources

How this map was built

This document records every data source, every analytical choice and every known limitation behind the map of New York City misdemeanors and violations. The two scripts that produce the data are public and re-runnable.

What the map shows

Every record New York City's Police Department classifies as a misdemeanor or a violation — the two lowest tiers of offense, below felonies — from January 1, 2015 through March 31, 2026, aggregated to the city's 78 police precincts. Felonies are excluded entirely. Two separate lenses are offered:

Data sources

All data comes from New York City Open Data and was retrieved on May 21, 2026.

DatasetIDUsed for
NYPD Complaint Data Historicqgea-i56iComplaints, 2015–2025
NYPD Complaint Data Current (Year to Date)5uac-w243Complaints, 2026 Q1
NYPD Arrests Data Historic8h9b-rp9uArrests, 2015–2025
NYPD Arrest Data Year to Dateuip8-fykcArrests, 2026 Q1
Police Precincts (boundaries)y76i-bdw7Map polygons

Dates

Complaints are dated by report date (RPT_DT), the date the incident was reported to police — not the date the offense is alleged to have occurred (CMPLT_FR_DT), which can be years earlier for some offenses. Arrests are dated by arrest date (ARREST_DATE).

2026 is a partial year. It covers the first quarter only (January 1 – March 31). On every chart the line to 2026 is drawn dashed, and 2026 totals should be compared against prior first quarters, not against full years. Year-over-year change figures are suppressed for 2026.

The enforcement-sensitivity classification

The map separates offenses whose recorded counts move with policing strategy from those that mostly reflect underlying victimization. Each offense type is assigned to one of three groups. This is a documented editorial judgment, not an official NYPD category — the complete assignment is exported to classification.csv so it can be inspected or contested.

Enforcement-sensitive Discretionary, officer-initiated offenses. A police officer largely decides whether these become a recorded incident, so the counts rise and fall with proactive enforcement: dangerous drugs, cannabis offenses, criminal trespass, theft of services (fare evasion), gambling, loitering, prostitution, disorderly conduct, weapon possession, intoxicated/impaired driving, vehicle-and-traffic-law offenses, alcoholic-beverage offenses, fraudulent accosting, jostling, burglar's tools, fortune telling.

Complaint-driven Offenses typically reported by a victim or witness, where a member of the public, not an officer, usually initiates the record: petit larceny, assault 3, harassment, criminal mischief, sex crimes, forcible touching, fraud, unauthorized use of a vehicle, possession of stolen property, offenses against children, endangering welfare.

Other / mixed Administrative catch-alls, ambiguous grab-bag categories and offenses that arise downstream of police contact rather than from a push to police a behavior: offenses against public administration (resisting arrest, obstructing governmental administration), "offense against public order/sensibility," administrative code, miscellaneous penal law, other state laws, anticipatory offenses, escape, agriculture & markets law, health code, uncoded entries.

Why some judgment calls went the way they did

Main limitation: summonses are missing

For the lowest-level offenses, much enforcement never appears in either dataset here. Fare evasion, open-container, public urination, disorderly conduct and similar quality-of-life matters are frequently resolved with a criminal court summons or a civil/OATH summons, neither of which is a complaint or an arrest. That is why "theft of services" shows only a few thousand complaints across eleven years even though fare evasion enforcement runs far higher. The enforcement-sensitive arrest lens captures the share handled by arrest, but the summons channel is out of scope. A future version could add the NYPD criminal-court-summons dataset.

More generally: complaint data measures reported crime, which is shaped by public willingness to report; arrest data measures police activity, not the amount of crime occurring. Neither is a direct measure of how much low-level offending happens.

The complaint-to-arrest ratio view

The map's third shading option divides each precinct's complaints by its arrests (for the selected offenses and offense level, in the selected year, using both lenses at once). A high ratio means reporting outpaces enforcement; a low ratio means the precinct is enforcement-heavy relative to how much is reported.

Because complaints structurally outnumber arrests almost everywhere, the diverging color scale is centered on the citywide ratio for that year and selection (about 2.4 complaints per arrest citywide in 2025), not on 1.0. Red shades a precinct that is more arrest-heavy than the city as a whole; blue shades one that is more complaint-heavy. The scale spans roughly 1.8× either side of the city average on a log scale. Precincts with zero arrests for the selection are treated as maximally complaint-heavy; precincts with no records are left uncolored.

Geographic method

Per-capita rates (population that varies by year)

The rate per 1,000 residents shading divides a precinct's incidents (for the selected lens, offense level, offenses and year) by its residential population, then multiplies by 1,000. Because NYPD precincts are not census geographies and precinct populations change over time, the denominator is built to be both real and time-varying:

Rates are a comparison aid, not a risk score. The full per-precinct, per-year population and rate for any selection is available through Download CSV.

Data cleaning

Reproduce it

Two scripts regenerate everything:

Run python3 fetch_data.py && python3 build_data.py. No API key is required. A monthly GitHub Action re-runs both and commits the result only when the data changes.