4、食品加工数据采集与清洗:传感器数据、ERP/MES系统数据、手工记录数据的采集方法,数据清洗、缺失值处理、异常值检测
食品加工企业的数据来源高度异构:生产线上PLC/传感器以毫秒级频率产生连续信号,ERP/MES系统以订单、工单、批次为单位产生结构化事务数据,而质检员、仓管员、设备点检员仍大量依赖纸质单据或Excel录入形成手工数据。三类数据在时间粒度、编码规则、精度标准上天然不一致,若直接进入分析模型,轻则产生偏差,重则导致质量追溯链断裂。本章聚焦“采集—清洗—修复—验证”全链路,帮助学员建立从原始信号到可用数据资产的标准作业流程。
4.1 三类数据源的采集方法与技术要点
4.1.1 传感器/PLC数据采集
核心原理:食品产线中的温度传感器(如杀菌釜热分布)、压力变送器(如均质机)、转速计(如灌装机转阀)通过OPC UA、Modbus TCP或Profinet协议接入边缘网关,网关以固定周期(通常1~5秒)轮询或订阅方式采集数据,打上时间戳后暂存本地,再批量上传至时序数据库(如InfluxDB、TDengine)。关键设计原则是“边缘缓存+断点续传”,避免网络抖动导致数据空洞。
| 采集要素 | 推荐配置 | 说明 |
|---|---|---|
| 采样频率 | 温度/压力:1~5s;振动:1kHz(FFT分析) | 过高浪费存储,过低丢失工艺细节 |
| 时间同步 | NTP/PTP,误差<100ms | 跨设备时序对齐的基础 |
| 数据格式 | 统一为浮点数+Unix时间戳+设备ID | 避免字符串解析开销 |
| 传输协议 | MQTT/OPC UA(带QoS) | 支持断线重连与消息确认 |
4.1.2 ERP/MES系统数据采集
核心原理:ERP(企业资源计划)侧重结果数据——物料出入库、采购订单、财务成本;MES(制造执行系统)侧重过程数据——工单派发、工序报工、设备参数、质检结果。采集方式以API接口(REST/SOAP)为主,辅以数据库视图只读同步。关键挑战是两套系统的编码体系不一致(如ERP物料编码与MES物料编码不同),需要在采集层建立映射表。
-- 示例:MES工单与ERP订单关联清洗SQL
SELECT
m.work_order_id,
m.batch_no,
e.sales_order_no,
m.product_code AS mes_code,
e.material_code AS erp_code,
CASE WHEN m.product_code = e.material_code THEN 'MATCH'
ELSE 'MISMATCH' END AS code_status
FROM mes_work_order m
LEFT JOIN erp_sales_order e
ON m.source_order_id = e.order_id
WHERE m.create_date >= '2025-01-01';
4.1.3 手工记录数据采集
核心原理:质检员的微生物检测结果、设备点检员的巡检记录、投料工的原料批次登记,仍大量依赖纸质单据。采集方式包括:①移动端表单(平板/手机扫码录入);②OCR识别(对既有纸质单据拍照自动提取);③语音录入(适合双手被占用场景)。手工数据最大的问题是“延迟录入”和“笔误”,必须设计二次确认机制。
4.2 数据清洗:从原始到可用的标准流程
4.2.1 格式标准化与编码统一
清洗的第一步不是处理缺失值,而是让所有数据“说同一种语言”。具体操作:
- 时间格式统一:将“2025/3/1 14:30”与“2025-03-01 14:30:00”统一为ISO 8601标准(YYYY-MM-DDTHH:mm:ss.sssZ)。
- 单位换算:温度传感器可能输出℉,压力可能输出kPa,需统一为℃和MPa。
- 枚举值映射:设备状态“RUN”“运行”“1”统一为枚举值1(运行)。
- 编码对齐:建立ERP物料编码↔MES物料编码↔条码的映射字典表。
4.2.2 缺失值处理策略
食品加工数据缺失的典型场景:传感器断电导致温度曲线中断、质检员漏填某项指标、MES工单未关联ERP订单。处理策略需结合数据用途:
| 缺失类型 | 推荐方法 | 适用场景 | 注意事项 |
|---|---|---|---|
| 连续变量(温度/压力) | 线性插值 / 前向填充 | 短时间中断(<5分钟) | 长时间缺失需标记,不可盲目插值 |
| 离散变量(设备状态) | 众数填充 / 状态保持 | 状态切换瞬间丢失 | 需结合前后状态判断合理性 |
| 关键质量指标(菌落总数) | 不填充,标记为“未检出” | 微生物检测缺失 | 涉及食品安全,不可用均值替代 |
| 业务关联字段(订单号) | 规则匹配回填 | MES工单缺ERP关联 | 按时间+产品+数量模糊匹配 |
4.2.3 异常值检测方法
食品加工数据异常分为三类:传感器故障(如热电偶断路输出满量程值)、真实工艺波动(如蒸汽压力骤降)、录入错误(如小数点点错)。检测方法需组合使用:
- 统计法:3σ原则(正态分布)、IQR(四分位距)——适合稳定工艺参数。
- 时序法:移动平均残差、CUSUM(累积和)——适合检测缓慢漂移。
- 密度法:DBSCAN、LOF——适合发现孤立点,但计算量大。
- 业务规则法:如杀菌温度不得低于121℃且持续时间不得少于15分钟——硬性约束。
# Python示例:IQR法检测温度异常
import numpy as np
temps = np.array([121.3, 121.5, 121.2, 121.8, 99.5, 121.4, 121.6])
q1, q3 = np.percentile(temps, [25, 75])
iqr = q3 - q1
lower, upper = q1 - 1.5*iqr, q3 + 1.5*iqr
outliers = temps[(temps < lower) | (temps > upper)]
print(f"异常值: {outliers}") # 输出 [99.5]
4.3 实战案例:某乳制品厂杀菌工序数据清洗闭环
背景与约束:某乳制品厂巴氏杀菌线,目标是将杀菌温度波动控制在±0.5℃以内。现有数据源:①温度传感器(每2秒采集,共8个测点);②MES工单记录(每批次一条,含设定温度、实际时长);③手工记录(操作工每小时抄表一次)。初始现象:分析报告显示某批次温度曲线出现“毛刺”,但MES记录显示合格。
分析判断过程:
- 将8个测点的2秒数据与MES批次时间对齐,发现第3号测点在14:32~14:35期间出现连续跳变(121.2→118.7→122.3→119.1),波动幅度达3.6℃。
- 对照手工记录,操作工在14:30抄表值为121.4℃,未记录异常。
- 检查传感器状态字,发现该测点在第3次跳变时返回“传感器自检失败”标志。
- 判定为传感器接触不良,而非真实工艺波动。
实际操作步骤:
- 将该时段3号测点数据标记为“无效”,不参与批次均值计算。
- 用相邻测点(2号和4号)的均值进行插补,并记录插补标记。
- 触发设备维护工单,更换热电偶探头。
- 在数据清洗规则库中新增规则:当传感器状态字非“正常”时,数据自动降级为“可疑”。
结果对比:清洗前该批次温度标准差为0.82℃,清洗后降至0.31℃,符合工艺要求。更重要的是,追溯系统能够明确区分“真实温度”与“传感器故障数据”,避免了误判。
复盘经验:①传感器自诊断信息必须纳入采集范围,不能只采主值;②手工记录无法替代高频传感器,但可用于低频交叉验证;③清洗规则需要持续迭代——每次发现新异常模式,就应固化为自动规则。
4.4 常见误区与总结复盘
| 误区 | 后果 | 正确做法 |
|---|---|---|
| 所有缺失值一律用均值填充 | 掩盖真实波动,误导工艺优化 | 区分缺失机制(随机/非随机),关键参数不填充 |
| 异常值直接删除 | 丢失真实工艺异常信号 | 先分类(故障/真实/录入),再决定处理方式 |
| 清洗规则不记录版本 | 分析结果无法复现 | 每次清洗生成数据血缘报告 |
| 只关注传感器数据,忽略手工数据 | 追溯链断裂 | 建立多源交叉验证机制 |
| 清洗后数据直接入库,不做质量验证 | 下游分析“垃圾进,垃圾出” | 设置数据质量KQI看板,每日监控 |