3. 数据采集与预处理:实验设计原则、充放电循环数据采集、数据清洗与异常值处理、特征工程初步
各位好,我是老张。在电池行业摸爬滚打了十几年,今天咱们聊聊数据采集和预处理。说实话,这一步做不好,后面模型再花哨也是白搭。我见过太多人一上来就调算法,结果数据本身就有问题,那不就是「垃圾进,垃圾出」嘛。
3.1 实验设计原则:别让实验白做
做电池衰退实验,最怕什么?最怕花了几个月时间,跑出来的数据没法用。我个人习惯,动手之前先想清楚三个问题。
- 目标要明确:你是想建容量衰退模型,还是内阻增长模型?不同目标,实验方案差别很大。
- 变量要可控:温度、充放电倍率、截止电压、DOD(放电深度),这些关键参数必须精确控制。我遇到过有人把电池放恒温箱里,结果箱门没关严,温度波动了5度,那批数据全废了。
- 样本量要够:别指望三五块电池就能代表整个批次。电池一致性本身就有差异,至少准备6-10块同批次电芯做平行实验。
核心原则:实验设计要能回答你的科学问题,而不是为了做实验而做实验。
3.2 充放电循环数据采集:细节决定成败
数据采集这块,说白了就是「怎么把电池的状态忠实地记录下来」。我常用的设备是Arbin或Maccor的充放电测试仪,采样频率一般设在1Hz到10Hz之间。
采集哪些数据?嗯,这里要注意:
- 电压:端电压、OCV(开路电压),精度要到0.1mV
- 电流:充放电电流,精度0.01C以上
- 温度:电芯表面温度,最好多点布置
- 容量:每个循环的充入/放出容量
- 时间戳:精确到秒,别用相对时间
你想想看,如果电压采集精度不够,后面做dQ/dV分析时,噪声会大得让你怀疑人生。我早期吃过这个亏,后来学乖了,采样前一定先做校准。
3.3 数据清洗与异常值处理:把脏活干漂亮
原始数据从来都不是干净的。传感器漂移、通讯中断、人为操作失误,各种问题都有。数据清洗,说白了就是「去伪存真」。
常见问题及处理:
| 问题类型 | 表现 | 处理方法 |
|---|---|---|
| 缺失值 | 某段时间数据为空 | 线性插值或前向填充 |
| 毛刺噪声 | 电压/电流突然跳变 | 中值滤波或3σ原则剔除 |
| 重复数据 | 相同时间戳多条记录 | 去重,保留第一条 |
| 物理不可达值 | 电压超过4.5V或低于2.0V | 直接删除该段数据 |
避坑指南:我曾经处理过一批数据,发现容量曲线有异常波动。查了半天,原来是测试设备的时间同步出了问题,导致容量计算时用了错误的时间窗口。所以,清洗数据时一定要结合物理常识判断。
下面是我常用的一个数据清洗代码片段,用Python写的:
import pandas as pd
import numpy as np
def clean_battery_data(df):
# 删除物理不可达值
df = df[(df['voltage'] >= 2.0) & (df['voltage'] <= 4.5)]
df = df[(df['current'] >= -5) & (df['current'] <= 5)]
# 3σ原则剔除异常值
for col in ['voltage', 'current', 'temperature']:
mean = df[col].mean()
std = df[col].std()
df = df[(df[col] >= mean - 3*std) & (df[col] <= mean + 3*std)]
# 线性插值填充缺失值
df = df.interpolate(method='linear', limit_direction='both')
return df
3.4 特征工程初步:从原始数据中挖金子
特征工程,说白了就是把原始数据变成模型能听懂的语言。电池衰退模型常用的特征,我归纳为三类:
- 统计特征:每个循环的均值、方差、最大值、最小值。比如循环内的电压方差,能反映极化程度。
- 微分特征:dQ/dV曲线、dV/dt曲线。这些对电池内部的相变非常敏感。
- 增量特征:相邻循环的容量衰减量、内阻增长率。
举个例子,dQ/dV特征怎么提取?
def compute_dqdv(voltage, capacity):
# 对电压排序,确保单调递增
sorted_idx = np.argsort(voltage)
v_sorted = voltage[sorted_idx]
q_sorted = capacity[sorted_idx]
# 计算差分
dv = np.diff(v_sorted)
dq = np.diff(q_sorted)
# 避免除零
dv[dv == 0] = 1e-6
dqdv = dq / dv
return v_sorted[1:], dqdv
我个人习惯,特征工程做完后,一定要做可视化检查。把特征和容量衰减画在一起,看看有没有明显的相关性。如果特征和衰退趋势完全无关,那这个特征就是噪音,果断扔掉。
小技巧:别一次性生成太多特征。先做10-20个核心特征,用模型跑一遍,看哪些特征重要,再逐步添加。特征不是越多越好,多了反而容易过拟合。
本章知识体系
下面这张图,是我自己总结的数据采集与预处理流程。你跟着这个流程走,基本不会出大错。
好了,这一章的内容就到这儿。数据采集和预处理是电池衰退建模的基石,花再多时间都值得。下一章咱们聊聊具体的模型构建方法,到时候见。
公众号:蓝海资料掘金营,微信deep3321