三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

CN-AIR数据格式完全解读:AQI、PM2.5、O3等15项指标一次讲清

CN-AIR数据格式完全解读:AQI、PM2.5、O3等15项指标一次讲清

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_24hPM2.5 24小时滑动均值μg/m³用于AQI评价的浓度
PM10可吸入颗粒物实时浓度μg/m³粒径≤10μm的颗粒物
PM10_24hPM10 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_24hO3_8h的24小时滑动均值μg/m³参与AQI计算的最终值
CO一氧化碳实时浓度mg/m³⚠️ 注意单位是mg/m³
CO_24h一氧化碳24小时滑动均值mg/m³同上

两个最容易踩坑的点

  1. CO的单位特殊:其他污染物都是微克/立方米(μg/m³),只有CO是毫克/立方米(mg/m³),数值通常只有0.3~1.5左右,千万别和其他指标混为一谈。
  2. 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),仅供参考

← 返回列表