12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- 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
- 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 = [(80, 85), (85, 90), (90,92.5),(92.5,95), (95, 97.5), (97.5, 100)] # 可根据需求自定义范围区间
- 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, 1.5), (1.5,2),(2, 2.5), (2.5,3), (3,4),(4,25)]
- dod_range = [(0, 20), (20,40),(40, 60), (60,80), (80,100)]
- soc_begin_dis_range = [(75,85),(85,90),(90,91),(91,92),(92,93),(93,94),(94,95),(95,100)]
- soc_begin_dis_diff_range = [(0,0.5),(0.5,1),(1, 1.5), (1.5,2),(2, 2.5)]
- # 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 = GM02010_df['cell_pack_dis'].mean()
- for start, end in soc_begin_dis_diff_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 = GM02010_df[(GM02010_df['cell_soc_begin_dis_diff'] > start) & (GM02010_df['cell_soc_begin_dis_diff'] <= end)]
- slope = subset['cell_pack_dis'].mean()
- x = np.linspace(1000, 5000, 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('不同放电起始SOC极差下不一致性对电池性能的影响')
- plt.legend()
- plt.show()
- print(1/slope)
- print(1/slope_all)
|