基于Python的NASA锂电池数据集提取和分析

一、数据准备

上一篇文章通过Matlab代码实现 NASA锂电池数据集分析_nasa电池数据集在哪里-CSDN博客

这篇文章通过Python代码来实现提取NASA数据集中任意参数,数据链接参考上面这篇文章↑

a14a484224d14f88b91bc4cd26fd8aa0.png


二、代码实现

# %%
# 提取数据创建csv
# 提取数据创建csv
import csv
import os 
import scipy.io as sio
from itertools import zip_longest
def loaddata(Battery_path,status,datatype):
    dic = sio.loadmat(Battery_path)
    Battery = os.path.splitext(os.path.basename(Battery_path))[0]
    cycle = dic[Battery][0][0][0][0]
    num_cycles = cycle.shape[0]
    # 索引字典
    index_map = {
        'V': 0,
        'C': 1,
        'T': 2,
        'time':5,
        'P': 6 }
    index = index_map.get(datatype)
    # 打开CSV文件用于写入,如果文件不存在则创建
    csv_filename = f"{Battery}_{status}_{datatype}.csv"
    # data_folder = 'csv_data'
    # csv_path = os.path.join(data_folder,csv_filename)
    # os.makedirs(data_folder, exist_ok=True)
    csv_path = os.path.join('.',csv_filename)
    # with open(csv_path, 'w', newline='') as csvfile:
    #     writer = csv.writer(csvfile)
    #     for i in range(num_cycles):
    #         if str(cycle[i][0][0]) == status:
    #             data = cycle[i][3][0][0][index][0]           
    #             writer.writerow(data[j]for j in range(len(data)))
 
    #### 按列存储
    # 创建一个空列表存储所有数据行
    all_rows = []
    
    for i in range(num_cycles):
      if str(cycle[i][0][0]) == status:
           # 获取指定的数组数据
          data = cycle[i][3][0][0][index][0]
          all_rows.append(data)  # 将每个数据行加入到 all_rows 列表中
 
    # 将数据转置,使得不同循环的数据按照列排列
    all_rows = list(zip_longest(*all_rows,fillvalue=''))
    # 写入 CSV 文件
    with open(csv_path, 'w', newline='') as csvfile:
      writer = csv.writer(csvfile)
      for row in all_rows:
          writer.writerow(row)
 
 
# 循环读取数据
# charge_datatype_list = ['V','C','T','time'] 
# charge_datatype_list = ['V'] 
discharge_datatype_list =  ['V','C','T','time','P']   
Battery_list = ['B0033']
base_path = 'F:/***/学习资料/电池学习/个人训练文件/电池数据/'
for name in Battery_list:
    print('Load Data'+ name + '.mat...')
    Battery_path = base_path + name +'.mat'
    # 提取充电各项数据
    # for datatype in charge_datatype_list: 
    #     print(f'Load charge {name} {datatype}')            
    #     loaddata(Battery_path=Battery_path,status='charge',datatype=datatype) 
    # 提取放电各项数据
    for datatype in discharge_datatype_list:
        print(f'Load discharge {name} {datatype}')
        loaddata(Battery_path=Battery_path,status='discharge',datatype=datatype)

# %%

三、提取结果

176ef5fdb14d48d89cd9048bbe89e438.png

最后就可以利用这些文件进行深度学习训练啦,然后就能做些算法验证发发文章咯

先随便贴个一篇论文的预测结果图~下期出训练代码
d585f25ae853482aa0c27bd5e3d5eae1.png

作者:SimpLee666

物联沃分享整理
物联沃-IOTWORD物联网 » 基于Python的NASA锂电池数据集提取和分析

发表回复