CN-AIR数据格式完全解读:AQI、PM2.5、O3等15项指标一次讲清
【免费下载链接】CN-AIR项目地址: https://ai.gitcode.com/GewisLab/CN-AIR
想研究中国空气质量却不知道数据文件里每列每行代表什么?别担心,这篇CN-AIR数据格式完全解读就是为你准备的。CN-AIR是一份覆盖全国主要城市的空气质量历史数据集,时间跨度从2014年一直到2026年,数据源自中国环境监测总站(CNEMC)。本文将带你一次看清CSV文件中的AQI、PM2.5、O3等15项指标,从字段含义到单位换算,从缺失值处理到pandas读取方法,新手也能轻松上手。
CN-AIR是什么?先认识这份空气质量数据集 📊
CN-AIR(China Air Quality Historical Dataset)是一个开源空气质量数据集,包含两类数据:
- 城市级数据:以城市为单位的平均浓度,约370个城市
- 站点级数据:以具体监测站点为单位,颗粒度更细
数据按年份分目录存放,比如城市_20240101-20241231/、站点_20140513-20141231/,每个目录下是一天的CSV文件,命名规则一目了然:china_cities_20240101.csv代表2024年1月1日的城市数据。
💡 小知识:一个CSV文件约390KB,一天24小时、15项指标,每天约360行数据。整个项目累计超过4300个CSV文件,堪称国内少有的长跨度空气质量开源数据集。
15项指标分别是什么?一张表全看懂 🔍
CN-AIR的type字段一共包含15种数据类型:1个综合指数(AQI)+ 14个污染物浓度指标。很多新手疑惑"为什么PM2.5有两个字段"?答案就在后缀里——带_24h的是24小时滑动平均值,不带的是整点实时值。
| type字段 | 中文含义 | 单位 | 说明 |
|---|---|---|---|
| AQI | 空气质量指数 | 无量纲 | 综合六项污染物计算的指数 |
| PM2.5 | 细颗粒物实时浓度 | μg/m³ | 可吸入肺部的细颗粒物 |
| PM2.5_24h | PM2.5 24小时滑动均值 | μg/m³ | 用于AQI评价的浓度 |
| PM10 | 可吸入颗粒物实时浓度 | μg/m³ | 粒径≤10μm的颗粒物 |
| PM10_24h | PM10 24小时滑动均值 | μg/m³ | 同上 |
| SO2 | 二氧化硫实时浓度 | μg/m³ | 煤烟型污染代表物 |
| SO2_24h | 二氧化硫24小时滑动均值 | μg/m³ | 同上 |
| NO2 | 二氧化氮实时浓度 | μg/m³ | 机动车尾气主要成分 |
| NO2_24h | 二氧化氮24小时滑动均值 | μg/m³ | 同上 |
| O3 | 臭氧实时浓度 | μg/m³ | 夏季光化学污染主角 |
| O3_24h | 臭氧24小时滑动均值 | μg/m³ | 同上 |
| O3_8h | 臭氧8小时滑动平均 | μg/m³ | 衡量臭氧健康影响的标准 |
| O3_8h_24h | O3_8h的24小时滑动均值 | μg/m³ | 参与AQI计算的最终值 |
| CO | 一氧化碳实时浓度 | mg/m³ | ⚠️ 注意单位是mg/m³ |
| CO_24h | 一氧化碳24小时滑动均值 | mg/m³ | 同上 |
两个最容易踩坑的点:
- CO的单位特殊:其他污染物都是微克/立方米(μg/m³),只有CO是毫克/立方米(mg/m³),数值通常只有0.3~1.5左右,千万别和其他指标混为一谈。
- O3有三套口径:实时值(O3)、8小时滑动平均(O3_8h)、以及参与AQI计算的24小时滑动(O3_8h_24h),研究臭氧污染时建议优先使用O3_8h。
CN-AIR CSV数据格式详解:列和行都代表什么 📐
打开任意一个china_cities_*.csv,第一行表头长这样:
date,hour,type,北京,天津,石家庄,唐山,秦皇岛,...文件采用"宽表"结构,逻辑非常清晰:
- date列:日期,格式为
YYYYMMDD,例如20240101 - hour列:小时,取值0-23,表示该小时整点
- type列:数据类型,即上表的15项指标之一
- 后续所有列:每个城市一列,列名就是城市名(如北京、上海、广州)
也就是说,同一时刻、同一指标、不同城市,排在同一行。想看"2024年1月1日0点北京的AQI",就是找date=20240101, hour=0, type=AQI那一行的"北京"列。
一行真实数据长什么样
20240101,0,AQI,55,78 20240101,0,PM2.5,29,57 20240101,0,PM2.5_24h,12,28 20240101,0,CO,0.51,0.73上面是"2024年1月1日0点,北京、天津"的部分数据:北京AQI为55(良),PM2.5为29 μg/m³,CO为0.51 mg/m³。数值是小数?直接用float读取即可。
📌 城市数量小提示:2014年数据约367个城市,到2024年已扩展到约375个城市。不同年份的列数略有差异,做跨年分析时建议以城市名为准做宽表转长表,而不是依赖列位置。
缺失值长什么样?如何处理空数据 ⚠️
真实监测数据难免有缺失,CN-AIR里缺失值以空值形式存在,比如20240101,0,O3_24h,,中北京列是空的。常见处理姿势:
- pandas读取:
pd.read_csv()会自动把空值识别为NaN,直接可用df.isna().sum()统计缺失 - 冬季O3数据容易缺:因为冬天气温低、臭氧浓度低,部分站点在冬季O3_8h_24h可能连续缺测
- 研究建议:做时间序列分析前,先按城市+指标查看缺失比例,缺失过多的城市建议剔除或插值
如何用pandas快速读取CN-AIR数据 🐍
CN-AIR数据是标准CSV,用pandas一行就能读取:
import pandas as pd df = pd.read_csv('城市_20240101-20241231/城市_20240101-20241231/china_cities_20240101.csv') print(df.head())如果要做跨城市、跨指标的分析,建议转成"长表"更顺手:
df_long = df.melt( id_vars=['date', 'hour', 'type'], var_name='city', value_name='value' )转成长表后,每一行就是"某天某小时某城市某指标的一个观测值",配合groupby可以轻松做任意维度的统计:比如计算全年各城市PM2.5年均值、绘制某城市AQI逐小时曲线等。
批量合并多年数据的技巧
项目按年份分目录存放,需要全量分析时可以用glob批量读取再合并:
import glob, pandas as pd files = glob.glob('城市_*/城市_*/*.csv') dfs = [pd.read_csv(f) for f in files] combined = pd.concat(dfs, ignore_index=True) combined.to_parquet('china_cities_combined.parquet')转换后的Parquet文件读取更快、体积更小,适合反复加载分析。
CN-AIR目录结构与数据范围速查 🗂️
| 目录 | 内容 |
|---|---|
城市_20140513-20141231/ | 2014年城市级数据(5月13日起) |
城市_20150101-20151231/ | 2015年城市级数据 |
| ... | 逐年类推 |
城市_20260101-20260418/ | 2026年城市级数据 |
站点_20140513-20141231/ | 2014年站点级数据 |
站点_20260101-20260418/ | 2026年站点级数据 |
- 时间范围:2014-05-13 至 2026-04-23,超过12年
- 数据来源:中国环境监测总站(CNEMC)
- 许可证:MIT开源协议,可自由用于学习研究
想下载全部数据,克隆仓库即可:
git clone https://gitcode.com/GewisLab/CN-AIR.git cd CN-AIR由于数据量较大,仓库使用Git LFS管理大文件,克隆前记得先执行git lfs install。
常见问题FAQ ❓
Q1:AQI是怎么算出来的?AQI由PM2.5、PM10、SO2、NO2、O3、CO六项污染物分别计算分指数(IAQI)后取最大值。其中O3使用8小时滑动平均值参与计算,这也就是数据里出现O3_8h和O3_8h_24h的原因。
Q2:实时值和24小时值有什么区别?实时值是整点瞬时浓度;_24h是过去24小时的滑动平均,更平滑、更能代表一段时间的暴露水平,也是官方评价空气质量等级时采用的数值。
Q3:数据是北京时间吗?是的,hour字段按北京时间(东八区)记录,研究时可放心直接使用。
Q4:能用这份数据做论文研究吗?可以用于学术研究,数据来自官方监测站整理,但项目README也提示"数据可能存在缺失或误差,使用时请自行验证",重要结论建议与官方发布数据交叉核对。
总结:CN-AIR数据格式一次掌握 ✅
回顾一下关键要点:
- 📁 CSV宽表结构:
date(YYYYMMDD)+hour(0-23)+type(15项指标)+ 城市列 - 📊 15项指标 = AQI + 14个污染物浓度字段,注意CO是mg/m³、O3有三套口径
- ⏰ 每文件24小时×15指标,约370个城市列,跨2014-2026年
- 🐍 pandas一行读取,
melt转长表后分析更灵活
掌握了CN-AIR的数据格式,你就可以放心地用这份超过12年的空气质量数据集做趋势分析、城市对比、健康效应研究了。如果文章对你有帮助,欢迎动手跑一遍上面的读取代码,数据格式理解得快,分析之路就走得稳。祝大家都能用数据看清"空气"!
【免费下载链接】CN-AIR项目地址: https://ai.gitcode.com/GewisLab/CN-AIR
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考