#历史剩余充电时间统计 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')