空气质量 WORD 研判报告生成技能
将「多站点逐小时空气质量 + 气象」Excel 数据,转换为一份图文配合的中文 WORD 研判报告。 分析口径遵循 atmospheric-analysis-basic(基础版 v1.5)七步流程,并在其基础上补全报告结构。
输入数据要求
- 站点文件(可多个,建议 2 个以上国控站):列为
时间, 省份, 城市, 站点, NO₂, O₃, SO₂, NO, NOₓ, CO, PM₁₀, PM₂.₅, AQI。 注意原始列名可能含 Unicode 下标(NO₂/O₃/SO₂/PM₁₀/PM₂.₅),脚本已自动归一化为 NO2/O3/SO2/CO/PM10/PM2.5。 - 气象文件:列为
时间, 温度, 相对湿度, 气压, 风向, 风速, 降水量(列名以实际为准,脚本按“降水量”读取降水)。 - 两文件时间分辨率需一致(均为逐小时),时间列可被
pd.to_datetime解析。
处理流程
- 数据检查:统计各污染物逐小时缺测率、识别异常小时(SO2>400、PM10>800、PM2.5>400、O3>300、CO>5)。
- 城市整体值:逐小时取各站点均值(单站缺测则用另一站);剔除不足 20 小时的日。
- 日聚合 + AQI:城市日均浓度 → 按 HJ 633-2012 反算 IAQI(PM2.5/PM10/SO2/NO2/CO 用 24h 均值,O3 用 MDA8 日最大 8h 滑动平均),AQI 取各污染物 IAQI 最大值;AQI>50 时记录首要污染物。
- 统计:等级天数与占比、月度/周度均值、气象相关性(与各污染物 Pearson r)、站点差异(均值/相关)、与 GB 3095-2012 二级限值对比。
- 图表:PM2.5/PM10 时序、O3 MDA8 时序、等级饼图、月度柱状、气象散点、站点对比,共 6 张 PNG。
- 生成 WORD:按“研判结论 → 数据依据 → 污染物趋势与达标 → 等级统计 → 月度周度 → 气象影响 → 站点差异 → 主要污染物与来源 → 国标对比 → 不确定性 → 管控建议”输出,嵌入图表与表格。
使用方法
技能内含两个脚本(scripts/):
build_report.py:读取 Excel → 输出report_assets/stats.json、daily.csv与 6 张 PNG 图表。 参数:--wea 气象.xlsx --dl 站点A.xlsx --xx 站点B.xlsx --out 输出目录(均有默认路径,可省略)。make_docx.py:读取stats.json+ 图表 → 输出 WORD。 参数:--out 输出目录 --docx 报告.docx。
典型执行(在已安装 pandas/openpyxl/matplotlib/python-docx 的 Python 环境):
python scripts/build_report.py --wea 气象.xlsx --dl 站点A.xlsx --xx 站点B.xlsx --out ./out
python scripts/make_docx.py --out ./out --docx ./白银市空气质量分析报告.docx
依赖隔离:优先在托管 venv(
~/.workbuddy/binaries/python/envs/default)中pip install pandas openpyxl matplotlib python-docx后运行,避免污染用户环境。
关键标准(详见 references/standards.md)
- HJ 633-2012 IAQI 断点 与 AQI 等级区间(优 0–50 / 良 51–100 / 轻度 101–150 / 中度 151–200 / 重度 201–300 / 严重 301–500)。
- GB 3095-2012 二级标准:PM2.5 年均 35、日均 75;PM10 年均 70、日均 150;SO2 年均 60、日均 150;NO2 年均 40、日均 80;CO 日均 4 mg/m³;O3 8h 160 μg/m³。
注意事项
- 原始数据年份可能与用户口述不符(本例数据实为 2026 年但需求写 2024),以实际数据为准并在报告中标注。
- 城市 AQI 由两站均值浓度反算,与直接平均两站 AQI 略有差异;基础版定位不替代官方会商结论,表述用“初步判断/可能与…有关”。
- 缺测率约 9%–12% 时整体趋势不受影响;异常小时保留原值并在不确定性说明中标注。
Scan to join WeChat group