This is a running repository for data captured daily by reporters from WRAL News via the N.C. Department of Health and Human Services' zip code-level map of COVID-19 cases and deaths.
NOTE: After Oct. 2, this repo will no longer be updated. Data will now be collected via an automated process and uploaded to a public new repo here, maintained by WRAL News.
For now, this process is being completed manually, but the next steps will be to automate the process.
We're using py esri dump to capture the raw data from the map layer published daily via the State of North Carolina's ArcGIS account. The rest endpoint is here. (Note: Although DHHS first published its zip code map April 30, the agency started using this new layer on May 4. The endpoint for this map may change again).
Usage
esri2geojson https://services.arcgis.com/iFBq2AW9XO0jYYF7/arcgis/rest/services/Covid19byZIPnew/FeatureServer/0 nc_zipDATE.geojson
After the geoJSON file is captured, we can upload it to MapShaper to reduce the file size to 10 percent to speed up load times and download as a simplified geojson file.
We're also using QGIS software to export the file in CSV format.
Once DHHS publishes the new file around 11 a.m., we can process the data and update our own map accordingly.
5/20 UPDATE: DHHS changed its data dashboard on May 20 and no longer appears to be updating the data in the shapefile layer. I'm checking with the agency on whether this will change in the future. But in the meantime, the process takes a little more time.
Tableau, the platform DHHS is using to visualize its data, is not set up to allow direct downloads in a structured format, but you can download ZIP code data as a PDF. We're then using Tabula PDF to convert this PDF to a spreadsheet and matching that spreadsheet with previous ZIP code data (population count, place name, etc.) to keep the formatting consistent with past versions of the data.
The PDF produced by the Tableau download omits ZIP codes where:
- the population is less than 500 AND case count is less than 5
- the case count is zero.
All 779 N.C. zip codes, including zero case count values, are included in the post-May 20 data below. Case counts are blank where the population is less than 500 and case count less than 5.
5/23 UPDATE: Correcting the information above, N.C. DHHS is still updating its shapefile through ArcGIS. To stay consistent, I will continue to use that data in our map and provide it here (aside from the several days I missed when I was trying to gather info from the state about its plans for the data going forward, which I will try to track down and backfill).
The state considers the data on its new Tableau dashboard to be the most up-to-date zip code information. But the shapefiles used by that platform are slightly different than those used in the ArcGIS platform (ZIP codes are not standardized shapes, per se, and change often). Because both platforms provide some level of data cleaning/geocoding to place addresses in the appropriate zip codes when aggregating cases and deaths, numbers on the state's new dashboard may not align 100% with the ArcGIS data used for WRAL's map.
Below are the time-series files starting with the first date of capture on May 1. We'll eventually start combining these into a single file to show growth over time.
- May 1 | CSV file (geojson files not captured)
- May 2 | full geoJSON file | reduced geoJSON file | CSV file
- May 3 | full geoJSON file | reduced geoJSON file | CSV file
- May 4 | full geoJSON file | reduced geoJSON file | CSV file
- May 5 | full geoJSON file | reduced geoJSON file | CSV file
- May 6 | full geoJSON file | reduced geoJSON file | CSV file
- May 7 | full geoJSON file | reduced geoJSON file | CSV file
- May 8 | full geoJSON file | reduced geoJSON file | CSV file
- May 9 | full geoJSON file | reduced geoJSON file | CSV file
- May 10 | full geoJSON file | reduced geoJSON file | CSV file
- May 11 | full geoJSON file | reduced geoJSON file | CSV file
- May 12 | full geoJSON file | reduced geoJSON file | CSV file
- May 13 | full geoJSON file | reduced geoJSON file | CSV file
- May 14 | full geoJSON file | reduced geoJSON file | CSV file
- May 15 | full geoJSON file | reduced geoJSON file | CSV file
- May 16 | full geoJSON file | reduced geoJSON file | CSV file
- May 17 | full geoJSON file | reduced geoJSON file | CSV file
- May 18 | full geoJSON file | reduced geoJSON file | CSV file
- May 19 | full geoJSON file | reduced geoJSON file | CSV file
- May 20 | CSV file (see note above)
- May 21 | (data pending)
- May 22 | (data pending)
- May 23 | full geoJSON file | reduced geoJSON file | CSV file
- May 24 | full geoJSON file | reduced geoJSON file | CSV file
- May 25 | full geoJSON file | reduced geoJSON file | CSV file
- May 26 | full geoJSON file | reduced geoJSON file | CSV file
- May 27 | full geoJSON file | reduced geoJSON file | CSV file
- May 28 | full geoJSON file | reduced geoJSON file | CSV file
- May 29 | full geoJSON file | reduced geoJSON file | CSV file
- May 30 | full geoJSON file | reduced geoJSON file | CSV file
- May 31 | full geoJSON file | reduced geoJSON file | CSV file
- June 1 | full geoJSON file | reduced geoJSON file | CSV file
- June 2 | full geoJSON file | reduced geoJSON file | CSV file
- June 3 | full geoJSON file | reduced geoJSON file | CSV file
- June 4 | full geoJSON file | reduced geoJSON file | CSV file
- June 5 | full geoJSON file | reduced geoJSON file | CSV file
- June 6 | full geoJSON file | reduced geoJSON file | CSV file
- June 7 | full geoJSON file | reduced geoJSON file | CSV file
- June 8 | full geoJSON file | reduced geoJSON file | CSV file
- June 9 | full geoJSON file | reduced geoJSON file | CSV file
- June 10 | full geoJSON file | reduced geoJSON file | CSV file
- June 11 | full geoJSON file | reduced geoJSON file | CSV file
- June 12 | full geoJSON file | reduced geoJSON file | CSV file
- June 13 | full geoJSON file | reduced geoJSON file | CSV file
- June 14 | full geoJSON file | reduced geoJSON file | CSV file
- June 15 | full geoJSON file | reduced geoJSON file | CSV file
- June 16 | full geoJSON file | reduced geoJSON file | CSV file
- June 17 | full geoJSON file | reduced geoJSON file | CSV file
- June 18 | full geoJSON file | reduced geoJSON file | CSV file
- June 19 | full geoJSON file | reduced geoJSON file | CSV file
- June 20 | full geoJSON file | reduced geoJSON file | CSV file
- June 21 | full geoJSON file | reduced geoJSON file | CSV file
- June 22 | full geoJSON file | reduced geoJSON file | CSV file
- June 23 | full geoJSON file | reduced geoJSON file | CSV file
- June 24 | full geoJSON file | reduced geoJSON file | CSV file
- June 25 | full geoJSON file | reduced geoJSON file | CSV file
- June 26 | full geoJSON file | reduced geoJSON file | CSV file
- June 27 | full geoJSON file | reduced geoJSON file | CSV file
- June 28 | full geoJSON file | reduced geoJSON file | CSV file
- June 29 | full geoJSON file | reduced geoJSON file | CSV file
- June 30 | full geoJSON file | reduced geoJSON file | CSV file
- July 1 | full geoJSON file | reduced geoJSON file | CSV file
- July 2 | full geoJSON file | reduced geoJSON file | CSV file
- July 3 | full geoJSON file | reduced geoJSON file | CSV file
- July 4 | full geoJSON file | reduced geoJSON file | CSV file
- July 5 | full geoJSON file | reduced geoJSON file | CSV file
- July 6 | full geoJSON file | reduced geoJSON file | CSV file
- July 7 | full geoJSON file | reduced geoJSON file | CSV file
- July 8 | full geoJSON file | reduced geoJSON file | CSV file
- July 9 | full geoJSON file | reduced geoJSON file | CSV file
- July 10 | full geoJSON file | reduced geoJSON file | CSV file
- July 11 | full geoJSON file | reduced geoJSON file | CSV file
- July 12 | full geoJSON file | reduced geoJSON file | CSV file
- July 13 | full geoJSON file | reduced geoJSON file | CSV file
- July 14 | full geoJSON file | reduced geoJSON file | CSV file
- July 15 | full geoJSON file | reduced geoJSON file | CSV file
- July 16 | full geoJSON file | reduced geoJSON file | CSV file
- July 17 | full geoJSON file | reduced geoJSON file | CSV file
- July 18 | full geoJSON file | reduced geoJSON file | CSV file
- July 19 | full geoJSON file | reduced geoJSON file | CSV file
- July 20 | full geoJSON file | reduced geoJSON file | CSV file
- July 21 | full geoJSON file | reduced geoJSON file | CSV file
- July 22 | full geoJSON file | reduced geoJSON file | CSV file
- July 23 | full geoJSON file | reduced geoJSON file | CSV file
- July 24 | full geoJSON file | reduced geoJSON file | CSV file
- July 25 | full geoJSON file | reduced geoJSON file | CSV file
- July 26 | full geoJSON file | reduced geoJSON file | CSV file
- July 27 | full geoJSON file | reduced geoJSON file | CSV file
- July 28 | full geoJSON file | reduced geoJSON file | CSV file
- July 29 | full geoJSON file | reduced geoJSON file | CSV file
- July 30 | full geoJSON file | reduced geoJSON file | CSV file
- July 31 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 1 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 2 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 3 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 4 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 5 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 6 | full geoJSON file | reduced geoJSON file | CSV file * Note: NCDHHS noted on 8/6 that laboratory omissions affected data from Aug. 2 to Aug. 5. They posted an analysis of the changes here *
- Aug. 7 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 8 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 9 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 10 | full geoJSON file | reduced geoJSON file | CSV file * Note: NCDHHS noted on 8/10 that a laboratory had failed to submit its entire data file on time. *
- Aug. 11 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 12 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 13 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 14 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 15 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 16 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 17 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 18 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 19 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 20 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 21 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 22 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 23 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 24 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 25 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 26 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 27 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 28 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 29 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 30 | full geoJSON file | reduced geoJSON file | CSV file
- Aug. 31 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 1 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 2 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 3 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 4 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 5 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 6 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 7 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 8 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 9 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 10 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 11 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 12 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 13 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 14 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 15 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 16 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 17 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 18 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 19 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 20 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 21 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 22 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 23 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 24 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 25 | full geoJSON file | reduced geoJSON file | CSV file * Note: NCDHHS noted on 9/25 that they were not including both PCR and antigen tests in their results of cases and deaths. They posted an FAQ of the changes here, but they'll mean more cases/deaths as of this date going forward. *
- Sept. 26 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 27 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 28 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 29 | full geoJSON file | reduced geoJSON file | CSV file
- Sept. 30 | full geoJSON file | reduced geoJSON file | CSV file
- Oct. 1 | full geoJSON file | reduced geoJSON file | CSV file
- Oct. 2 | full geoJSON file | reduced geoJSON file | CSV file