2023 Air Quality Statistics by County

US Environmental Protection Agency. 2024. "Air Quality Statistics by County, 2023." Modified 16 August. https://www.epa.gov/air-trends/air-quality-cities-and-counties.

The values shown are the highest among the sites in each area in 2023. Data from exceptional events are included. This summary is not adequate in itself to numerically rank CBSAs according to their air quality. The monitoring data represent the quality of air in the vicinity of the monitoring site and, for some pollutants, may not necessarily represent urban-wide air quality. PM2.5 summary statistics are based on AQS data as of August 12, 2024. All other pollutant summary statistics as of May 7, 2024.

GeoJSON polygons are from the USCB TIGER/Line cartographic boundary files.

Fields

ST: USPS state abbreviation

County: County name

GEOIDFQ: Fully-qualified GEOID (0500000US + five-digit FIPS) that can be used to join with US Census Bureau TIGER polygons.

CO_ppm: Carbon monoxide - second maximum non-overlapping 8-hour concentration (applicable NAAQS is 9 ppm)

Lead_mg: Lead micrograms per cubic meter - maximum rolling 3 month average (applicable NAAQS is 0.15 µg/m3)

NO2_am_ppb: Nitrogen dioxide parts per billion in mornings - Arithmetic mean concentration (applicable NAAQS is 53 ppb)

NO2_max_ppb: Nitrogen dioxide parts per billion - 98th percentile daily maximum 1-hour concentration (applicable NAAQS is 100 ppb).

Ozone_ppm: Ozone parts per million - fourth daily maximum 8-hour concentration (applicable NAAQS is 0.070 ppm)

PM10_mg: Particulate matter 1 micrometer or less in micrograms per cubic meter - second maximum 24-hour concentration (applicable NAAQS is 150 µg/m3)

PM25_mean_mg: Particulate matter 2.5 micrometers or less in micrograms per cubic meter - Weighted annual mean concentration (applicable NAAQS is 9.0 µg/m3)

PM25_24_mg: Particulate matter 2.5 micrometers or less in micrograms per cubic meter - 98th percentile 24-hour concentration (applicable NAAQS is 35 µg/m3)

SO2_ppb: Sulfer dioxide in parts per billion - 99th percentile daily maximum 1-hour concentration (applicable NAAQS is 75 ppb)

library(sf)

data = read.csv("2023-county-air-quality.csv")

polygons = st_read("https://michaelminn.net/tutorials/data/2019-2023-acs-counties.geojson")

polygons = polygons[,c("GEOIDFQ", "Square_Miles", "Latitude", "Longitude", "geometry")]

data = merge(polygons, data, all.x=T)

st_write(data, "2023-county-air-quality.geojson")

plot(data[data$ST == "PA", "Ozone_ppm"], border=0)