2. 环境数据清洗规范与质量框架
环境数据清洗不是“把空值删掉、把格式改齐”这么简单。它需要一套可度量的质量框架来回答三个问题:数据到底哪里有问题、清洗到什么程度算合格、清洗过程是否可追溯。本节围绕完整性、一致性、精度、时效性四个质量维度,建立清洗流程设计、日志记录与质量报告的基本方法。
四个质量维度:先定义,再度量
环境数据具有来源杂、时空属性强、量纲多样的特点,因此质量维度必须落到可计算的指标上,否则“质量好”只是一句空话。
完整性关注记录与字段是否缺失。常用指标包括记录完整率(非空必填字段数/应填字段总数)和时间序列覆盖率(实际时段数/应有监测频次数)。例如某空气质量站点按小时应上报24条,实际只有20条,则当日时间覆盖率为83.3%。完整性还要区分“整条缺失”和“字段缺失”,前者影响时序分析,后者影响属性联接。
一致性关注同一对象在不同表、不同来源之间是否自洽。典型检查包括:站点编码在主表与监测表中是否一致、行政区名称与编码是否匹配、单位是否统一(如浓度统一为μg/m³)、经纬度是否落在所属行政区范围内。一致性错误往往在属性联接后才暴露,因此应在联接前做键值比对。
精度包含两层含义:数值精度与空间精度。数值精度指有效位数、量纲与合理值域,例如PM2.5浓度不应为负值,pH应在0~14之间,超出即判为异常。空间精度指坐标的定位误差,若坐标来自不同坐标系(如WGS84与CGCS2000),直接混用会产生数十至上百米偏移,必须在清洗阶段统一。
时效性关注数据从产生到可用的延迟,以及数据本身的时间戳是否可信。指标可用“上报延迟中位数”和“时间戳异常率”衡量。例如要求监测数据在整点后15分钟内入库,若某批次延迟中位数为40分钟,则时效性不达标,需排查采集链路。
清洗流程设计:规则化、可执行、可回退
清洗流程应设计为“规则驱动”而非“人工逐条改”。一条可执行规则至少包含四要素:规则编号、适用对象与字段、判定条件、处理动作。以某市环境监测数据为例,可设计如下规则集(示例参数,非实测):
R01 完整性 监测表.hourly_value 为空且站点状态=正常 → 标记为缺失,不插补
R02 完整性 连续缺失≤2小时 → 线性插补并写入 quality_flag=1
R03 一致性 监测表.site_code 不在站点主表 → 挂起,输出待核对清单
R04 一致性 浓度单位=mg/m³ → 乘以1000换算为μg/m³
R05 精度 PM2.5 < 0 或 > 1000 → 置空并标记 quality_flag=2
R06 精度 坐标系统=WGS84 → 转换为CGCS2000后入库
R07 时效性 入库时间 - 观测时间 > 15分钟 → 记录延迟并计入时效统计
流程顺序上,建议先做一致性与精度校验,再做缺失处理,最后统计时效。原因是:若键值不一致或单位错误,先插补只会把错误放大;而时效统计依赖最终入库时间,应放在末尾。每条规则执行后都要输出“命中条数”,命中数为零也需记录,以证明规则确实运行过。
清洗日志:让每一步都可追溯
清洗日志不是运行截图,而是结构化记录。建议每条日志至少包含:批次号、规则编号、作用表与字段、命中记录数、处理动作、处理前后样例、执行时间与操作人。日志的价值在于复盘:当质量报告显示某维度得分下降时,可以快速定位是哪条规则命中量突增。例如R05命中数从日均30条升至400条,往往意味着采集设备漂移或量纲配置错误,而非数据本身变差。
质量报告:用指标说话
质量报告应围绕四个维度给出“指标值—阈值—结论”三列结构,并附问题分布。以下为一份可直接套用的报告骨架(示例数据为合理假设):
| 维度 | 指标 | 本期值 | 阈值 | 结论 |
|---|---|---|---|---|
| 完整性 | 记录完整率 | 96.8% | ≥95% | 达标 |
| 一致性 | 键值匹配率 | 99.4% | ≥99% | 达标 |
| 精度 | 值域异常率 | 3.1% | ≤2% | 不达标 |
| 时效性 | 延迟中位数 | 12分钟 | ≤15分钟 | 达标 |
报告不能只给结论,还要给出归因与动作。上例中精度不达标,应进一步拆分异常类型:是负值、超上限还是坐标越界,并对应到具体规则(R05、R06)与具体站点。若异常集中在某几个站点,优先排查设备;若普遍分布,则检查规则阈值是否过严。质量报告的收尾应明确“本期是否允许入库”“哪些记录需退回重采”“下期规则是否调整”,形成闭环。