4. 工艺参数数据采集与预处理
食品产线的工艺参数报表,其可信度并不取决于图表画得多漂亮,而取决于进入报表的那张数据表是否干净。传感器以固定周期向采集网关上报温度、压力、流量、pH、转速等参数,但真实产线上的原始数据几乎不可能"开箱即用":杀菌段温度探头偶发丢包、灌装流量计在清洗切换时出现尖峰、不同设备的时间戳存在秒级漂移、停机时段产生大量重复值。本节围绕缺失值、异常值和时间戳对齐三类问题,给出可落地的清洗规则与重采样方法,最终形成一张字段规范、时间连续、可直接用于报表计算的干净数据集。
一、先明确"干净"的判定标准
在动手写规则之前,需要先定义本节的数据质量目标,否则清洗会变成无休止的修补。对报表用途而言,"干净"应同时满足四条:时间轴统一且等间隔(例如全部对齐到1分钟栅格)、关键参数无缺失(杀菌温度、持温时间等CCP参数不允许空值)、异常值已被识别并合理处置(不是简单删除)、每条记录可追溯(保留原始值或标记清洗动作)。这四条也决定了后续规则的设计顺序:先对齐时间,再处理缺失,再处理异常,最后做重采样与聚合。
二、时间戳对齐:一切清洗的前提
产线上常见三种时间问题:设备本地时钟未同步导致同一时刻的参数落在不同时间点;不同采样周期(温度10秒一次、流量30秒一次)导致无法直接按行合并;停机或通信中断造成时间轴出现空洞。处理方法是统一时区与时钟源,再重采样到统一栅格。工程上通常以网关NTP时间为准,将各设备时间戳换算为UTC+8的本地时间,然后按参数特性选择聚合方式:温度、压力这类缓变量用区间均值;流量、累计产量这类量值用区间求和或末值;状态量(运行/停机)用区间内占多数的状态。
# 示例:将多源传感器数据对齐到1分钟栅格(pandas)
df["ts"] = pd.to_datetime(df["ts"]).dt.tz_localize("Asia/Shanghai")
df = df.set_index("ts").sort_index()
rule = {
"杀菌温度": "mean",
"持温时间": "max",
"灌装流量": "sum",
"运行状态": lambda s: s.mode().iloc[0] if not s.mode().empty else "未知",
}
grid = df.resample("1min").agg(rule)
grid["数据点数"] = df["杀菌温度"].resample("1min").count()
这里特意增加"数据点数"字段:某分钟内计数为0,说明该区间完全没有上报,属于真实缺失;计数为1而正常应为6,说明存在丢包。这个字段是后续缺失值判定和报表可信度标注的直接依据。
三、缺失值:区分"没采到"与"不该有"
缺失不能一律填补。停机、清洗、换产期间参数本就不应存在,这类缺失应保留为空并标注"非生产时段",若强行插值反而会污染OEE和单耗计算。只有生产运行期间的短时丢包才适合修补。常用策略按缺口长度分级:连续缺失不超过3个采样点(约3分钟),用线性插值;3至15分钟,用前值保持并打"插补"标记;超过15分钟,不插补,标记为"数据中断",在报表中单独统计中断时长。对杀菌温度这类CCP参数,任何插补都必须留痕,报表中应能区分实测值与插补值。
四、异常值:用物理边界加统计规则双重拦截
异常值分两类。第一类是物理不可能值,如杀菌温度出现-40℃、压力为负、pH大于14,这类直接判无效,按缺失处理。第二类是统计离群值,如流量计在阀门切换瞬间的短时尖峰,数值在物理范围内但明显偏离工况。对第二类,工程上常用"滑动中位数±3倍MAD"或"滑动均值±3σ"做局部检测,并结合变化率约束:温度单分钟内跃变超过5℃即视为可疑。处置方式不是删除,而是置为缺失后按缺失规则处理,同时记录异常标记和原始值,便于追溯。
# 示例:基于滑动中位数与MAD的局部异常检测
med = grid["灌装流量"].rolling(15, min_periods=5, center=True).median()
mad = (grid["灌装流量"] - med).abs().rolling(15, min_periods=5, center=True).median()
mask = (grid["灌装流量"] - med).abs() > 3 * 1.4826 * mad
grid.loc[mask, "灌装流量_原始"] = grid.loc[mask, "灌装流量"]
grid.loc[mask, "灌装流量"] = pd.NA
注意窗口要"居中"且不宜过长:窗口太长会把真实的工艺调整(如升温阶段)误判为异常,窗口太短则对持续偏移不敏感。实际调试时建议先用一周历史数据回放,统计误判率再定参数。
五、重采样与聚合:形成报表粒度
清洗完成后,还需按报表粒度做二次重采样。班报通常按班次(8小时)聚合,日报按自然日聚合。聚合时要区分参数语义:温度取均值并同时保留最大值(用于判断是否超限)、流量取累计、状态取运行时长占比。聚合结果应附带"有效数据覆盖率"字段,覆盖率低于阈值(如85%)的班次在报表中标注为"数据不完整",避免用低质量数据得出误导性结论。
六、清洗规则的可追溯与验证
清洗不是一次性动作,而应固化为可重复执行的规则集。建议为每个参数维护一张规则表,记录:参数名、物理上下限、采样周期、缺失分级阈值、异常检测窗口与倍数、聚合方式、覆盖率阈值。规则变更需留版本号,因为同一份报表在不同规则版本下结果可能不同,审计时必须能复现。验证环节可用两个手段:一是抽取若干已知工况时段(如一次正常升温、一次计划停机)人工核对清洗前后曲线是否合理;二是统计各参数的插补率与异常率,若某参数插补率长期偏高,说明探头或通信链路本身有问题,应反馈到设备维护,而不是靠算法掩盖。
完成上述步骤后,得到的数据集应具备统一的一分钟时间栅格、明确的缺失与异常标记、按班次或日聚合的报表字段,以及可追溯的清洗记录。这张表才是后续工艺参数报表计算、趋势分析和超限统计的可靠输入。