DataStatistics.py 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import numpy as np
  2. import pandas as pd
  3. from LIB.MIDDLE.SaftyCenter.Common import FeiShuData
  4. from LIB.MIDDLE.SaftyCenter.Common import DBDownload
  5. import time, datetime
  6. from datetime import timedelta
  7. from pandas.core.frame import DataFrame
  8. from apscheduler.schedulers.blocking import BlockingScheduler
  9. class DataSta():
  10. def __init__(self) -> None:
  11. pass
  12. def SaftyWarningSta(df_fltinfo,start_time,end_time):
  13. SftyPlt_Data_Total=len(df_fltinfo)#总报警数
  14. CS_Warning_Total_Finish=df_fltinfo[df_fltinfo['batpos']==1]
  15. CS_Warning_Total_Finish_Count=len(CS_Warning_Total_Finish) #平台报警总运维数
  16. SftyPlt_Data_day=len(df_fltinfo[df_fltinfo['start_time']>=start_time])#周总报警数
  17. CS_Warning_day_Finish=CS_Warning_Total_Finish[CS_Warning_Total_Finish['start_time']>=start_time]#周运维数
  18. CS_Warning_day_Finish_Count=len(CS_Warning_day_Finish)
  19. SftyPlt_EmgcyData_day=df_fltinfo[df_fltinfo['start_time']>=start_time] #紧急报警数
  20. SftyPlt_EmgcyData_day_Count=len(SftyPlt_EmgcyData_day[SftyPlt_EmgcyData_day['level']>3])
  21. SftyPlt_EmgcyData_day_Finish=SftyPlt_EmgcyData_day[SftyPlt_EmgcyData_day['batpos']==1]
  22. SftyPlt_EmgcyData_day_Finish_Count=len(SftyPlt_EmgcyData_day_Finish)
  23. if int(SftyPlt_Data_Total)>0:
  24. OprationManageRate=round(float(CS_Warning_day_Finish_Count/SftyPlt_Data_day)*100,2)
  25. else:
  26. OprationManageRate=100
  27. if int(SftyPlt_EmgcyData_day_Count)>0:
  28. OprationManageEmgcyRate=round(float(SftyPlt_EmgcyData_day_Finish_Count/SftyPlt_EmgcyData_day_Count)*100,2)
  29. else:
  30. OprationManageEmgcyRate=100
  31. PK504FltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('PK504')])
  32. PK502FltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('PK502')])
  33. PK500FltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('PK500')])
  34. MGMCLFltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('MGMCL')])
  35. MGMLXFltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('MGMLX')])
  36. # print('总报警数=',SftyPlt_Data_Total)
  37. # print('总完成运维数=',CS_Warning_Total_Finish_Count)
  38. # print('周报警数=',SftyPlt_Data_day)
  39. # print('周完成运维数=',CS_Warning_day_Finish_Count)
  40. # print('周紧急报警数=',SftyPlt_EmgcyData_day)
  41. # print('周紧急完成运维数=',SftyPlt_EmgcyData_day_Finish_Count)
  42. # print('周运维率=',OprationManageRate)
  43. # print('周紧急运维率=',OprationManageEmgcyRate)
  44. # print('PK504总报警=',PK504FltData_Count)
  45. # print('PK502总报警=',PK502FltData_Count)
  46. # print('PK500总报警=',PK500FltData_Count)
  47. # print('格林美总报警=',MGMCLFltData_Count)
  48. # print('自研总报警=',MGMLXFltData_Count)
  49. FltAlarmInfo=DataFrame(columns=['SftyPlt_Data_Total','CS_Warning_Total_Finish_Count','SftyPlt_Data_day','CS_Warning_day_Finish_Count','SftyPlt_EmgcyData_day','SftyPlt_EmgcyData_day_Finish_Count','OprationManageRate','OprationManageEmgcyRate'])
  50. Celltype=DataFrame(columns=['PK504','PK502','PK500','MGMCL','MGMLX'])
  51. FltAlarmInfo.loc[0]=[SftyPlt_Data_Total,CS_Warning_Total_Finish_Count,SftyPlt_Data_day,CS_Warning_day_Finish_Count,SftyPlt_EmgcyData_day_Count,SftyPlt_EmgcyData_day_Finish_Count,OprationManageRate,OprationManageEmgcyRate]
  52. Celltype.loc[0]=[PK504FltData_Count,PK502FltData_Count,PK500FltData_Count,MGMCLFltData_Count,MGMLXFltData_Count]
  53. return FltAlarmInfo,Celltype
  54. def WeekInfoSta(df_fltinfo,start_time,end_time):
  55. df_fltinfo=df_fltinfo[df_fltinfo['start_time']>=start_time]
  56. FaultLvlCount=DataFrame(columns=['level','count'])
  57. FaultLvlCount=df_fltinfo.groupby('level').count().T.head(1).T
  58. FaultLvlCount=FaultLvlCount.reset_index(drop=False)
  59. return FaultLvlCount
  60. def SftyWrngClsfy(df_fltinfo):
  61. DsnSaftyCode=[]
  62. DataSaftyCode=[]
  63. SamplingSaftyCode=[2,10,50,53,54,55,56]
  64. HvSaftyCode=[]
  65. SysSaftyCode=[]
  66. CellSaftyCode=[3,5,6,7,8,9,10,11,13,14,15,16,17,19,20,21,15,16,17,19,23,24,25,26,29,30,31,51,119]
  67. CtrlSatyCode=[4,12,18,20,21,22]
  68. StateSaftyCode=[27,28,52]
  69. DsnSaftyCodeCount=len(df_fltinfo[df_fltinfo['code'].isin(DsnSaftyCode)])
  70. DataSaftyCodeCount=len(df_fltinfo[df_fltinfo['code'].isin(DataSaftyCode)])
  71. HvSaftyCodeCount=len(df_fltinfo[df_fltinfo['code'].isin(HvSaftyCode)])
  72. SysSaftyCodeCount=len(df_fltinfo[df_fltinfo['code'].isin(SysSaftyCode)])
  73. SamplingSatyCount=len(df_fltinfo[df_fltinfo['code'].isin(SamplingSaftyCode)])
  74. CellSaftyCount=len(df_fltinfo[df_fltinfo['code'].isin(CellSaftyCode)])
  75. CtrlSaftyCodeCount=len(df_fltinfo[df_fltinfo['code'].isin(CtrlSatyCode)])
  76. StateSaftyCodeCount=len(df_fltinfo[df_fltinfo['code'].isin(StateSaftyCode)])
  77. SatftyCount=DataFrame(columns=['DsnSaftyCodeCount','DataSaftyCodeCount','HvSaftyCodeCount','SysSaftyCodeCount','SamplingSatyCount','CellSaftyCount','CtrlSaftyCodeCount','StateSaftyCodeCount'])
  78. SatftyCount.loc[0]=[DsnSaftyCodeCount,DataSaftyCodeCount,HvSaftyCodeCount,SysSaftyCodeCount,SamplingSatyCount,CellSaftyCount,CtrlSaftyCodeCount,StateSaftyCodeCount]
  79. # print('设计安全分数为',DsnSaftyCodeCount)
  80. # print('数据安全分数为',DataSaftyCodeCount)
  81. # print('高压安全分数为',HvSaftyCodeCount)
  82. # print('系统安全分数为',SysSaftyCodeCount)
  83. # print('采样安全分数为',SamplingSatyCount)
  84. # print('电芯安全分数为',CellSaftyCount)
  85. # print('控制安全分数为',CtrlSaftyCodeCount)
  86. # print('状态安全分数为',StateSaftyCodeCount)
  87. # print('---------------------------------------------------------------------------')
  88. return SatftyCount
  89. def AccumInfo(df_last_accum,df_FirstDataTime,end_time):
  90. df_last_accum=df_last_accum[~df_last_accum['devcode'].str.contains('TJMCL')]
  91. MaxAccumAh=df_last_accum['dsg_ahaccum'].max()
  92. TotalAccumAh=df_last_accum['dsg_ahaccum'].sum()
  93. PK504_Ah=df_last_accum[df_last_accum['devcode'].str.contains('PK504')]
  94. PK504_Ah_Max=(PK504_Ah['dsg_ahaccum'].max())/60
  95. PK502_Ah=df_last_accum[df_last_accum['devcode'].str.contains('PK502')]
  96. PK502_Ah_Max=(PK502_Ah['dsg_ahaccum'].max())/40
  97. PK500_Ah=df_last_accum[df_last_accum['devcode'].str.contains('PK500')]
  98. PK500_Ah_Max=(PK500_Ah['dsg_ahaccum'].max())/40
  99. MGMCL_Ah=df_last_accum[df_last_accum['devcode'].str.contains('MGMCL')]
  100. MGMCL_Ah_Max=(MGMCL_Ah['dsg_ahaccum'].max())/50
  101. MGMLX_Ah=df_last_accum[df_last_accum['devcode'].str.contains('MGMLX')]
  102. MGMLX_Ah_Max=(MGMLX_Ah['dsg_ahaccum'].max())/50
  103. MaxCycle=round(max(PK504_Ah_Max,PK502_Ah_Max,PK500_Ah_Max,MGMCL_Ah_Max,MGMLX_Ah_Max),0)
  104. deltatimeMax=0
  105. deltatime=DataFrame(columns=['runningdate'])
  106. df_FirstDataTime=df_FirstDataTime.dropna(how='any')
  107. df_FirstDataTime=df_FirstDataTime.reset_index(drop=False)
  108. for i in range(0,len(df_FirstDataTime)):
  109. End_time=datetime.datetime.now()
  110. df_FirstDataTime.loc[i,'first_data_time']=df_FirstDataTime.loc[i,'first_data_time'].strftime('%Y-%m-%d')
  111. df_FirstDataTime.loc[i,'first_data_time']=datetime.datetime.strptime(df_FirstDataTime.loc[i,'first_data_time'],'%Y-%m-%d')
  112. deltatime.loc[i,'runningdate']=(End_time-df_FirstDataTime.loc[i,'first_data_time'])
  113. deltatime.loc[i,'runningdate']= deltatime.loc[i,'runningdate'].total_seconds()/3600
  114. MaxRunningHour=int(deltatime['runningdate'].max())
  115. TotalRunHour=int(deltatime['runningdate'].sum())
  116. return MaxAccumAh,TotalAccumAh,MaxCycle,MaxRunningHour,TotalRunHour
  117. def FltBatPosition(df_last_pos,df_Diag_Ram):
  118. all_location_info=DataFrame(columns=['factory','product_id','lat','lon'])
  119. df_last_pos.rename(columns={'devcode':'product_id'},inplace=True)
  120. df_Diag_Ram_Pos=pd.concat([df_Diag_Ram,df_last_pos,df_last_pos]).drop_duplicates(subset=['product_id'],keep=False)
  121. df_Diag_Ram_Pos=df_Diag_Ram_Pos.reset_index(drop=True)
  122. for i in range(0,len(df_Diag_Ram_Pos)):
  123. pos_la_temp=df_last_pos[df_last_pos['product_id']==(df_Diag_Ram_Pos.loc[i,'product_id'])]
  124. all_location_info[i,'lat']=pos_la_temp['latitude']
  125. all_location_info[i,'lon']=pos_la_temp['longitude']
  126. all_location_info[i,'factory']='骑享'
  127. all_location_info[i,'product_id']=df_Diag_Ram.loc[i,'product_id']
  128. print(all_location_info)
  129. return all_location_info