Sharing NYC Police Precinct Data

Note: This post was originally published April 29, 2011. I've updated it completely with fresh info. Also just did the same type of calculation for Chicago.

Anyone doing population analysis by NYC police precinct might find this post helpful. 

Back in 2011, I wanted to compare the racial and ethnic breakdown of low-level marijuana arrests — reported by police precinct — with that of the general population. The population data, of course, is available from the US Census, but police precincts don't follow any nice, relatively large census boundary like a census tract. Instead, they generally follow streets and shorelines. Fortunately, census blocks (which in New York, are often just city blocks) also follow streets. But there are almost 40,000 census blocks in the city.

So I used precinct maps from the city and US Census block maps to figure out which blocks are in which precincts. With that, the population data is just math.

The original stories, and the Google Fusion Tables where the data lived, are all gone to digital internet history. But I've recreated them here, and also updated the calculations — some precinct boundaries changed slightly, and those on Staten Island changed significantly with the addition of a fourth precinct on the island in 2013.

So here are the updated tables. The population data is from the 2010 census, the precincts are as they exist as I write this in June 2020.

Have at it.

2010pop_2020precincts.csv is the 2010 population breakdown within each precinct as they are drawn in June 2020. The column headings are cryptic, but follow the codes starting on this page, which is from this rather large Census Bureau PDF.  

• precinct_block_key_2020.csv is the Rosetta Stone for this project. It has two columns: each block's identifier, which the census calls "geoid10," and the precinct in which that block sits. Note that some blocks aren't in any precinct, usually because they're actually in the water. 

• nyc_2010censusblocks_2020policeprecincts.csv contains base-level 2010 Census data for each block, married to the precinct for that block. For descriptions of the population columns, follow the codes starting on this page or see pages 6-21 in the Census Bureau PDF

• NYC_Police_Precincts_2020.zip is the official police precinct map shapefile, downloaded from the city's open data portal.

Caveats

I did my best to be accurate in computing the intersection of blocks and precincts, even generating precinct maps and inspecting them visually. But errors may exist. You can check my math in the Jupyter notebooks I used.

Census blocks generally fall nicely within precinct outlines, but they don't always. In particular, three blocks significantly straddle two precincts. If you're doing very precise analysis, you'll want to account for them:

• Block 360470071002003: An area near the north end of the Gowanus Canal in Brooklyn. About half is in Precinct 76 and half in Precinct78. Total people: 51

• Block 360050096002000: Mainly industrial. Half in Precinct 76, half in Precinct 78. Total people: 5.

• Block 360610265003001: This block consists of five similar-sized apartment buildings near the George Washington Bridge. The northern set of buildings are in the 34th Precinct, with part of one building in the 33rd. I put the entire block, and the 687 people living there, in the 34th Precinct. Looks like roughly an 80/20 split.

Credits

I originally did this work while at WNYC, using PostgreSQLPostGIS and QGIS. I was helped by the generosity and insights of Jeff Larson, Al Shaw, and Jonathan Soma.

If you find this information useful, drop me a note or post a comment below. I'd love to know about it.

15 responses
John, great work as always. When you aggregated the block data to precincts, did you compute intersections or use a centroid approach? I find that the centroid approach is much cleaner, easier, and -- except for the "straddlers" as you point out above -- more consistent in terms of allocating small-area population to larger spatial units. (I've been meaning to post something about this, your blog gives me more impetus to do so -- we've been dealing with this extensively at our shop at the CUNY Graduate Center as well.)

Cheers,
Steve

Yes! I tried both methods and experienced the same thing. I actually used the "internal point" latitude and longitude provided by the Census Bureau, which should be even better than a simple centroid. Since the precincts seem to have been drawn around the blocks for the most part, it worked really nicely -- and the "straddlers" were easy to spot.
Hey John,

Cool stuff - it's great to see you share the data and methodology for this stuff.

You could make the (possibly incorrect, especially in rural areas) assumption that people are evenly spaced within the census blocks, and then assign the appropriate numbers to each arbitrary polygon by using the block shapes rather than centroids. The general methodology for this would be to:
- Calculate the percentage intersection of each census block to each polygon
- Multiply the total block population by that percentage
- Sum these partial populations of each block to get the total polygon population [or other attribute]

