EIS.SOH.SOC,环境温度都有的数据集,csv或m文件两种格式,共计三百余条eis曲线,具体信息见图3,较全的一份数据。

电池数据这玩意儿玩过的都懂,找份靠谱的EIS+SOH+SOC的组合数据比找对象还难。最近搞到个包含三百多条EIS曲线的数据集,自带环境温度参数,CSV和MATLAB双格式支持,实测能直接塞进各种算法模型里开跑。

先看数据结构的门道。用Python加载CSV时记得处理复数阻抗,这里有个坑点:

import pandas as pd
import ast

raw_data = pd.read_csv('battery_dataset.csv', converters={'Z': lambda s: np.array(ast.literal_eval(s))})
print(raw_data.iloc[0]['Z'][:,0])  # 取出首条曲线的实部

这个ast.literal_eval魔法能把字符串格式的数组转成真正的numpy数组,避免后期处理时被字符串格式坑到怀疑人生。注意第0列是实部,第1列是虚部,搞反了阻抗谱图会画成抽象派。

MATLAB党也别慌,m文件里藏着结构体套娃:

load('dataset.mat');
first_cell = data(1).cells;
freq_range = first_cell.EIS(1).Frequency;  % 扫频范围
Z_real = real(first_cell.EIS(1).Z);         % 别直接用abs()会丢失相位信息

这里每个电芯的EIS数据按不同SOC状态分层存储,用点运算符能像剥洋葱一样逐层拆解。特别注意当环境温度字段为NaN时,说明该条数据是在恒温箱失控时记录的——这种异常数据做模型训练时记得先过滤。

可视化阶段最能暴露问题。用Seaborn画EIS散点图时:

plt.figure(figsize=(10,6))
sns.scatterplot(x=raw_data.iloc[5]['Z'][:,0], y=-raw_data.iloc[5]['Z'][:,1], 
                hue=raw_data.iloc[5]['Frequency'], palette='viridis', edgecolor='none')
plt.gca().invert_yaxis()  # 虚部取反是行业潜规则

颜色映射对应测试频率,高频区(暖色)的点应该密集分布在左下角,如果出现离散的离群点,八成是接触阻抗异常。SOC值低于20%的曲线如果出现双容抗弧,说明该电芯可能已经产生析锂。

处理温度相关特征时,试试分箱操作:

raw_data['temp_bin'] = pd.cut(raw_data['Temperature'], 
                            bins=[-20, 0, 25, 45], 
                            labels=['低温', '常温', '高温'])

这样分组后跑线性回归,能明显看出-20℃下的欧姆阻抗比常温区高30%-50%。不过要注意某些电芯在低温区会出现SOC突降现象,这时候得结合开路电压做数据校正。

最后给个忠告:别直接用原始EIS数据扔进神经网络。先做Kramers-Kronig检验,筛掉不符合物理规律的数据点,不然训练出来的模型会比玄学更玄乎。三百条数据量不算大,但足够玩转等效电路建模和健康状态预测的基础实验了。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