4. 植物工厂数据预处理实战

植物工厂的监测系统通常以固定周期采集温度、相对湿度、CO₂浓度、光照强度(PPFD)、营养液EC/pH、基质含水量等多路信号。原始数据在进入分析或控制模型之前,必须经过预处理,否则后续的阈值报警、生长模型拟合和调控策略都会被“脏数据”带偏。本节以一条典型的多传感器采集链路为对象,完整走一遍异常值检测与剔除、缺失值插补、时间序列对齐和数据标准化四个环节,并给出可直接参考的实现方式与判断依据。

一、先看清数据问题的来源

植物工厂数据的问题大致有三类。第一类是异常值:传感器探头结露导致湿度瞬间跳到100%、CO₂传感器在补气时出现尖峰、光照传感器被LED驱动干扰产生毛刺,或者设备重启后返回0或-9999这类哨兵值。第二类是缺失值:网络抖动丢包、网关断电、传感器维护期间无读数,表现为空值或整段时间戳缺失。第三类是时间不同步:不同传感器上报周期不同(如温度30 s一次、EC 5 min一次),且各自时钟存在秒级漂移,直接按行拼接会造成“错位对齐”。

下面这张图给出本节的数据处理链路:原始多路信号先做异常检测与剔除,再按统一时间栅格重采样对齐,随后插补缺失,最后标准化输出,供建模或控制使用。

原始多路信号 温度 30 s 湿度 30 s CO₂ 60 s PPFD 60 s EC 5 min pH 5 min 异常值检测与剔除 物理量程过滤 3σ / IQR 统计判据 变化率突变检测 哨兵值识别 → 置为缺失 时间序列对齐 统一时间栅格 重采样(均值/前值) 时钟漂移校正 按时间戳外连接 → 生成对齐表 缺失值插补 短缺口:线性插值 长缺口:前值保持 周期量:同时段均值 标记插补来源 → 完整序列 数据标准化 Z-score 标准化 Min-Max 归一化 参数仅用训练集估计 保存均值/标准差 → 建模输入 关键原则:异常先剔除再插补;对齐先于插补;标准化参数只能来自训练集,避免信息泄漏

二、异常值检测与剔除

异常检测建议采用“由硬到软”的分层策略,先做不依赖统计分布的硬规则,再做统计判据,最后做时序突变检测。

第一层:物理量程与哨兵值。为每个通道设定合理区间,例如温度 -5~50 ℃、相对湿度 0~100 %、CO₂ 300~2000 ppm、PPFD 0~1500 μmol·m⁻²·s⁻¹、EC 0.5~4.0 mS/cm、pH 4.5~7.5。超出区间直接判为无效;同时把 -9999、0(对EC/pH而言)、65535 等设备约定值列入哨兵值清单。

第二层:统计判据。对近似正态的通道可用 3σ 规则:以滑动窗口(如最近 2 小时)计算均值 μ 与标准差 σ,超出 μ±3σ 的点判为异常。对偏态明显的通道(如光照)更适合 IQR 规则:Q1−1.5·IQR 与 Q3+1.5·IQR 之外视为异常。示例:某窗口内温度 μ=23.5 ℃、σ=0.8 ℃,则 26.0 ℃ 落在 3σ 之外,判为异常。

第三层:变化率检测。植物工厂环境变化通常平缓,若相邻采样点跳变超过阈值(如温度 1 分钟内变化 >2 ℃、湿度 >15 %RH),即使数值在量程内也应怀疑。可用一阶差分绝对值与阈值比较实现。

剔除时不要直接删除整行,而应把异常点置为缺失值,交给下一步插补,这样既保留了时间轴完整性,又避免异常值污染统计量。同时建议新增一列 qc_flag 记录剔除原因,便于追溯。

三、时间序列对齐

对齐的核心是建立一个统一时间栅格,例如以 1 分钟为步长。对高频通道(30 s)做降采样,常用均值聚合;对低频通道(5 min)做升采样,常用前值保持(ffill)或线性插值。实现上可借助 pandas 的 resample 与 reindex:

import pandas as pd

# df 索引为带时区的 DatetimeIndex,各列为不同传感器
grid = pd.date_range(df.index.min().floor('min'),
                     df.index.max().ceil('min'),
                     freq='1min')

# 高频降采样取均值,低频升采样先对齐到栅格
aligned = df.resample('1min').mean().reindex(grid)

# 对 5 min 通道用前值填充到 1 min 栅格
aligned['EC'] = df['EC'].reindex(grid, method='ffill')
aligned['pH'] = df['pH'].reindex(grid, method='ffill')

若各设备时钟存在漂移,可先用同一事件(如补光灯开启时刻)做时间戳校准,再统一到同一时区。对齐完成后应检查每列的非空率,若某通道非空率低于 80%,说明该时段数据质量不足,需在后续分析中降权或标注。

四、缺失值插补

插补策略应与缺口长度和环境量的物理特性匹配。短缺口(如连续缺失 ≤3 个点)用线性插值最自然;中等缺口可用前值保持,但需注意温湿度在长时间保持下会失真;对具有明显日周期的光照、温度,可用“同时段历史均值”插补,即取前几日同一时刻的均值。CO₂ 在补气阶段波动大,建议优先用前值保持而非线性插值,避免造出不存在的斜坡。

插补后务必保留一列 imputed 标记(0/1),并在报告中统计插补比例。示例判断:若某日温度插补比例超过 10%,则该日数据不宜直接用于生长模型拟合。

五、数据标准化

不同量纲的通道(温度 ℃、PPFD μmol·m⁻²·s⁻¹、EC mS/cm)直接进入距离类模型会被大数值通道主导,因此需要标准化。常用两种方式:Z-score 标准化 (x−μ)/σ 适合近似正态、无明显边界的量;Min-Max 归一化 (x−min)/(max−min) 适合有明确物理边界的量(如湿度 0~100)。

标准化参数(μ、σ、min、max)必须只用训练集估计,再应用到验证集和在线数据;若用全量数据估计,会造成信息泄漏,使评估结果虚高。上线时应把参数与版本号一并保存。

六、可执行的处理清单

环节关键操作判断依据 / 示例参数
异常剔除量程过滤 + 哨兵值 + 3σ/IQR + 变化率温度 -5~50 ℃;1 min 变化 >2 ℃ 判疑
时间对齐统一 1 min 栅格,高频均值、低频前值各通道非空率 ≥80%
缺失插补短缺口线性、长缺口前值、周期量同时段均值单日插补比例 ≤10%
标准化Z-score 或 Min-Max,参数仅用训练集保存 μ/σ 或 min/max 及版本

按上述顺序执行后,输出应是一张时间连续、量纲统一、带质量标记的宽表。建议在交付前做一次快速自检:抽查若干时间点,确认对齐后同一行的温湿度与原始记录一致;检查标准化后各通道均值接近0、标准差接近1(Z-score情形);核对插补标记与异常标记的数量是否与日志吻合。只有这些检查通过,预处理结果才适合进入后续的建模与优化环节。