{ "cells": [ { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1655\n" ] } ], "source": [ "import pandas as pd\n", "import numpy as np\n", "import os\n", "folder_path = \"/home/liuzhongxiao/zlwl-algos/USER/liuzhongxiao/SOC_pre/chracter/\" # 设置相对路径\n", "csv_files = [file for file in os.listdir(folder_path) if file.endswith('.csv')]\n", "# 遍历所有CSV文件并依次读取它们\n", "df_data_all = pd.DataFrame()\n", "for csv_file in csv_files:\n", " filename = os.path.join(folder_path, csv_file)\n", " df_data = pd.read_csv(filename)\n", " df_data_all = df_data_all.append(df_data)\n", "print(len(df_data_all))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1655\n" ] } ], "source": [ "df_data_all.drop_duplicates(subset=['sn', 'time_st'], keep = 'first', inplace=True)\n", "df_data_all.reset_index(drop = True, inplace=True)\n", "print(len(df_data_all))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "\n", "def smooth(a,WSZ):\n", " out0 = np.convolve(a,np.ones(WSZ,dtype=int),'valid')/WSZ\n", " r = np.arange(1,WSZ-1,2)\n", " start = np.cumsum(a[:WSZ-1])[::2]/r\n", " stop = (np.cumsum(a[:-WSZ:-1])[::2]/r)[::-1]\n", " return np.concatenate((start, out0, stop))\n", "def find_peak_triangleNum(filter_signal, peak_width):\n", " # 判断是否有凸起\n", " length_data = len(filter_signal)\n", " thre = 0.8*np.percentile(filter_signal, 90) # 设置阈值高度 95%是前400个点的20个波峰点\n", " botthre = 0.8*np.percentile(filter_signal, 10) # 设置阈值低度 5%是400个点的后20个波峰点\n", " # 在整个区域内找极值\n", " l = []\n", " bot = []\n", " for i in range(1,length_data-1):\n", " if (filter_signal[i-1] < filter_signal[i]) and (filter_signal[i]>filter_signal[i+1]) and (filter_signal[i]>thre):\n", " l.append(i)\n", " elif (filter_signal[i] == filter_signal[i-1]) and (filter_signal[i]>thre):\n", " l.append(i) # 最高点前后可能有相等的情况\n", " if (filter_signal[i-1] > filter_signal[i]) and (filter_signal[i] l[j-1]: # 同一个峰内的数据,将小的值替换成0\n", " ll[j-1] = 0\n", " else:\n", " ll[j] = 0\n", " cou = cou+1\n", " rcou = CC - cou\n", " ll = [i for i in ll if i > 0] # 去掉0的值\n", " peak_index = []\n", " # 找到每个区间内波峰最大值\n", " # 截断每个区间再求区间最大值的索引\n", " for i in range(len(ll)):\n", " if i == 0:\n", " index_range = np.array(l)[np.array(l) <= ll[i]]\n", " else:\n", " index_range = np.array(l)[(np.array(l)<=ll[i]) & (np.array(l)>ll[i-1])]\n", " # 找到每个区间最大值得索引\n", " if len(index_range) > 0:\n", " peak_index.append(index_range[np.argmax(filter_signal[index_range],axis=0)])\n", " DD = len(bot) # 统计极值得个数\n", " cou = 0\n", " botm = bot.copy()\n", " for j in range(1, DD):\n", " if bot[j]-bot[j-1] < peak_width: # 此判断用于将位于同一个峰内的极值点去掉\n", " if bot[j] < bot[j-1]: # 同一个峰内的数据,将大的值替换成0\n", " botm[j] = 0\n", " else:\n", " botm[j-1] = 0\n", " cou = cou+1\n", " Dcou = DD - cou\n", " botm = [i for i in botm if i > 0] # 去掉0的值\n", " bot_index = []\n", " # 找到每个区间内波峰最大值\n", " # 截断每个区间再求区间最大值的索引\n", " for i in range(len(botm)):\n", " if i == 0:\n", " botindex_range = np.array(bot)[np.array(bot) >= botm[i]]\n", " else:\n", " botindex_range = np.array(bot)[(np.array(bot) >= botm[i]) & (np.array(bot) < botm[i-1])]\n", " # 找到每个区间最小值得索引\n", " if len(botindex_range) > 0:\n", " bot_index.append(botindex_range[np.argmin(filter_signal[botindex_range],axis=0)])\n", " return [rcou, peak_index, Dcou, bot_index]#" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/opt/module/anaconda2022-10/envs/py3916/lib/python3.9/site-packages/pandas/util/_decorators.py:311: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " return func(*args, **kwargs)\n", "/tmp/ipykernel_2546307/3360802002.py:51: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " df_datachose['abscrnt'] = list(np.abs(df_datachose['Packcrnt']))\n" ] } ], "source": [ "import re\n", "from scipy.signal import savgol_filter\n", "import matplotlib.pyplot as plt \n", "from pylab import*\n", "import matplotlib as mpl\n", "from scipy import interpolate\n", "plt.rcParams['font.sans-serif']=['simhei'] #用来正常显示中文标签\n", "plt.rcParams['axes.unicode_minus']=False #用来正常显示负号\n", "df_ofc_data = df_data_all.loc[df_data_all['sts_flg'] ==1]\n", "df_ofc_data.reset_index(drop = True, inplace=True)\n", "dvsocchrcter = []\n", "pack_capty = 456#df_param['pack_capacity'].iloc[0]\n", "# k = 3\n", "def dats_interp(input1, input2, datalen):\n", " cap_frst = list(linspace(input1.iloc[0], input1.iloc[-1], datalen, endpoint = False))#len(df_dataana['chrgah'])\n", " fuc_inter = interpolate.interp1d(input1, input2, kind = 'nearest')#定义差值函数\n", " vlt_splce_temp = list(fuc_inter(cap_frst))\n", " return vlt_splce_temp\n", "for item in range(len(df_ofc_data)):#\n", " df_datatp = df_ofc_data.iloc[item]\n", " itemsn = df_datatp['sn']\n", " df_data_temp = pd.DataFrame()\n", " para_lvbo = 7\n", " if (type(df_datatp['celvltmax']) == str):# and (type(df_datatp['secvlt']) == str) and (type(df_datatp['thrdvlt']) == str)\n", " df_data_temp['Time'] = eval(df_datatp['timelst'])#re.findall(r'\\(([\\s\\S]+?)\\)',df_datatp['timelst'])##.iloc[0]\n", " df_data_temp['SOC[%]'] = eval(df_datatp['soc_aray'])#eval(df_datatp['soc_aray'])\n", " df_data_temp['Packcrnt'] = eval(df_datatp['crnt_aray'])\n", " df_data_temp['frst'] = eval(df_datatp['celvltmax'])#eval(df_datatp['celvltmax'])\n", " # df_data_temp['send'] = eval(df_datatp['secvlt'])#eval(df_datatp['secvlt'])\n", " # df_data_temp['thrd'] = eval(df_datatp['thrdvlt'])#eval(df_datatp['thrdvlt']) \n", " df_data_temp['max_T'] = eval(df_datatp['celtemmax'])#eval(df_datatp['celtemmax'])\n", " df_data_temp['min_T'] = eval(df_datatp['celtemmin'])#eval(df_datatp['celtemmin'])\n", " df_data_temp['odo'] = [df_datatp['odo_st']]*len(df_data_temp['Time'])\n", " df_data_temp['chrgah'] = eval(df_datatp['chrgahlst'])\n", " df_data_temp['packvlt'] = eval(df_datatp['packvlt'])\n", " df_data_temp['Time'] = pd.to_datetime(df_data_temp['Time'])#, utc=True, unit='ms').tz_convert('Asia/Shanghai')\n", " delta_time = round((df_data_temp['Time'].iloc[-1] -df_data_temp['Time'].iloc[0])/pd.Timedelta(1, 'hours'), 3)\n", " delta_soc = round((df_data_temp['SOC[%]'].iloc[-1] - df_data_temp['SOC[%]'].iloc[0]), 3)\n", " rate_chrg = round(delta_soc/(100*delta_time), 2)\n", " df_datachose = df_data_temp[(df_data_temp['SOC[%]'] > 30) & (df_data_temp['SOC[%]'] < 85)]\n", " diff_vlt = df_datachose['frst'].diff()\n", " # 使用 cumsum() 函数标记下降区域\n", " down_regions = (diff_vlt >= 0).cumsum()\n", " # 使用 groupby() 和 transform() 函数计算每个区域的长度\n", " region_sizes = down_regions.groupby(down_regions).transform('size')\n", " # 使用 where() 函数删除连续3次以上下降位置的数据\n", " data_series_filtered = df_datachose.where(region_sizes < 10)\n", " df_datachose.dropna(axis = 0, inplace=True)\n", " df_datachose.reset_index(drop= True, inplace=True)\n", " if (rate_chrg > 0.001) and (len(df_datachose) > 10):\n", " df_datachose['abscrnt'] = list(np.abs(df_datachose['Packcrnt']))\n", " crntnum = df_datachose.loc[:,'abscrnt'].value_counts() #统计电芯数量这一列每个元素出现的个数\n", " crntmaxNums = int(crntnum.idxmax())\n", " df_dataana = df_datachose.loc[(df_datachose['abscrnt'] > crntmaxNums-4) & (df_datachose['abscrnt'] < crntmaxNums+4)]\n", " df_dataana = df_dataana.iloc[3:-2]\n", " df_dataana.reset_index(drop= True, inplace=True)\n", " if (len(df_dataana) > 10):\n", " df_dataana['frst'] = savgol_filter(df_dataana['frst'], para_lvbo, 3)\n", " # df_dataana['send'] = savgol_filter(df_dataana['send'], para_lvbo, 3)\n", " # df_dataana['thrd'] = savgol_filter(df_dataana['thrd'], para_lvbo, 3)\n", " # vlt_frst = list(linspace(df_dataana['frst'].iloc[0], df_dataana['frst'].iloc[-1], len(df_dataana['frst']), endpoint = False))#\n", " # fuc_inter = interpolate.interp1d(df_dataana['frst'], df_dataana['chrgah'], kind = 'nearest')#定义差值函数\n", " # cap_splce = list(fuc_inter(vlt_frst))\n", " split_len = int(df_dataana['SOC[%]'].iloc[-1] - df_dataana['SOC[%]'].iloc[0])\n", " if split_len > 10:\n", " cap_frst = list(linspace(df_dataana['chrgah'].iloc[0], df_dataana['chrgah'].iloc[-1], split_len, endpoint = False))#len(df_dataana['chrgah'])\n", " vlt_splce_temp = dats_interp(df_dataana['chrgah'], df_dataana['frst'], split_len)\n", " soc_splt = dats_interp(df_dataana['chrgah'], df_dataana['SOC[%]'], split_len)\n", " crnt_splt = dats_interp(df_dataana['chrgah'], df_dataana['Packcrnt'], split_len)\n", " maxt_splt = dats_interp(df_dataana['chrgah'], df_dataana['max_T'], split_len)\n", " mint_splt = dats_interp(df_dataana['chrgah'], df_dataana['min_T'], split_len)\n", " odo_splt = [df_dataana['odo'].iloc[0]]*split_len\n", " time_splt = dats_interp(df_dataana['chrgah'], df_dataana['Time'], split_len)\n", " pkvlt_splt_temp = dats_interp(df_dataana['chrgah'], df_dataana['packvlt'], split_len)\n", " pkvlt_splt = savgol_filter(pkvlt_splt_temp, para_lvbo, 3)\n", " vlt_splce = savgol_filter(vlt_splce_temp, para_lvbo, 3)\n", " np_dff_vlt = np.diff(vlt_splce)\n", " np_dff_cap = np.diff(cap_frst)\n", " np_dff_dv_dq_temp = np.divide(np_dff_vlt, np_dff_cap)\n", " np_dff_dv_dq = np.insert(np_dff_dv_dq_temp, 0, np_dff_dv_dq_temp[0])\n", " \n", " df_dvdq_data = pd.DataFrame()\n", " df_dvdq_data['SOC[%]'] = soc_splt\n", " df_dvdq_data['Packcrnt'] = crnt_splt\n", " df_dvdq_data['frst'] = vlt_splce\n", " df_dvdq_data['max_T'] = maxt_splt\n", " df_dvdq_data['min_T'] = mint_splt\n", " df_dvdq_data['odo'] = odo_splt\n", " df_dvdq_data['chrgah'] = cap_frst\n", " df_dvdq_data['packvlt'] = pkvlt_splt\n", " df_dvdq_data['Time'] = pd.to_datetime(time_splt)#, utc=True, unit='ms').tz_convert('Asia/Shanghai')\n", " \n", " df_dvdq_data['dffsoc'] = df_dvdq_data['SOC[%]'].diff()\n", " df_dvdq_data['dffah'] = df_dvdq_data['chrgah'].diff()\n", " df_dvdq_data['dv_dq'] = np_dff_dv_dq\n", " df_dvdq_data['fr_vlt_dvdq'] = vlt_splce#电压\n", " df_dvdq_data.fillna(method = 'bfill', inplace = True , axis = 0)\n", " delta_soc = df_dvdq_data['SOC[%]'].iloc[-1] - df_dvdq_data['SOC[%]'].iloc[0]\n", " # print('电流稳定区充入SOC:', delta_soc)\n", " if all(df_dvdq_data['dffsoc'] < 3) and delta_soc > 10:\n", " df_dvdq_data['df_dq_lvb'] = savgol_filter(df_dvdq_data['dv_dq'], para_lvbo, 3, mode = 'nearest')#\n", " df_data = df_dvdq_data.copy()#loc[(df_dataana['SOC[%]'] > 30) & (df_dataana['SOC[%]'] < 70)]\n", " df_data.reset_index(drop = True, inplace = True)\n", " # fig1 = plt.figure()#figsize=(16,12)\n", " # # mpl.rcParams['font.sans-serif'] = ['KaiTi']#字体设置为楷体\n", " # mpl.rcParams['axes.unicode_minus'] = False #用来正常显示负号\n", " # plt.plot(df_data['SOC[%]'], df_data['df_dq_lvb'], color='k', lw = 2, ls = '-', marker = 'o', ms = 6, label = 'mav_vlt')\n", " # # plt.plot(df_data['SOC[%]'], df_data['dvsend-dah'], color='b', lw = 2, ls = '-.', marker = 's', ms = 6, label = 'sec_vlt')\n", " # # plt.plot(df_data['SOC[%]'], df_data['dvthrd-dah'], color='r', lw = 2, ls = '-.', marker = 's', ms = 6, label = 'thrd_vlt')\n", " # plt.ylabel(\"dv/dq\", fontsize=12)\n", " # # plt.xlabel(\"Soc(%)\", fontsize=12)\n", " # # plt.grid(axis = 'y', c = 'gray')\n", " # plt.xticks(rotation=45, fontsize=12)#\n", " # plt.yticks(fontsize=12)\n", " # # plt.ylim([-0.002, 0.02])\n", " # plt.legend(loc = 'best', fontsize=10)\n", " # # plt.show()\n", " # prename = df_datatp['sn'] + '_' + df_datatp['time_st'].replace(':', '-').replace(' ', '-')\n", " # plt.title(prename + '_dvq')\n", " # savepath = r'/home/liuzhongxiao/zlwl-algos/USER/liuzhongxiao/SOC_pre/chracter/picture//' + prename + 'dvdq.jpg'\n", " # plt.savefig(savepath, bbox_inches='tight', dpi=300)\n", " # plt.close()\n", " # fig1 = plt.figure()#figsize=(16,12)\n", " # # mpl.rcParams['font.sans-serif'] = ['KaiTi']#字体设置为楷体\n", " # mpl.rcParams['axes.unicode_minus'] = False #用来正常显示负号\n", " # plt.plot(df_data['SOC[%]'], df_data['fr_vlt_dvdq'], color='k', lw = 2, ls = '-', marker = 'o', ms = 6, label = 'mav_vlt')\n", " # # plt.plot(df_data['SOC[%]'], df_data['send'], color='b', lw = 2, ls = '-.', marker = 's', ms = 6, label = 'sec_vlt')\n", " # # plt.plot(df_data['SOC[%]'], df_data['thrd'], color='r', lw = 2, ls = '-.', marker = 's', ms = 6, label = 'thrd_vlt')\n", " # plt.ylabel(\"Volt(V)\", fontsize=12)\n", " # # plt.xlabel(\"Soc(%)\", fontsize=12)\n", " # # plt.grid(axis = 'y', c = 'gray')\n", " # plt.xticks(rotation=45, fontsize=12)#\n", " # plt.yticks(fontsize=12)\n", " # # plt.ylim([-0.002, 0.02])\n", " # plt.legend(loc = 'best', fontsize=10)\n", " # # plt.show()\n", " # # prename = df_datatp['sn'] + '-' + df_datatp['time_st'].replace(':', '-').replace(' ', '-')\n", " # plt.title(prename + '_dvq')\n", " # savepath = r'/home/liuzhongxiao/zlwl-algos/USER/liuzhongxiao/SOC_pre/chracter/picture//' + prename + 'vlt.jpg'\n", " # plt.savefig(savepath, bbox_inches='tight', dpi=300)\n", " # plt.close()\n", " # df_data.to_csv(r'/home/liuzhongxiao/project/zlwl-algos/USER/liuzhongxiao/SOC_pre/chracter/data//' + prename + 'vlt_data.csv', index=False, encoding='GB18030')\n", " if len(df_data) > 10:\n", " cellvltname = ['fr_vlt_dvdq']#, 'send', 'thrd'\n", " cellvltahname = ['df_dq_lvb']#, 'dffsendvlt', 'dffthdvlt'\n", " for itemnum in range(0, 1):\n", " snchrcter = []\n", " np_vlt_ori = np.array(df_data[cellvltahname[itemnum]])#dffminvlt\n", " np_vltori_smth = savgol_filter(np_vlt_ori, para_lvbo, 3)\n", " rcoumax, peak_indexmax, rcoumin, peak_indexmin = find_peak_triangleNum(np_vltori_smth, 7)#, rcoumin, peak_indexmin\n", " if (len(peak_indexmax) > 0) and (len(peak_indexmin) > 0):\n", " peak_fst = np_vltori_smth[peak_indexmax[0]]\n", " botm_fst = np_vltori_smth[peak_indexmin[0]]\n", " pkbtmratfst = botm_fst/peak_fst\n", " else:\n", " peak_fst = -1\n", " if (peak_fst>0):#and (botm_fst>0) and (abs(pkbtmratfst) >= 0.2) and (abs(pkbtmratfst) <= 0.8)\n", " maxindex = peak_indexmax[0]\n", " maxsoc = np.array(df_data['SOC[%]'])[maxindex]\n", " snchrcter.append(itemsn)\n", " snchrcter.append(df_data.loc[0, 'Time'])\n", " snchrcter.append(np.array(df_data[cellvltname[itemnum]])[maxindex])#电压\n", " snchrcter.append(maxsoc)\n", " snchrcter.append(1)\n", " snchrcter.append(np.array(df_data['max_T'])[maxindex])#最大电芯温度 \n", " snchrcter.append(np.array(df_data['min_T'])[maxindex])#最大电芯温度\n", " snchrcter.append(round(np.array(df_data['Packcrnt'])[maxindex]/pack_capty, 3))#倍率\n", " snchrcter.append(df_data['odo'].iloc[0])#里程\n", " snchrcter.append(np.array(df_data['packvlt'])[maxindex])#里程\n", " dvsocchrcter.append(snchrcter)\n", "df_chracter_ofc_temp = pd.DataFrame(dvsocchrcter)\n", "if not df_chracter_ofc_temp.empty:\n", " setcolumns = ['sn', 'Time', 'frstvlt', 'frstsoc', 'pkbtmfst', 'frstmaxT', 'frstminT', 'rate', 'odo', 'packvlt']\n", " df_chracter_ofc_temp.columns = setcolumns\n", " df_chracter_ofc = df_chracter_ofc_temp[(df_chracter_ofc_temp['frstsoc'] < 60) & (df_chracter_ofc_temp['frstsoc'] > 40)]\n", " df_chracter_ofc.reset_index(drop = True, inplace=True)\n", " df_chracter_ofc.to_csv('/home/liuzhongxiao/zlwl-algos/USER/liuzhongxiao/SOC_pre/chracter/' + 'SOC_chracterV.csv',index=False,encoding='GB18030')" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import sys\n", "from sklearn.datasets import load_iris\n", "from sklearn.neural_network import MLPRegressor\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.metrics import r2_score\n", "from sklearn.preprocessing import StandardScaler\n", "# 文件的名字 \n", "# 禁用科学计数法 \n", "pd.set_option('float_format', lambda x: '%.3f' % x) \n", "np.set_printoptions(suppress=True, threshold=sys.maxsize) \n", "# 得到的DataFrame分别为总价、面积、房间、客厅、年份 \n", "df_chracter_ofc = pd.read_csv('/home/liuzhongxiao/zlwl-algos/USER/liuzhongxiao/SOC_pre/chracter/' + 'SOC_chracterV.csv', encoding='GB18030')\n", "df_chracter_ofc['rate'] = abs(df_chracter_ofc['rate'])\n", "dataori = df_chracter_ofc.loc[df_chracter_ofc['rate'] > 0.0]#.iloc[50:]#& (datatp['maxsoc'] <=65) & (datatp['maxsoc'] >=50)\n", "# dataori2 = datatp.loc[(datatp['rate'] >= 0.4) & (datatp['rate'] < 0.8) & (abs(datatp['maxsoc']) < 50) & (abs(datatp['maxsoc']) > 48)]\n", "dataori.reset_index(drop = True, inplace = True)\n", "#------------------------最小电压训练集-测试集\n", "DataArray = dataori.values \n", "Y = DataArray[:, 3] #4SOC\n", "X = DataArray[:, [2,5,6,7,8,9]] #2,3,5,7,8,9,10#2,7,9,4,10\n", "X = np.array(X)#转化为array,自变量 \n", "Y = np.array(Y)#转化为array,因变量soc \n", "# data = np.concatenate((X, Y.reshape(-1, 1)), axis=1)\n", "\n", "# scaler = StandardScaler()\n", "# # scaler.fit(X)\n", "# data_scaled = scaler.fit_transform(data)\n", "# X_train_nor = data_scaled[:, :-1]\n", "# Y_train_nor = data_scaled[:, -1]\n", "scaler_x = StandardScaler()\n", "scaler_y = StandardScaler()\n", "\n", "X_train_scaled = scaler_x.fit_transform(X)\n", "y_train_scaled = scaler_y.fit_transform(Y.reshape(-1, 1))\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X_train_scaled, y_train_scaled, test_size=0.1, random_state=12)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "训练集长度 380\n", "测试集长度 43\n" ] } ], "source": [ "print('训练集长度', len(X_train))\n", "print('测试集长度', len(X_test))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import time\n", "layer = []\n", "sizer = []\n", "transcore = []\n", "tstscort = []\n", "k = 1\n", "for i in range(3, 43):#43\n", " for j in range(3, 51):#51\n", " X_train, X_test, y_train, y_test = train_test_split(X_train_scaled, y_train_scaled, test_size=0.1, random_state=j)\n", " \n", " X_train = X_train.astype('float')\n", " y_train = y_train.astype('float')\n", " \n", " pf = MLPRegressor(solver='lbfgs', hidden_layer_sizes=[i,j], random_state=i, activation = 'logistic')#\n", " # print(X_train)\n", " performance = pf.fit(X_train, y_train)\n", "\n", " y_pred_train = pf.predict(X_train)\n", " y_pred_test = pf.predict(X_test)\n", "\n", " layer.append(i)\n", " sizer.append(j)\n", " trainscore = performance.score(X_train, y_train)\n", " testscore = performance.score(X_test, y_test)\n", " transcore.append(trainscore)\n", " tstscort.append(testscore)\n", " if k % 100 == 0:\n", " print(k)\n", " k += 1\n", "# print('运行时间是:', str(time.time() - timest))\n", "# print(\"训练集合上R^2 = {:.3f}\".format(performance.score(X_train, y_train)))\n", "# print(\"测试集合上R^2 = {:.3f} \".format(performance.score(X_test, y_test)))\n", "df_rslt = pd.DataFrame()\n", "df_rslt['layer'] = layer\n", "df_rslt['sizer'] = sizer\n", "df_rslt['transcore'] = transcore\n", "df_rslt['testscore'] = tstscort\n", "df_good_rlt = df_rslt[df_rslt['testscore'] > 0.8]\n", "print(df_good_rlt)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " layer sizer transcore testscore\n", "916 22 7 0.800 0.022\n", "1349 31 8 0.815 -0.117\n", "1394 32 5 0.802 -0.005\n", "1396 32 7 0.825 -0.174\n", "1402 32 13 0.804 0.088\n", "1589 36 8 0.805 -0.200\n", "1829 41 8 0.804 -0.277\n" ] } ], "source": [ "print(df_rslt[(df_rslt['transcore'] > 0.8)])#(df_rslt['testscore'] > 0.8) & " ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/opt/module/anaconda2022-10/envs/py3916/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:1623: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", " y = column_or_1d(y, warn=True)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "训练集合上R^2 = 0.975\n", "测试集合上R^2 = 0.975 \n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/opt/module/anaconda2022-10/envs/py3916/lib/python3.9/site-packages/sklearn/neural_network/_multilayer_perceptron.py:541: ConvergenceWarning: lbfgs failed to converge (status=1):\n", "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", "\n", "Increase the number of iterations (max_iter) or scale the data as shown in:\n", " https://scikit-learn.org/stable/modules/preprocessing.html\n", " self.n_iter_ = _check_optimize_result(\"lbfgs\", opt_res, self.max_iter)\n" ] } ], "source": [ "X_train, X_test, y_train, y_test = train_test_split(X_train_scaled, y_train_scaled, test_size=0.1, random_state=40)\n", "\n", "X_train = X_train.astype('float')\n", "y_train = y_train.astype('float')\n", "\n", "pf = MLPRegressor(solver='lbfgs', hidden_layer_sizes=[40,49], random_state=49, activation = 'logistic')#\n", "# print(X_train)\n", "performance = pf.fit(X_train, y_train)\n", "\n", "y_pred_train = pf.predict(X_train)\n", "y_pred_test = pf.predict(X_test)\n", "\n", "\n", "# print('运行时间是:', str(time.time() - timest))\n", "print(\"训练集合上R^2 = {:.3f}\".format(performance.score(X_train, y_train)))\n", "print(\"测试集合上R^2 = {:.3f} \".format(performance.score(X_test, y_test)))" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[56.90911065 53.0697147 54.08329847 54.8004438 57.3834528 53.92522077\n", " 55.48896625 54.92496211 52.77484024 55.89596635 56.94147584 55.70687068\n", " 53.35485482 57.40107689 68.15631435 56.01757857 57.91526574 52.13072402\n", " 54.28170063 54.12921399 53.93795154 72.63796994 54.02544896 51.91530927\n", " 51.5310249 56.52926692 46.23514279 55.5375045 53.05149805 49.6708511\n", " 57.00899946 51.48024391 51.32274605 47.3573692 47.67892069 72.73428624\n", " 60.82452072 52.13444316 54.74873266 57.24324697 56.85977915 51.09061541\n", " 54.61391662 54.56708363 60.36344977 55.69618691 53.26545049 49.54446821\n", " 49.66050769 50.80413343 51.09979423 54.12874298 52.58466123 54.39010084\n", " 49.5838364 56.09036285 54.62828142 63.96768212 73.04294384 61.69498831\n", " 72.32439957 50.66573596 54.87632132 58.06111749 54.93586051 57.69198526]\n" ] } ], "source": [ "y_pred = scaler_y.inverse_transform(y_pred_train.reshape(-1, 1)).reshape(-1)\n", "print(y_pred)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['/home/liuzhongxiao/project/zlwl-algos/USER/liuzhongxiao/SOC_Fct/normorlized_y']" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import joblib\n", "joblib.dump(pf, r'/home/liuzhongxiao/project/zlwl-algos/USER/liuzhongxiao/SOC_Fct/Dnnmodel.pkl')\n", "joblib.dump(scaler_x, r'/home/liuzhongxiao/project/zlwl-algos/USER/liuzhongxiao/SOC_Fct/normorlized_x')\n", "joblib.dump(scaler_y, r'/home/liuzhongxiao/project/zlwl-algos/USER/liuzhongxiao/SOC_Fct/normorlized_y')\n", "\n", "# predict_soc = joblib.load(r'D:\\Work\\智锂物联\\03项目\\01合众\\03算法开发\\16LFP-soc修正\\02合众数据\\充电过程统计\\2101TS-高压筛选\\test2\\model\\Dnnmodel.pkl')\n", "# normalized_data = joblib.load(r'D:\\Work\\智锂物联\\03项目\\01合众\\03算法开发\\16LFP-soc修正\\02合众数据\\充电过程统计\\2101TS-高压筛选\\test2\\model\\normorlized')" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "/opt/module/anaconda2022-10/envs/py3916/lib/python3.9/site-packages/IPython/core/pylabtools.py:152: UserWarning: Glyph 30495 (\\N{CJK UNIFIED IDEOGRAPH-771F}) missing from current font.\n", " fig.canvas.print_figure(bytes_io, **kw)\n", "/opt/module/anaconda2022-10/envs/py3916/lib/python3.9/site-packages/IPython/core/pylabtools.py:152: UserWarning: Glyph 23454 (\\N{CJK UNIFIED IDEOGRAPH-5B9E}) missing from current font.\n", " fig.canvas.print_figure(bytes_io, **kw)\n", "/opt/module/anaconda2022-10/envs/py3916/lib/python3.9/site-packages/IPython/core/pylabtools.py:152: UserWarning: Glyph 20540 (\\N{CJK UNIFIED IDEOGRAPH-503C}) missing from current font.\n", " fig.canvas.print_figure(bytes_io, **kw)\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "/opt/module/anaconda2022-10/envs/py3916/lib/python3.9/site-packages/IPython/core/pylabtools.py:152: UserWarning: Glyph 39044 (\\N{CJK UNIFIED IDEOGRAPH-9884}) missing from current font.\n", " fig.canvas.print_figure(bytes_io, **kw)\n", "/opt/module/anaconda2022-10/envs/py3916/lib/python3.9/site-packages/IPython/core/pylabtools.py:152: UserWarning: Glyph 27979 (\\N{CJK UNIFIED IDEOGRAPH-6D4B}) missing from current font.\n", " fig.canvas.print_figure(bytes_io, **kw)\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "/opt/module/anaconda2022-10/envs/py3916/lib/python3.9/site-packages/IPython/core/pylabtools.py:152: UserWarning: Glyph 35823 (\\N{CJK UNIFIED IDEOGRAPH-8BEF}) missing from current font.\n", " fig.canvas.print_figure(bytes_io, **kw)\n", "/opt/module/anaconda2022-10/envs/py3916/lib/python3.9/site-packages/IPython/core/pylabtools.py:152: UserWarning: Glyph 24046 (\\N{CJK UNIFIED IDEOGRAPH-5DEE}) missing from current font.\n", " fig.canvas.print_figure(bytes_io, **kw)\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n", "findfont: Generic family 'sans-serif' not found because none of the following families were found: KaiTi\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "train = [y_train, y_test]\n", "prerlt = [y_pred_train, y_pred_test]\n", "y_pred_plt = scaler_y.inverse_transform(y_pred_test.reshape(-1, 1)).reshape(-1)#all_y_trues_max*np.std(all_y_trues) + all_y_trues_mean\n", "y_pred_real = scaler_y.inverse_transform(y_test.reshape(-1, 1)).reshape(-1)#ymax_pred*np.std(all_y_trues) + all_y_trues_mean\n", "prename = '训练集'\n", "import matplotlib.pyplot as plt \n", "from pylab import*\n", "fig1 = plt.figure()#figsize=(16,12)\n", "mpl.rcParams['font.sans-serif'] = ['KaiTi']#字体设置为楷体\n", "mpl.rcParams['axes.unicode_minus'] = False #用来正常显示负号\n", "plt.plot(range(len(y_pred_plt)),y_pred_real, color='k', lw = 2, ls = '-', marker = 'o', ms = 6, label = 'SOC真实值')\n", "plt.plot(range(len(y_pred_plt)), y_pred_plt, color='b', lw = 2, ls = '-.', marker = 's', ms = 6, label = 'SOC预测值')\n", "plt.ylabel(\"Soc(%)\", fontsize=12)\n", "# plt.xlabel(\"Soc(%)\", fontsize=12)\n", "plt.grid(axis = 'y', c = 'gray')\n", "plt.xticks(rotation=45, fontsize=12)#\n", "plt.yticks(fontsize=12)\n", "# plt.ylim([-0.002, 0.02])\n", "plt.legend(loc = 'best', fontsize=10)\n", "plt.show()\n", "# plt.title(prename + '的真实值与预测值')\n", "# savepath = r'D:\\Work\\智锂物联\\03项目\\01合众\\03算法开发\\16LFP-soc修正\\02合众数据\\充电过程统计\\2101TS-高压筛选\\test2\\\\' + prename + '中电压预测与真实值-95.jpg'\n", "# plt.savefig(savepath, dpi=300)\n", "# plt.close()\n", "fig1 = plt.figure()#figsize=(16,12)\n", "mpl.rcParams['font.sans-serif'] = ['KaiTi']#字体设置为楷体\n", "mpl.rcParams['axes.unicode_minus'] = False #用来正常显示负号\n", "plt.plot(range(len(y_pred_plt)), (y_pred_real - y_pred_plt), color='r', lw = 2, ls = '-.', marker = 's', ms = 6, label = 'SOC误差')\n", "plt.ylabel(\"Soc(%)\", fontsize=12)\n", "# plt.xlabel(\"Soc(%)\", fontsize=12)\n", "plt.grid(axis = 'y', c = 'gray')\n", "plt.xticks(rotation=45, fontsize=12)#\n", "plt.yticks(fontsize=12)\n", "# plt.ylim([-0.002, 0.02])\n", "plt.legend(loc = 'best', fontsize=10)\n", "plt.show()\n", "# plt.title(prename + '的预测差值')\n", "# savepath = r'D:\\Work\\智锂物联\\03项目\\01合众\\03算法开发\\16LFP-soc修正\\02合众数据\\充电过程统计\\2101TS-高压筛选\\test2\\\\' + prename + '中电压预测值误差-95.jpg'\n", "# plt.savefig(savepath, dpi=300)\n", "# plt.close()" ] } ], "metadata": { "kernelspec": { "display_name": "py3916", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.16" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }