Field note · May 22, 2026
What is deliberately wrong with city-air-quality
Daily pollutant readings for four cities over nearly four years, with strong seasonality, weekday effects, wildfire episodes, and genuine sensor outages..
What is deliberately wrong with city-air-quality.
5,480 rows, 8 columns, one row per city per day. Daily pollutant readings for four cities over nearly four years, with strong seasonality, weekday effects, wildfire episodes, and genuine sensor outages.
Missing readings are blank, not zero — an important distinction, because a zero PM2.5 reading is physically implausible and will quietly drag your monthly averages down if you impute carelessly. Two multi-day wildfire episodes are embedded; they are real signal, not outliers to be clipped.
Something to try: Find the wildfire episodes automatically without hard-coding dates. The SQL playground has it loaded already, and the data explorer will profile every column in one pass if you would rather look before you query.
select *
from city_air_quality
limit 20;The file is generated from a fixed seed, so the CSV you download today is byte-identical to the one from last year. That matters more than it sounds: it means a lesson can say "row 412 is the interesting one" and still be right in eighteen months.
Download it, break it, keep it. CC0 — no attribution required, no account, no email.