Browse Source

历史剩余充电时间 V1_0_0

zhuxi 3 years ago
parent
commit
01afbc2cd1

+ 89 - 0
LIB/MIDDLE/RemainChargeTime/V1_0_0/MakeDataSet_History.py

@@ -0,0 +1,89 @@
+#历史剩余充电时间统计 2021-10
+
+from LIB.BACKEND.Tools import Tools
+from LIB.BACKEND.DataPreProcess import DataPreProcess
+import pandas as pd
+import numpy as np
+import os
+import math
+import datetime
+from time import strftime,gmtime
+from LIB.BACKEND import DBManager
+dbManager = DBManager.DBManager()
+
+#将时间戳由 "%Y-%m-%d %H:%M:%S" 切换为 sec
+def timeconvert(df):  
+    df.index=range(len(df))
+    time=df.时间戳
+    timeInSeries=[]
+    time2=datetime.datetime.strptime(time[0],"%Y-%m-%d %H:%M:%S")
+    for k in range(len(time)):
+        time1=datetime.datetime.strptime(time[k],"%Y-%m-%d %H:%M:%S")    
+        t=(time1-time2)
+        timeInSeries.append(t.days*86400+t.seconds)
+    df.loc[:,'相对时间']=pd.DataFrame(timeInSeries,columns=['相对时间'])
+    return df
+
+#构建新数据表统计剩余充电时间
+def data_handle(df_in):
+    #数据预处理
+    df_in=timeconvert(df_in)  
+    dfOut_temp=DataPreProcess.data_split_by_status(DataPreProcess, df_in, drive_interval_threshold=120, charge_interval_threshold=300,drive_stand_threshold=120, charge_stand_threshold=300)
+    dfOut=dfOut_temp.copy()
+    df_charge=dfOut[dfOut['data_status']=='charge']
+    unique_status_idx=np.unique(df_charge.data_split_by_status.values)
+    #计算剩余充电时间
+    df_statisticsInfo=pd.DataFrame()
+    for n in unique_status_idx:
+        df_charge_buff=df_charge[df_charge.data_split_by_status==n]
+        if(np.max(df_charge_buff['SOC[%]'].values[-1])==100):    #满充状态数据提取    
+            times=df_charge_buff['相对时间'].values
+            times1=times[:-1]
+            times2=times[1:]
+            delta=times2-times1
+            if(np.max(delta)<50):
+                times_inv=[times[-1]-t for t in times ]
+                df_charge_buff.loc[:,'剩余充电时间[sec]']=times_inv
+                times_hms=[]
+                for k in list(range(len(times_inv))):
+                    time_hms=strftime("%H:%M:%S", gmtime(df_charge_buff.loc[:,'剩余充电时间[sec]'].values[k]))
+                    times_hms.append(time_hms)
+                df_charge_buff.loc[:,'剩余充电时间[时分秒]']=times_hms
+                df_dataset_temp=df_charge_buff.drop(['GSM信号','故障等级','故障代码','外电压','绝缘电阻','总输出状态','上锁状态','充电状态','加热状态','单体压差','单体均衡状态','相对时间','data_split_by_crnt','data_split_by_status','data_status'],axis=1)
+                df_statisticsInfo=df_statisticsInfo.append(df_dataset_temp)
+                #简化特征
+                list_col=list(df_statisticsInfo)
+                list1=[s for s in list_col if '单体电压' in s]
+                list2=[s for s in list_col if '单体温度' in s]
+                list3=[s for s in list_col if '其他温度' in s]
+                list_v=['单体电压'+str(i) for i in range(1,len(list1)+1)] 
+                list_T=['单体温度'+str(i) for i in range(1,len(list2)+1)] 
+                A_cellVolt=df_statisticsInfo[list_v].values
+                celVolt_max=np.max(A_cellVolt,axis=1)
+                celVolt_min=np.min(A_cellVolt,axis=1)
+                A_cellTemp=df_statisticsInfo[list_T].values
+                celTemp_max=np.max(A_cellTemp,axis=1)
+                celTemp_min=np.min(A_cellTemp,axis=1) 
+                df_statisticsInfo.loc[:,'最高单体电压[V]']=celVolt_max
+                df_statisticsInfo.loc[:,'最高单体温度[℃]']=celTemp_max
+                df_statisticsInfo.loc[:,'最低单体温度[℃]']=celTemp_min
+                df_statisticsInfo=df_statisticsInfo.drop(list_v,axis=1)
+                df_statisticsInfo=df_statisticsInfo.drop(list_T,axis=1) 
+                df_statisticsInfo=df_statisticsInfo.drop(['其他温度'+str(i) for i in range(1,len(list3)+1)],axis=1)
+    return(df_statisticsInfo)
+
+#Dataset
+data_sn=pd.read_excel('sn-20210903.xlsx',sheet_name='sn-20210903')
+fileNames=data_sn['sn']
+df_dataset=pd.DataFrame()
+for k in range(2): 
+    df_data = dbManager.get_data(sn=fileNames[k], start_time='2021-10-01 00:00:00', end_time='2021-11-01 00:00:00', data_groups=['bms'])
+    if len(df_data)==0:
+        continue
+    dataIn = df_data['bms']
+    dataIn=data_handle(dataIn)
+    dataIn['sn']=fileNames[k]
+    df_dataset=df_dataset.append(dataIn)
+
+df_dataset.to_csv('df_datatest.csv')
+

BIN
LIB/MIDDLE/RemainChargeTime/V1_0_0/历史剩余充电时间表单.xlsx