📊 数据采集与预处理

传感器数据 · 清洗 · 标准化 · 归一化

🔍 1. 传感器数据采集 工业物联网基石

📡 常见传感器类型
  • 温度/湿度 – 热电偶、RTD、温湿度计
  • 压力/流量 – 压阻式、差压、涡街
  • 振动/加速度 – MEMS 加速度计、压电式
  • 视觉/光谱 – 工业相机、近红外
  • 电流/电压 – 霍尔效应、分流器
📦 采集策略与协议
  • 采样频率 – 根据工艺动态调整 (1Hz ~ 10kHz)
  • 通信协议 – OPC UA, Modbus, MQTT, Profinet
  • 边缘缓存 – 断点续传,时间戳对齐
  • 元数据标记 – 工位、批次、时间戳
⚙️ 最佳实践: 采用 10% 冗余采样 + 硬件滤波,避免混叠效应。采集数据立即附加质量戳 (quality flag)。

🧹 2. 数据清洗 缺失值 · 异常值

📌 缺失值处理

方法描述适用场景
删除 (listwise)直接移除含缺失的样本缺失率 < 5%,随机缺失
均值/中位数填充用该特征统计量填补数值型,低波动工艺参数
前向/后向填充用相邻时间点值填充时间序列,缓慢变化过程
插值 (线性/样条)利用邻近点拟合趋势明显,传感器漂移补偿
模型预测填充KNN, 回归等多维关联性强,谨慎使用

⚠️ 异常值检测与处理

🔎 检测方法
  • Z-Score – 阈值通常 |Z|>3
  • IQR 规则 – Q1-1.5IQR / Q3+1.5IQR
  • DBSCAN – 密度聚类识别离群点
  • 隔离森林 – 高维数据鲁棒
  • 工艺知识边界 – 上下规格限
🛠️ 处理策略
  • 截尾 (winsorize) – 替换为边界值
  • 修正 – 基于物理模型重建
  • 标记 – 保留但增加异常标签
  • 删除 – 仅当明确传感器故障
💡 工艺参数异常常伴随因果链:例如压力突降 + 温度上升 → 可能泄露。建议结合多变量逻辑。

⚖️ 3. 标准化 & 归一化 尺度统一

方法公式输出范围适用场景
Min-Max 归一化X' = (X - Xmin)/(Xmax - Xmin)[0, 1]神经网络、图像、距离模型
Z-score 标准化X' = (X - μ)/σ均值0,标准差1回归、SVM、PCA
Robust 缩放X' = (X - median)/IQR对异常值鲁棒含离群点的工业数据
最大绝对值缩放X' = X / |Xmax|[-1, 1]稀疏数据/已中心化
✅ 何时标准化?
  • 算法假设数据服从高斯分布
  • 需要比较不同量纲的特征权重
  • PCA、聚类、正则化模型
✅ 何时归一化?
  • 神经网络、深度学习
  • 距离度量 (KNN, K-Means)
  • 特征值有明确上下界
📡 传感器 原始信号 🗃️ 采集 边缘缓存 · 对齐 时间戳 🧹 清洗 缺失值 · 异常值 滤波 · 修正 📐 缩放 标准化/归一化 ▶ 数据预处理流水线 (工艺参数优化)

🧪 4. 代码实战 Python 预处理管线

import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler, StandardScaler # 加载传感器数据 (示例) df = pd.read_csv('sensor_工艺.csv', parse_dates=['timestamp']) df.set_index('timestamp', inplace=True) # ----- 缺失值处理 (线性插值) ----- df_interp = df.interpolate(method='linear', limit_direction='both') # ----- 异常值检测 (IQR) ----- Q1 = df_interp.quantile(0.25) Q3 = df_interp.quantile(0.75) IQR = Q3 - Q1 outlier_mask = (df_interp < (Q1 - 1.5 * IQR)) | (df_interp > (Q3 + 1.5 * IQR)) # 将异常值替换为边界值 (winsorize) df_clean = df_interp.mask(outlier_mask, other=df_interp.clip(lower=Q1-1.5*IQR, upper=Q3+1.5*IQR, axis=1)) # ----- 标准化 (Z-score) 与 归一化 (MinMax) ----- # 标准化:适合后续PCA/回归 scaler_std = StandardScaler() X_std = scaler_std.fit_transform(df_clean[['温度', '压力', '流量']]) # 归一化:适合神经网络 scaler_mm = MinMaxScaler(feature_range=(0, 1)) X_norm = scaler_mm.fit_transform(df_clean[['温度', '压力', '流量']]) print("预处理完成,保留时间索引,形状:", df_clean.shape)
📌 注意:工业数据建议先按批次分组,再分别进行缩放,避免未来信息泄露。