U.S. county-level 5-year AirData emission trends from EPA AirData annual AQI summaries 2020-2024. Sensitivity-gated change class with facility-count floor, top-1-exclude robustness, and 4 petrochemical-corridor display-hold counties. 994 counties.
Project description
us-county-airdata-trends
U.S. county-level 5-year AirData emission trends, derived from EPA AirData annual AQI summaries 2020-2024.
Sensitivity-gated 5-year change classification for 994 US counties, with explicit display-hold flags for counties below the facility-count floor (368 counties) and the 4 petrochemical-corridor counties that surface a methodology-review notice instead of a trend value.
Produced by ZipCheckup Trend Layers v1. Display methodology underwent a 4-agent legal pre-build review (FTC compliance + defamation/stigmatization + statistical methodology + feeds feasibility) — see methodology page.
Install
pip install us-county-airdata-trends
Quick start
import us_county_airdata_trends as airdata
# Look up a single county
la = airdata.get_county("06037")
# {
# "county_fips": "06037",
# "county_name": "Los Angeles",
# "state": "CA",
# "airdata_change_class": "stable",
# "airdata_pct_change": -5.9,
# "cycles_used": 5,
# "facility_count": 331,
# "sensitivity_robust": None,
# "skip_reason": None,
# "source_attribution": "EPA AirData annual AQI summaries 2020-2024",
# "petrochemical_corridor": False,
# "aqi_latest_year": 2024,
# }
# All counties for a state
texas = airdata.filter_counties(state="TX")
# Counties classified as decreasing (and display-eligible)
decreasing = airdata.filter_counties(change_class="decrease", exclude_skipped=True)
# Display-eligible vs display-held — for methodology dashboards
eligible = airdata.get_display_eligible_counties()
held = airdata.get_display_held_counties()
# Coverage metadata
print(airdata.meta)
# Meta(generated='2026-05-25', total_counties=994, license='CC-BY-4.0')
# Field schema
print(airdata.schema())
Field schema
| Field | Type | Description |
|---|---|---|
county_fips |
str | 5-digit US county FIPS code |
county_name |
str | None | County name without "County" suffix |
state |
str | None | 2-letter state abbreviation |
airdata_change_class |
"decrease" | "increase" | "stable" | "insufficient_data" | None |
Sensitivity-gated 5-year class |
airdata_pct_change |
float | None | Signed percent change between earliest and latest cycle |
cycles_used |
int | None | Number of reporting cycles (target 5, minimum 3) |
facility_count |
int | None | Distinct facilities in latest cycle (display gate ≥5) |
sensitivity_robust |
bool | None | True if direction stable when top-1 facility excluded |
skip_reason |
str | None | "facility_count_below_threshold" | "petrochemical_corridor" | "cycles_below_threshold" | None |
source_attribution |
str | Required attribution string for any public render |
petrochemical_corridor |
bool | True for 4 corridor counties (Harris TX, Calcasieu LA, Iberville LA, Kanawha WV) |
aqi_latest_year |
int | None | Latest reporting year included in window |
Full machine-readable schema: ship via airdata.schema().
Coverage (snapshot)
| Class | Counties |
|---|---|
decrease |
67 |
increase |
176 |
stable |
376 |
insufficient_data (display held) |
375 |
| Total | 994 |
Of which display-held:
facility_count_below_threshold: 368petrochemical_corridor: 4
Methodology
Source: EPA AirData annual AQI summaries (annual_aqi_by_county_{YEAR}.zip), years 2020-2024, retrieved via aqs.epa.gov/aqsweb/airdata/download_files.html.
Pipeline:
- Aggregate facility-reported emissions to county rollups per year.
- Compute percent change between earliest and latest cycle.
- Apply sensitivity gates:
≥3reporting cycles in window≥5reporting facilities in latest cycle- Top-1-exclude robustness: direction unchanged when largest facility excluded
- Bucket as
decrease/increase/stable(|pct_change| < 10%) /insufficient_data. - Hold display for 4 petrochemical-corridor counties pending methodology review (Harris TX
48201, Calcasieu LA22019, Iberville LA22047, Kanawha WV54039) — seepetrochemical_corridorboolean.
Full methodology: zipcheckup.com/methodology/airdata-trend/.
Caveats
- This is facility-reported emissions data, not ambient air quality. The trend reflects what facilities reported to EPA — not what residents breathe.
- AirData updates may reflect reporting methodology changes between cycles. Disclose this in any user-facing render.
- 4 petrochemical-corridor counties surface as
skip_reason: "petrochemical_corridor"with a methodology-review notice; do not silently treat them asinsufficient_data. - This package is updated periodically. The
meta.generatedfield surfaces the build date — check it before using for time-sensitive analysis.
License
CC BY 4.0. Free to use with attribution.
Citation
Akulov, A. (2026). U.S. County AirData 5-Year Emission Trends [Data set].
ZipCheckup. https://doi.org/10.5281/zenodo.20382474
Or BibTeX:
@dataset{zipcheckup_us_county_airdata_trends,
author = {Akulov, Artem},
title = {U.S. County AirData 5-Year Emission Trends},
year = {2026},
publisher = {ZipCheckup},
doi = {10.5281/zenodo.20382474},
url = {https://doi.org/10.5281/zenodo.20382474}
}
Related
us-water-quality-data— ZIP-level water quality dataset (sibling package).us-housing-risk-data— Housing risk and home values (sibling package).- ZipCheckup Public API — REST API including
/v1/county/{fips}/airdata-trend/.
Source repository
github.com/artakulov/waterbyzipcode (this package lives under packages/us-county-airdata-trends-python/).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file us_county_airdata_trends-2026.5.26.tar.gz.
File metadata
- Download URL: us_county_airdata_trends-2026.5.26.tar.gz
- Upload date:
- Size: 30.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c05497865a853e28cb98b2ab90a8043b4b4ad4f42cabc519780ce4666d17567
|
|
| MD5 |
6e77a1519604033e957094ac3273b288
|
|
| BLAKE2b-256 |
f61f7f2ca628151a38addc2f5a8a37c5cb04fa71c3fdb60229ad84fcd527adc8
|
File details
Details for the file us_county_airdata_trends-2026.5.26-py3-none-any.whl.
File metadata
- Download URL: us_county_airdata_trends-2026.5.26-py3-none-any.whl
- Upload date:
- Size: 30.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1358989d8fd15ed6ff4d6ec1125ac1c99f54efebec9e7c0c3878f1dfe673862b
|
|
| MD5 |
35942f69fffacc1e2b1b48bdade1c782
|
|
| BLAKE2b-256 |
98a8c26462d9cd5a1b73d54fed20d5349b2390863ebc755780175ecd72db5ca3
|