4. 数据清洗与预处理实战

排放数据汇总的第一道关口不是"算总量",而是"把数据弄干净"。在线监测(CEMS)小时数据、手工监测报告、企业台账、排污许可执行报告往往来自不同系统、不同频次、不同单位,直接汇总会得到看似合理却完全错误的排放量。本节围绕五类高频问题——缺失值、异常值、格式不统一、单位不一致、时间序列错位——给出可落地的处理方法与示例。

一、缺失值:先判断"为什么缺",再决定"怎么补"

缺失值不能一律删除或一律插补。工程上先做缺失标记分类:停机缺失(生产设备停运,浓度与流量本应为零或无效)、仪表故障缺失(探头堵塞、反吹异常、数采仪掉线)、传输缺失(网络中断导致小时数据未上传)、真实零值(确实排放为零)。四类缺失的处置完全不同:停机缺失应标记为"停运"而非补数;仪表故障缺失需结合前后时段与工况判断是否可插补;传输缺失通常可短时插补;真实零值必须保留为 0,不能被当作缺失。

常用插补规则示例(合理假设,非实测):连续缺失不超过 2 小时,采用前后有效值的线性插值;缺失 3~6 小时,用同工况(同生产负荷区间)近 7 天同时段均值替代;缺失超过 6 小时,不插补,标记为无效时段,在汇总时按有效数据覆盖率折算。有效数据覆盖率 = 有效小时数 ÷ 应监测小时数,一般要求不低于 75%,低于该阈值的数据时段不宜直接用于总量核算。

二、异常值:用"物理边界 + 统计规则 + 工况关联"三层识别

异常值识别建议三层叠加,避免单一方法误杀。第一层是物理边界:颗粒物浓度不可能为负,流速存在合理上限,烟气温度、含氧量有明确物理区间,超出即判无效。第二层是统计规则:对同一排口同一参数,用箱线图法(IQR)或 3σ 法识别离群点,例如某排口 SO₂ 小时浓度中位数 35 mg/m³,IQR 为 12,则上界约 35+1.5×12=53 mg/m³,持续高于上界且无工况支撑的点需复核。第三层是工况关联:把浓度、流量、生产负荷、治理设施运行状态放在同一时间轴上比对,若浓度突升而负荷未变、脱硫设施电流骤降,则更可能是治理设施异常而非数据错误,应标记为"工艺异常"而非简单剔除。

异常值处理必须留痕:每个被修正或剔除的点都要记录原值、处理方式、依据和操作人。直接删除异常点会系统性低估排放量,尤其在超标时段,属于数据失真风险。

三、格式统一与单位换算

格式统一包括:时间统一为 YYYY-MM-DD HH:00 的整点小时格式;排口编号统一编码规则;参数名称统一(如"烟尘/颗粒物/粉尘"归并为颗粒物);浓度统一为干基、标准状态(273.15 K、101.325 kPa)下的 mg/m³;流量统一为 Nm³/h。单位换算是最易出错环节,常见换算关系如下:

换算场景关系式示例
ppm 与 mg/m³(SO₂)mg/m³ = ppm × 64 ÷ 22.4200 ppm ≈ 571.4 mg/m³
ppm 与 mg/m³(NO₂)mg/m³ = ppm × 46 ÷ 22.4100 ppm ≈ 205.4 mg/m³
流量 m³/h 与 Nm³/hNm³/h = 工况流量 × (273.15÷(273.15+t)) × (P÷101.325)t=120℃、常压时约折减 0.71 倍
排放量kg/h = 浓度(mg/m³) × 流量(Nm³/h) ÷ 10⁶50×100000÷10⁶ = 5 kg/h

换算时必须同时核对基准:湿基转干基需扣除烟气水分,过量空气系数需按实测含氧量折算。若原始数据未注明基准,应先追溯数据来源说明,不可默认按干基标准状态处理。

四、时间序列对齐:把不同频次的数据放到同一时间轴

在线数据是小时值,手工监测是瞬时值或日均值,台账可能是班次或日值,生产负荷可能是 15 分钟值。对齐原则是:以小时为最细粒度建立主时间轴,高频数据聚合到小时(取均值或按有效时长加权),低频数据向下拆分或按覆盖时段挂接。例如手工监测的日均浓度,只能挂接到当日 24 个小时上作为日均参考,不能当作某一小时的实测值参与小时超标判定。跨时区、夏令时、跨年数据还需统一到同一时区并检查 23 小时/25 小时日。

排放数据清洗与预处理主链路 原始数据源 · CEMS 小时数据 · 手工监测报告 · 企业生产台账 · 治理设施运行记录 频次/单位/格式各异 ① 缺失值处理 停机缺失 → 标记停运 故障缺失 → 工况判断 传输缺失 → 短时插补 真实零值 → 保留为 0 覆盖率 ≥ 75% 才可用 ② 异常值识别 物理边界:负值/超限 统计规则:IQR / 3σ 工况关联:负荷+设施 区分数据错误/工艺异常 修正须留痕 ③ 格式与单位 时间整点化 排口/参数编码 干基·标态统一 ppm→mg/m³ 核对基准与氧含量 ④ 时间序列对齐(以小时为主时间轴) 高频(15 min)→ 聚合为小时均值 低频(日均/班次)→ 挂接覆盖时段,不冒充小时实测 统一时区,检查 23/25 小时日与跨年边界 清洗后数据集 有效小时记录 + 处理日志 + 覆盖率统计 → 进入汇总与交叉验证 示例:SO₂ 小时值 原值 200 ppm → 571.4 mg/m³ 流量 100000 Nm³/h → 57.1 kg/h 缺失 2 h:线性插值 缺失 8 h:标记无效 覆盖率 91%:可用 异常点修正留痕

五、一个可复现的处理案例

假设某排口某日 SO₂ 在线数据(示例数据):00—06 时正常,07—08 时缺失,09 时出现 200 ppm 的突升,10 时恢复至 40 ppm 左右,同时段生产负荷未变、脱硫塔电流从 18 A 降至 6 A。处理过程:07—08 时缺失仅 2 小时,按前后有效值线性插值;09 时 200 ppm 经换算为 571.4 mg/m³,虽在物理边界内,但结合脱硫设施电流骤降,判定为"治理设施异常"而非数据错误,保留原值并标记;若该时段流量为 100000 Nm³/h,则小时排放量约 57.1 kg,需在汇总中如实体现。若把该点当作异常值直接删除,当日排放量将被低估约 57 kg,这正是"异常值不等于错误值"的关键。

建议把清洗规则固化为可执行脚本或配置表:缺失分类字典、插补阈值、物理边界表、单位换算系数表、时间对齐规则。规则版本化后,同一批数据可重复清洗,结果可审计、可追溯,也便于在交叉验证发现偏差时快速定位是数据问题还是规则问题。

清洗完成后,输出物至少应包含三部分:清洗后的有效小时数据集、逐条处理日志(原值、处理方式、依据)、覆盖率与有效率统计。这三者共同构成后续汇总与交叉验证的可信基础——没有处理日志的"干净数据",在核查时无法自证其可靠性。