Where 311 complaints pile upMethodology

How I built this

Every step from the city's 311 file to the page, and every judgment call along the way: what was decided, why, the alternative, what difference it makes and who made the call. Formulas and exact counts are in the methodology.

Who did what. Josh Greenman asked the questions: which 5% (or whatever share made sense) of locations draw the most 311 complaints, what those complaints are and what share of all complaints they make up; then for an interactive infographic; then whether the most prolific filers file too fast to be human. Claude (Anthropic's Claude Code) chose the definitions, pulled and processed the data, wrote the code and the text and ran the checks. Calls marked "Claude" are open to Josh's review.

The build, step by step

  1. Pulled counts of complaints by address, ZIP code and complaint type for each quarter since January 2020 (28 queries) and checked that they add up to the dataset's row count.
  2. Cleaned addresses, set aside entries with no house number, and ranked 1,301,096 street addresses by complaints.
  3. Computed the share of complaints held by each slice of addresses, and the mix of complaint types inside each slice.
  4. Pulled coordinates for every address and every individual record for 22 of the busiest addresses.
  5. Measured the timing of complaints at those 22 addresses.
  6. Built the page: two grids of 1,000 squares tied to a slider, category and type charts, a map of the top 5% and an annotated list of the busiest addresses.

Judgment calls

A location is a street address plus ZIP code

Decision
Rank addresses as 311 records them, after cleanup, keyed by address and ZIP code.
Why
It matches what a reader means by "a location" and needs no outside data.
Alternative
Tax lot (BBL) would merge buildings with several addresses and split nothing; rounded coordinates would merge neighbors.
Effect
A big complex with several street addresses counts as several locations.
Who decided
Claude

Entries without a house number are not ranked

Decision
Set aside 1,243,802 complaints filed under a street name, park or airport (Broadway in one ZIP code, Central Park, JFK) along with 944,278 with no address.
Why
Those entries cover a stretch of street or a whole park, so ranking them beside single buildings mixes different things.
Alternative
Rank them as locations, which the first answer in chat did.
Effect
The top 5% share fell from 55.3% (66,371 addresses, in the first answer in chat) to 51.6% (65,055 addresses). The headline "just over half" holds either way.
Who decided
Claude

Shares use all complaints as the base

Decision
Divide by all 22,788,256 complaints, including the 9.6% with no street address.
Why
Josh asked what share of total complaints the slice accounts for.
Alternative
Divide by complaints that have a street address.
Effect
The top 5% share would be 57.1% instead of 51.6%.
Who decided
Claude, following Josh's wording

Address cleanup

Decision
Uppercase, collapse spaces and spell out six abbreviations.
Why
Older records store some addresses with doubled spaces, which would split one building into two.
Alternative
Use the raw strings.
Effect
The abbreviation rule touched 22,924 complaints. The doubled spaces matter more: 655 East 230th Street has 237,208 of its complaints under the doubled-space spelling.
Who decided
Claude

Six categories

Decision
Group complaint types into apartment and building conditions, noise, parking and vehicles, police and street order, streets and sanitation, and everything else.
Why
Readers need a handful of kinds to compare slices; 311 has 261 type names.
Alternative
Group by the agency that handles each type, which puts most noise and parking together under the police.
Effect
Category shares depend on the lists in the methodology.
Who decided
Claude

Default slice of 5%

Decision
Open the page at the top 5% and let readers move the slider from 0.1% to 100%.
Why
Josh suggested 5% "or whatever is the right number." The curve has no natural break, so the slider lets readers pick.
Alternative
Open at 1%, where the top slice holds about 30% of complaints.
Effect
None on the numbers.
Who decided
Josh (5%), Claude (the slider)

Map coordinates

Decision
Use each address's coordinates from the quarter with the most located complaints.
Why
The geocoder sometimes places one address in two spots; an average could fall between them.
Alternative
Average all coordinates.
Effect
2,290 of the top 5% have quarterly points more than 100 meters apart.
Who decided
Claude

Naming addresses

Decision
Show and name the busiest addresses, including private homes.
Why
They are published in the city's open data, and the timing findings depend on them. The page says these are complaints filed, not problems found, and that the data does not identify filers.
Alternative
Show only counts by neighborhood.
Effect
Readers can find a specific building. Josh should review this call before the page is shared widely.
Who decided
Claude, flagged for review

How to describe the fastest filing

Decision
Say the timing "looks automated" and give the measurements; say nothing about who files or why.
Why
Hours of complaints at an even 172 an hour and nights of gaps of 38 seconds are hard to square with a person filing by hand, but the data cannot show what tool or person is behind them.
Alternative
Call it a bot, or speculate about the filer.
Effect
The page stops short of the tip that the filer is a bot and sticks to what the timing shows.
Who decided
Claude

Sorting closing notes into outcomes

Decision
Sort the city's closing notes into eight outcomes with written rules, and publish every note with its outcome.
Why
The status field marks almost everything closed. The notes carry the outcome, but in about 1,260 different wordings.
Alternative
Read a sample by hand, or use only the status field.
Effect
Citywide, 15.7% of complaints got a note with no clear outcome. One note, a promise to keep a location under observation for idling trucks, was moved from action to no clear outcome after review, which lowered the top addresses' action share by less than one point.
Who decided
Claude, at Josh's request to add outcomes

What to compare the busiest addresses with

Decision
Compare each complaint type at the busiest addresses with the same type at every address outside the top 0.1%, weighted to the busiest addresses' mix of types.
Why
Complaint types end differently: heat complaints rarely end in a violation, parking complaints often do. A raw comparison would mostly measure the mix.
Alternative
Compare with the citywide average directly.
Effect
Raw, the citywide action share is 25.4%; adjusted for the top 130 addresses' mix, it is 28.2%. Their observed share is 11.2% either way.
Who decided
Claude

Saying what the data does not show

Decision
Put a list of what the outcomes cannot tell readers next to the findings.
Why
The notes are the agencies' own words and the data has no visit records, so several natural readings of the gap cannot be tested.
Alternative
Leave the caveats to the methodology.
Effect
None on the numbers.
Who decided
Josh asked for it

Chart colors

Decision
Use the house inks, with a pink in place of lilac and a gray for "everything else."
Why
Lilac and cobalt were too close for readers with normal vision and with red-green color blindness; the swap passed a color-separation check against the black page.
Alternative
Keep lilac.
Effect
None on the numbers.
Who decided
Claude

How the numbers were checked

Change log

What this page does not do