|
@@ -0,0 +1,90 @@
|
|
|
|
+from LIB.BACKEND import DBManager
|
|
|
|
+dbManager = DBManager.DBManager()
|
|
|
|
+import pandas as pd
|
|
|
|
+import numpy as np
|
|
|
|
+import datetime
|
|
|
|
+import seaborn as sns
|
|
|
|
+import matplotlib.pyplot as plt
|
|
|
|
+
|
|
|
|
+now_time=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') #type: str
|
|
|
|
+now_time=datetime.datetime.strptime(now_time,'%Y-%m-%d %H:%M:%S') #type: datetime
|
|
|
|
+start_time=now_time-datetime.timedelta(minutes=1)
|
|
|
|
+end_time=str(now_time)
|
|
|
|
+start_time=str(start_time)
|
|
|
|
+
|
|
|
|
+def makedataset(cellname):
|
|
|
|
+ dataset = pd.DataFrame()
|
|
|
|
+ for k in range(len(cellname)):
|
|
|
|
+ sn = cellname[k]
|
|
|
|
+ datasn = dbManager.get_data(sn=sn, start_time=start_time, end_time=end_time, data_groups=['bms'])
|
|
|
|
+ datasn = datasn['bms']
|
|
|
|
+ datasn['SN号']=sn
|
|
|
|
+ if len(datasn)>0:
|
|
|
|
+ datasn=datasn.iloc[-1]
|
|
|
|
+ dataset=dataset.append(datasn)
|
|
|
|
+ return dataset
|
|
|
|
+
|
|
|
|
+fileNamesPK504 = pd.read_excel('sn-20210903.xlsx',sheet_name='科易6060')
|
|
|
|
+fileNamesPK500 = pd.read_excel('sn-20210903.xlsx',sheet_name='科易6040')
|
|
|
|
+fileNamesPK502 = pd.read_excel('sn-20210903.xlsx',sheet_name='科易4840')
|
|
|
|
+fileNamesMGML = pd.read_excel('sn-20210903.xlsx',sheet_name='格林美-力信7255')
|
|
|
|
+fileNamesMGMC = pd.read_excel('sn-20210903.xlsx',sheet_name='格林美-CATL7255')
|
|
|
|
+fileNamesUDO = pd.read_excel('sn-20210903.xlsx',sheet_name='优旦7255')
|
|
|
|
+
|
|
|
|
+dataPK504=makedataset(list(fileNamesPK504['SN号']))
|
|
|
|
+dataPK500=makedataset(list(fileNamesPK500['SN号']))
|
|
|
|
+dataPK502=makedataset(list(fileNamesPK502['SN号']))
|
|
|
|
+dataMGML=makedataset(list(fileNamesMGML['SN号']))
|
|
|
|
+dataMGMC=makedataset(list(fileNamesMGMC['SN号']))
|
|
|
|
+dataUDO=makedataset(list(fileNamesUDO['SN号']))
|
|
|
|
+
|
|
|
|
+dataPK504=dataPK504[['SN号','单体温度1','单体温度2','单体温度3','单体温度4','其他温度2','其他温度4','其他温度5']]
|
|
|
|
+dataPK500=dataPK500[['SN号','单体温度1','单体温度2','单体温度3','单体温度4','其他温度2','其他温度3','其他温度4','其他温度5']]
|
|
|
|
+dataPK502=dataPK502[['SN号','单体温度1','单体温度2','单体温度3','单体温度4','其他温度2','其他温度3','其他温度4','其他温度5']]
|
|
|
|
+dataMGML=dataMGML[['SN号','单体温度1','单体温度2','单体温度3','单体温度4','其他温度1','其他温度3','其他温度4','其他温度5','其他温度6']]
|
|
|
|
+dataMGMC=dataMGMC[['SN号','单体温度1','单体温度2']]
|
|
|
|
+dataUDO=dataUDO[['SN号','单体温度1','单体温度2']]
|
|
|
|
+
|
|
|
|
+datatotal1=pd.concat([dataPK504,dataPK500,dataPK502])
|
|
|
|
+datatotal2=pd.concat([dataMGMC,dataUDO])
|
|
|
|
+
|
|
|
|
+def calculavg(datacell):
|
|
|
|
+ avg_temp=[]
|
|
|
|
+ max_temp=[]
|
|
|
|
+ min_temp=[]
|
|
|
|
+ for i in range(len(datacell)):
|
|
|
|
+ avg_temp.append(np.mean(datacell.iloc[i,1:]))
|
|
|
|
+ max_temp.append(max(datacell.iloc[i,1:]))
|
|
|
|
+ min_temp.append(min(datacell.iloc[i,1:]))
|
|
|
|
+ datacell['平均温度']=avg_temp
|
|
|
|
+ datacell['最高温度']=max_temp
|
|
|
|
+ datacell['最低温度']=min_temp
|
|
|
|
+ return datacell
|
|
|
|
+
|
|
|
|
+datatotal1=calculavg(datatotal1)
|
|
|
|
+datatotal2=calculavg(datatotal2)
|
|
|
|
+dataMGML=calculavg(dataMGML)
|
|
|
|
+datatotal1=datatotal1[datatotal1['最低温度']>-40]
|
|
|
|
+datatotal2=datatotal2[datatotal2['最低温度']>-40]
|
|
|
|
+dataMGML=dataMGML[dataMGML['最低温度']>-40]
|
|
|
|
+datatotal1=datatotal1.reset_index(drop=True)
|
|
|
|
+datatotal2=datatotal2.reset_index(drop=True)
|
|
|
|
+dataMGML=dataMGML.reset_index(drop=True)
|
|
|
|
+
|
|
|
|
+def boxplot_fill(col,a):
|
|
|
|
+ # 计算iqr:数据四分之三分位值与四分之一分位值的差
|
|
|
|
+ iqr = col.quantile(0.75)-col.quantile(0.25)
|
|
|
|
+ # 根据iqr计算异常值判断阈值
|
|
|
|
+ u_th = col.quantile(0.75) + a*iqr # 上界
|
|
|
|
+ l_th = col.quantile(0.25) - a*iqr # 下界
|
|
|
|
+ # 定义转换函数:如果数字大于上界则用上界值填充,小于下界则用下界值填充。
|
|
|
|
+ return l_th,u_th
|
|
|
|
+
|
|
|
|
+uptemp_out1=list(boxplot_fill(datatotal1['最高温度'],2.5))[1]
|
|
|
|
+uptemp_out2=list(boxplot_fill(datatotal2['最高温度'],5))[1]
|
|
|
|
+uptemp_out3=list(boxplot_fill(dataMGML['最高温度'],3.5))[1]
|
|
|
|
+
|
|
|
|
+anomalies1 = datatotal1[(datatotal1['最高温度']>uptemp_out1) & (datatotal1['最高温度']<120) & (datatotal1['最高温度']!=datatotal1['单体温度4']) & (datatotal1['单体温度4']<50) & (datatotal1['最高温度']!=datatotal1['其他温度2']) & (datatotal1['其他温度2']<50)]
|
|
|
|
+anomalies2 = datatotal2[(datatotal2['最高温度']>uptemp_out2) & (datatotal2['最高温度']<120)]
|
|
|
|
+anomalies3 = dataMGML[(dataMGML['最高温度']>uptemp_out3) & (dataMGML['最高温度']<120)]
|
|
|
|
+anomalies=pd.concat([anomalies1,anomalies2,anomalies3])
|