第三章 数据采集与预处理:从传感器到可用数据
大家好,我是老张。在储能系统里摸爬滚打了十来年,我越来越觉得一句话是真理:垃圾数据进,垃圾结果出。你算法再牛,模型再花哨,数据源头要是脏了,后面全是白费功夫。
这一章,咱们就聊聊数据采集与预处理。说白了,就是怎么把物理世界里的电压、电流、温度这些信号,变成算法能吃的干净数据。我踩过的坑不少,今天一并倒给你们。
3.1 传感器选型:别在源头省钱
传感器选型,我个人的习惯是「三看」:看精度、看量程、看响应时间。
- 精度:BMS(电池管理系统)里,电压传感器精度一般要求±1mV以内。温度传感器呢,±0.5℃是底线。我见过有人为了省钱用±5℃的,结果SOC(荷电状态)估算偏差大到离谱。
- 量程:别只看额定值。电池在过充或过放时,电压会超出正常范围。我建议留出20%的余量。比如单体电池最高4.2V,你选个5V量程的传感器,心里踏实。
- 响应时间:这个容易被忽略。采样频率高,传感器跟不上,数据就是错的。比如你要做毫秒级的电流采样,传感器响应时间必须小于1ms。
3.2 采样频率设计:不是越快越好
采样频率怎么定?很多人觉得越高越好。其实不然。
根据奈奎斯特定理,采样频率至少是信号最高频率的2倍。但储能系统里,信号变化没那么快。温度信号,几秒采一次就够了。电流信号,尤其是负载突变时,可能需要10ms甚至1ms的采样间隔。
我一般这样设计:
- 电压/电流:10Hz ~ 100Hz(看应用场景)
- 温度:0.1Hz ~ 1Hz(热惯性大,没必要高频)
- SOC/SOH:1Hz 左右(状态估计,更新太快没意义)
举个例子,我做储能电站的并网控制时,电流采样用了50Hz。为什么?因为电网是50Hz的,我需要看到每个周期的波形。但温度采样我只用了0.2Hz,5秒一次,足够了。
3.3 异常值检测与清洗:把坏数据揪出来
数据采回来了,第一件事就是检查有没有异常值。我常用的方法有几种:
3.3.1 基于统计的方法
最简单的是「3σ原则」。假设数据服从正态分布,超出均值±3倍标准差的值,就认为是异常。
import numpy as np
def detect_outliers_3sigma(data):
mean = np.mean(data)
std = np.std(data)
threshold = 3 * std
outliers = np.where(np.abs(data - mean) > threshold)
return outliers
但这个方法有个坑:如果数据本身有多个异常值,均值和标准差会被污染。我建议先用中位数和MAD(中位数绝对偏差)代替。
3.3.2 基于物理约束的方法
这个更实用。比如锂电池电压,正常范围是2.5V~4.2V。超出这个范围的,直接判为异常。温度也是,-20℃~60℃是常见范围。
我在项目中遇到过,传感器漂移导致电压读数突然跳到5V。用物理约束一卡,秒杀。
3.3.3 基于变化率的方法
电池电压不会瞬间跳变。如果相邻两个采样点的电压差超过某个阈值(比如0.5V),那大概率是异常。
def detect_by_rate(data, max_rate=0.5):
diff = np.abs(np.diff(data))
outliers = np.where(diff > max_rate)[0] + 1
return outliers
3.4 缺失值插补方法:别让数据断档
数据采集过程中,丢包、传感器故障、通信中断,都会导致缺失值。怎么补?
3.4.1 前向填充(Forward Fill)
用上一个有效值填充。简单粗暴,适合变化缓慢的信号,比如温度。
import pandas as pd
df['temperature'].fillna(method='ffill', inplace=True)
3.4.2 线性插值
用缺失值前后两个点的连线,估算中间值。适合电压、电流这种近似线性的信号。
df['voltage'].interpolate(method='linear', inplace=True)
3.4.3 多项式插值
如果信号变化复杂,线性插值不够用,可以用二阶或三阶多项式拟合。但要注意,阶数太高容易过拟合,反而引入噪声。
3.4.4 基于模型的插补
这是高级玩法。用机器学习模型(比如KNN、随机森林)预测缺失值。我一般在缺失率超过10%时才用,因为计算量大。
3.5 知识体系总览
下面这张图,是我自己总结的数据采集与预处理全流程。你照着这个框架走,基本不会出大问题。
嗯,这张图把整个流程串起来了。从传感器选型开始,到采样频率设计,再到异常值检测和缺失值插补,最后得到干净可用的数据。每一步都环环相扣,缺一不可。
3.6 小结
数据采集与预处理,看着基础,但真要做好,需要经验积累。我见过太多人在这上面栽跟头。记住三点:
- 传感器选型别省钱,源头干净,后面省心。
- 采样频率要合理,不是越高越好,够用就行。
- 异常值和缺失值,用组合拳处理,别指望一招鲜。
好了,这一章就到这里。数据准备好了,下一章咱们就可以开始真正的算法设计了。
公众号:蓝海资料掘金营,微信deep3321