Assuming your data is unprojected (e.g. epsg:4326) and you want more easily readable areas to look at, then in PostGIS land your query might look something like:
SELECT b.population,
area(b.the_geom) * 100000000 as area,
area(st_intersection(b.the_geom, p.the_geom) *
100000000 as intersected_area
FROM precincts p, blocks b
WHERE st_intersects(b.the_geom, p.the_geom)
--and p.gid = 1234 -- [for some specific precinct]
GROUP by p.gid, b.population, intersected_area, area

Note that all we care about is relative area, not actual area (area calculations don't really make sense in unprojected reference systems; I just multiplied by a big number to make the result more easily readable).

Cheers,

-Josh

Josh, thanks so much for this! I was actually heading down this path when I switched back to the centroid method -- partly because I wasn't sure how to pull off this area calculation, and also because there were only three blocks that really came up as an issue -- and I could get a sense of them visually in Google Maps.

One REALLY BIG thing to consider is that you can have problems when much of the area in question falls over water -- which is common for Census *tracts* on shorelines. For example, in Manhattan, there are tracts that have slivers of densely populated areas along the water, and with the bulk of the tract in the Hudson River! That's because the tracts extend to the state line, which is in the water.

A way around that is to consider the tract's AREAWATR and AREALAND metadata values, provided by the Census Bureau, in the calculation.

Better yet, use blocks, which end at the shorelines. (Other, watery blocks -- with 0 AREALAND -- fill out the tracts to the state line.)

Hi John. Thanks for sharing this tool with the public. I have a question: in doing this research, did you ever figure out how the NYPD precinct lines were actually drawn? I work for a non-profit that serves troubled youth, and we have several locations across the city. I'm trying to compare crime stats in each of the communities we serve, so it would be helpful for me to know how the our precinct llines were created (by population, by census, by geography). I've made several calls to the NYPD, and the answer has been "they've been like that forever." Just wondering if you might have come across the answer in the course of your work. Best, Denise
Hi John, I'm working on a mental health disparities project comparing neighborhood characteristics and I was wondering where/how you accessed precinct level crime data for NYC. I've been scouring NYC OpenData as well as the NYPD website and can't seem to find anything at the precinct level, much less anything broken down by specific crimes. Any advice or sources would be greatly appreciated.
Hi John, I've been trying to download the dataset but not been successful.... and the aggregate function seems to be not working,,, i've tried on a number of computers... but can't figure out how I can make it work... any thoughts? or suggestions?
john -- having worked so hard to compile pop by census block and precinct by census block, couldn't you have written a pretty basic summation program to get pop by precinct, without the magic of google? that aside, why not add a table of the 124 totals, for the use of peons lacking the time to emulate your google mastery? such people do matter, and giving them access would make your labors exponentially more worthwhile.
brother...you just saved me. thank you for this gem!
What is the population of the Sixth Precinct? Erich Goode
John: Thanks so much for supplying statistics on the racial composition for the Sixth Precinct as a whole; this is very useful. Is it possible to designate an area within a certain ambit of Washington Square Park (say, 10 blocks) & find out the racial characteristics that area? I realize this would be a very custom-made statistic, but is it a simple matter to figure this out? Erich Goode
Hi John, these statistics are amazing and invaluable to doing public policy research. I am doing a project on gun crime that takes into account population density, but I am having a hard time getting data on the size of the precincts. Can you tell me what the GIS data is in for the precinct sizes? GIS Area is usually just supplied in whatever form someone makes it in, but doesn't display. Do you have any idea what units the GIS data is in?
Cohesive and correct. Thank you so much for the time saver.
Hi John. I'm having trouble accessing the precinct_block_key.csv file that you linked to above. Is this still available for download? Thanks for building this great tool!
Hi John, This looks amazing! I am currently working on a project that needs to aggregate census tracts to precinct levels. However, when i downloaded the data from the American Community Survey, my tracts were labeled as "Census Tract 556, Kings County, New York" not the longer numerical names, as outlined in your files. Did i do something incorrectly? Is there a way to figure out which tracts belong into which precinct, or is this something that I will have to do manually with maps?