statistics.py 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. from sklearn.linear_model import LinearRegression
  5. plt.rcParams['font.sans-serif']=['SimHei']
  6. plt.rcParams['axes.unicode_minus']=False
  7. sta_file = '/home/limingze/zlwl-algos/USER/limingze/Inconsistency/Data/update.csv'
  8. t_device_path = '/home/limingze/zlwl-algos/USER/limingze/Inconsistency/t_device.csv'
  9. sta_data = pd.read_csv(sta_file)
  10. t_device = pd.read_csv(t_device_path)
  11. soh_cols = ['cell_soh'+str(x) for x in range(1, 21)]
  12. cell_chr_list = [f'cell_delta_energy_chr{i}' for i in range(1, 21)]
  13. cell_dis_list = [f'cell_delta_energy_dis{i}' for i in range(1, 21)]
  14. sta_data['cell_delta_energy_chr'] = sta_data[cell_chr_list].sum(axis=1)
  15. sta_data['cell_delta_energy_dis'] = sta_data[cell_dis_list].sum(axis=1)
  16. sta_data['pack_delta_energy_dis'] = -sta_data['pack_delta_energy_dis']
  17. sta_data['cell_pack_chr'] = sta_data['pack_delta_energy_chr']/sta_data['cell_delta_energy_chr']
  18. sta_data['cell_pack_dis'] = sta_data['pack_delta_energy_dis']/sta_data['cell_delta_energy_dis']
  19. sta_data['pack_code'] = pd.Series([])
  20. sta_data['cell_soh_variance'] = sta_data[soh_cols].var(axis=1)
  21. for i in range(len(sta_data)):
  22. sn = sta_data['sn'][i]
  23. sta_data['pack_code'][i] = t_device.loc[t_device['sn'] == sn, 'pack_model'].values[0]
  24. sta_data = sta_data.dropna(subset=['cell_delta_energy_chr1'])
  25. sn_counts = sta_data['pack_code'].value_counts()
  26. sn_list = sn_counts.index.tolist()
  27. GM02010_df = sta_data[sta_data['pack_code'] == sn_list[0]]
  28. KY01710_df = sta_data[sta_data['pack_code'] == sn_list[1]]
  29. GM02011_df = sta_data[sta_data['pack_code'] == sn_list[2]]
  30. KY01410_df = sta_data[sta_data['pack_code'] == sn_list[3]]
  31. soh_ranges = [(80, 85), (85, 90), (90,92.5),(92.5,95), (95, 97.5), (97.5, 100)] # 可根据需求自定义范围区间
  32. soh_diff_range = [(0, 3), (3, 6), (6,9)]
  33. soh_var_range = [(0,0.5),(0.5,1),(1,2),(2,3),(3,4),(4,5),(5,10)]
  34. soc_begin_chr_range = [(0,8),(8,16),(16,24),(24,32),(32,40)]
  35. soc_begin_chr_diff_range = [(1, 1.5), (1.5,2),(2, 2.5), (2.5,3), (3,4),(4,25)]
  36. dod_range = [(0, 20), (20,40),(40, 60), (60,80), (80,100)]
  37. soc_begin_dis_range = [(75,85),(85,90),(90,91),(91,92),(92,93),(93,94),(94,95),(95,100)]
  38. soc_begin_dis_diff_range = [(0,0.5),(0.5,1),(1, 1.5), (1.5,2),(2, 2.5)]
  39. # degree = 1 # 拟合的多项式阶数
  40. # coefficients = np.polyfit(GM02010_df['cell_delta_energy_chr'], GM02010_df['pack_delta_energy_chr'], degree)
  41. # poly_func = np.poly1d(coefficients)
  42. # x_fit = np.linspace(GM02010_df['cell_delta_energy_chr'].min(), GM02010_df['cell_delta_energy_chr'].max(), 10000)
  43. # y_fit = poly_func(x_fit)
  44. slope_all = GM02010_df['cell_pack_dis'].mean()
  45. for start, end in soc_begin_dis_diff_range:
  46. # subset = pk_df[(pk_df['cell_soh_mean'] > start) & (pk_df['cell_soh_mean'] <= end)]
  47. # subset = mgmcln_df[(mgmcln_df['cell_soh_mean'] > start) & (mgmcln_df['cell_soh_mean'] <= end)]
  48. subset = GM02010_df[(GM02010_df['cell_soc_begin_dis_diff'] > start) & (GM02010_df['cell_soc_begin_dis_diff'] <= end)]
  49. slope = subset['cell_pack_dis'].mean()
  50. x = np.linspace(1000, 5000, 10000)
  51. y = x
  52. y_fit = slope * x
  53. plt.plot(x, y, label='理想')
  54. plt.plot(x, y_fit, label='实际')
  55. plt.scatter(subset['cell_delta_energy_dis'], subset['pack_delta_energy_dis'], label=f'Range {start}-{end}', alpha=0.2, s=5)
  56. plt.xlabel('实际放出电量')
  57. plt.ylabel('理论放出电量')
  58. plt.title('不同放电起始SOC极差下不一致性对电池性能的影响')
  59. plt.legend()
  60. plt.show()
  61. print(1/slope)
  62. print(1/slope_all)