第3章:数据采集与预处理——从传感器到可靠分析的第一步
大家好,我是你们的老朋友。今天咱们聊聊数据采集与预处理。说实话,这可能是整个课程里最“枯燥”但又最关键的环节。为什么?因为数据质量决定了分析结果的上限。你模型再牛,算法再花哨,喂进去的是垃圾,出来的只能是垃圾。我在项目里见过太多这样的案例了。
3.1 传感器数据采集策略
先说说采集策略。很多人觉得,传感器嘛,接上就完事了。其实没那么简单。
采样频率怎么定?
我个人习惯遵循奈奎斯特定理——采样频率至少是信号最高频率的两倍。但实际项目中,我通常会留3-5倍的余量。为什么?因为真实信号往往有噪声,留点余量好做滤波。
同步采集 vs 异步采集
- 同步采集:所有传感器在同一时刻采样。适合需要分析多传感器间相位关系的场景,比如振动分析。
- 异步采集:各传感器独立采样。成本低,但后续做时间对齐比较麻烦。
我的经验:做疲劳寿命预测时,我坚持用同步采集。虽然贵一点,但后期省心。异步采集做时间对齐,误差累积起来会让你怀疑人生。
数据存储策略
嗯,这里要注意。高频采集会产生海量数据。我建议采用“边缘计算+云端存储”的混合模式:
- 边缘端:做初步特征提取,只存关键特征
- 云端:存原始数据,但只保留关键时段
3.2 数据清洗——别让脏数据毁了你的分析
数据清洗,说白了就是“去伪存真”。我接手过一套轴承寿命数据,前前后后花了三周清洗,真正分析只用了一天。你想想看,清洗有多重要。
3.2.1 缺失值处理
缺失值怎么来的?传感器掉线、通信丢包、存储故障……原因多了去了。
处理方法:
| 方法 | 适用场景 | 注意事项 |
|---|---|---|
| 删除法 | 缺失比例<5%,且随机缺失 | 小心破坏时间序列的连续性 |
| 均值/中位数填充 | 数据波动不大 | 会降低方差,影响后续分析 |
| 前向填充 | 时间序列数据 | 适合缓慢变化的信号 |
| 插值法 | 数据有趋势性 | 线性插值最简单,样条插值更平滑 |
| 模型预测 | 缺失比例较高 | 计算量大,但效果最好 |
避坑指南:我曾经用均值填充处理一组振动数据,结果把故障特征给填没了。后来才意识到,振动信号的非平稳特性决定了均值填充根本不适用。从那以后,我对时间序列数据一律用插值法。
3.2.2 异常值处理
异常值分两种:真异常和假异常。真异常是设备真的出问题了,假异常是传感器抽风了。怎么区分?看上下文。
常用检测方法:
- 3σ原则:超出均值±3倍标准差的值视为异常。适合正态分布数据。
- 箱线图法:用四分位距(IQR)判断。鲁棒性更好,不受极端值影响。
- 移动窗口法:对时间序列数据,用滑动窗口计算局部均值和标准差。
# Python示例:移动窗口异常检测
import numpy as np
import pandas as pd
def detect_anomalies_moving_window(data, window=50, threshold=3):
rolling_mean = data.rolling(window=window).mean()
rolling_std = data.rolling(window=window).std()
z_scores = (data - rolling_mean) / rolling_std
return np.abs(z_scores) > threshold
# 使用示例
data = pd.Series([...]) # 你的传感器数据
anomalies = detect_anomalies_moving_window(data)
我的习惯:发现异常值后,先别急着删。我会标记出来,结合设备日志一起看。有一次,一个“异常值”其实是设备开始出现微裂纹的信号——差点被我当噪声删掉。
3.3 数据标准化与归一化
为什么要做标准化?说白了,不同传感器的量纲不一样。温度是0-100℃,压力是0-10MPa,振动加速度是0-50g。你把这些数据直接扔进模型,量级大的特征会主导结果。
3.3.1 归一化(Min-Max Scaling)
把数据映射到[0,1]区间。公式很简单:
X_norm = (X - X_min) / (X_max - X_min)
适用场景:
- 数据分布有明确边界(如温度、压力)
- 需要保留原始数据的相对关系
- 神经网络等对输入范围敏感的模型
注意:归一化对异常值非常敏感。如果数据里有极端值,会把正常数据压缩到很小的区间。我建议先做异常值处理,再做归一化。
3.3.2 标准化(Z-score标准化)
把数据转换成均值为0、标准差为1的分布:
X_std = (X - μ) / σ
适用场景:
- 数据近似正态分布
- 存在异常值(标准化对异常值鲁棒性更好)
- 主成分分析(PCA)、聚类等算法
3.3.3 怎么选?
| 场景 | 推荐方法 | 原因 |
|---|---|---|
| 数据有明确边界 | 归一化 | 保留原始比例关系 |
| 数据分布未知 | 标准化 | 鲁棒性更好 |
| 存在异常值 | 标准化 | 不受极端值影响 |
| 神经网络输入 | 归一化 | 加速收敛 |
| PCA/聚类 | 标准化 | 消除量纲影响 |
知识体系总览
下面这张图,是我梳理的本章知识结构。建议你保存下来,做项目时对照着看。
好了,这一章的内容就到这里。数据采集与预处理,听起来基础,但做扎实了,后面的分析会顺风顺水。记住一句话:花在数据清洗上的时间,永远不会白费。