1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import pandas as pd
- import matplotlib.pyplot as plt
- import numpy as np
- from sklearn.linear_model import LinearRegression
- plt.rcParams['font.sans-serif']=['SimHei']
- plt.rcParams['axes.unicode_minus']=False
- output_path = '/home/limingze/zlwl-algos/USER/limingze/Inconsistency/Data/'
- sta_file = '/home/limingze/zlwl-algos/USER/limingze/Inconsistency/Data/update.csv'
- t_device_path = '/home/limingze/zlwl-algos/USER/limingze/Inconsistency/t_device.csv'
- sta_data = pd.read_csv(sta_file)
- t_device = pd.read_csv(t_device_path)
- soh_cols = ['cell_soh'+str(x) for x in range(1, 21)]
- cell_chr_list = [f'cell_delta_energy_chr{i}' for i in range(1, 21)]
- cell_dis_list = [f'cell_delta_energy_dis{i}' for i in range(1, 21)]
- sta_data['cell_delta_energy_chr'] = sta_data[cell_chr_list].sum(axis=1)
- sta_data['cell_delta_energy_dis'] = sta_data[cell_dis_list].sum(axis=1)
- sta_data['pack_delta_energy_dis'] = -sta_data['pack_delta_energy_dis']
- sta_data['cell_pack_chr'] = sta_data['pack_delta_energy_chr']/sta_data['cell_delta_energy_chr']
- sta_data['cell_pack_dis'] = sta_data['pack_delta_energy_dis']/sta_data['cell_delta_energy_dis']
- sta_data['pack_code'] = pd.Series([])
- sta_data['cell_soh_variance'] = sta_data[soh_cols].var(axis=1)
- for i in range(len(sta_data)):
- sn = sta_data['sn'][i]
- sta_data['pack_code'][i] = t_device.loc[t_device['sn'] == sn, 'pack_model'].values[0]
- sta_data = sta_data.dropna(subset=['cell_delta_energy_chr1'])
- sn_counts = sta_data['pack_code'].value_counts()
- sn_list = sn_counts.index.tolist()
- GM02010_df = sta_data[sta_data['pack_code'] == sn_list[0]]
- KY01710_df = sta_data[sta_data['pack_code'] == sn_list[1]]
- GM02011_df = sta_data[sta_data['pack_code'] == sn_list[2]]
- KY01410_df = sta_data[sta_data['pack_code'] == sn_list[3]]
- soh_ranges = [(60,80),(80, 85), (85, 90), (90,95), (95,96)] # 可根据需求自定义范围区间
- soh_diff_range = [(0, 3), (3, 6), (6,9)]
- soh_var_range = [(0,0.5),(0.5,1),(1,2),(2,3),(3,4),(4,5),(5,10)]
- soc_begin_chr_range = [(0,8),(8,16),(16,24),(24,32),(32,40)]
- soc_begin_chr_diff_range = [(1, 5), (5,10),(10, 15), (15,20), (20,25)]
- dod_range = [(0, 20), (20,40),(40, 60), (60,80), (80,100)]
- soc_begin_dis_range = [(75,85),(85,90),(90,95),(95,96),(96,97),(97,98),(98,99),(99,100)]
- soc_begin_dis_diff_range = [(0,0.5),(0.5,1),(1, 1.5), (1.5,2),(2, 2.5),(2.5,3),(3, 3.5),(3.5,4),(4,20),(5,10),(10,15),(15,20),(20,25)]
- r_range = [(0,0.001),(0.001,0.002),(0.002,0.003),(0.003,0.01)]
- # degree = 1 # 拟合的多项式阶数
- # coefficients = np.polyfit(GM02010_df['cell_delta_energy_chr'], GM02010_df['pack_delta_energy_chr'], degree)
- # poly_func = np.poly1d(coefficients)
- # x_fit = np.linspace(GM02010_df['cell_delta_energy_chr'].min(), GM02010_df['cell_delta_energy_chr'].max(), 10000)
- # y_fit = poly_func(x_fit)
- slope_all = KY01710_df['cell_pack_dis'].mean()
- KY01710_df.to_csv(output_path + 'KY01710.csv', encoding="utf_8_sig", index=False)
- for start, end in r_range:
- # subset = pk_df[(pk_df['cell_soh_mean'] > start) & (pk_df['cell_soh_mean'] <= end)]
- # subset = mgmcln_df[(mgmcln_df['cell_soh_mean'] > start) & (mgmcln_df['cell_soh_mean'] <= end)]
- subset = KY01710_df[(KY01710_df['cell_res_mean'] > start) & (KY01710_df['cell_res_mean'] <= end)]
- slope = subset['cell_pack_dis'].mean()
- x = np.linspace(100, 4000, 10000)
- y = x
- y_fit = slope * x
- plt.plot(x, y, label='理想')
- plt.plot(x, y_fit, label='实际')
- plt.scatter(subset['cell_delta_energy_dis'], subset['pack_delta_energy_dis'], label=f'Range {start}-{end}', alpha=0.2, s=5)
- plt.xlabel('实际放出电量')
- plt.ylabel('理论放出电量')
- plt.title('不同内阻不一致性对电池性能的影响')
- plt.legend()
- plt.show()
- print(1/slope)
- print(1/slope_all)
|