DataStatistics.py 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import numpy as np
  2. import pandas as pd
  3. from User.eric.Common import FeiShuData
  4. from User.eric.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(CS_Data,df_fltinfo,start_time,end_time):
  13. SftyPlt_Data_Total=len(df_fltinfo)#总报警数
  14. CS_Warning_Total_Finish=CS_Data[CS_Data['状态']=='已完结']
  15. CS_Warning_Total_Finish=CS_Warning_Total_Finish[CS_Warning_Total_Finish['业务分类A']=='安全平台报警']
  16. CS_Warning_Total_Finish_Count=len(CS_Warning_Total_Finish) #平台报警总运维数
  17. SftyPlt_Data_day=len(df_fltinfo[df_fltinfo['start_time']>=start_time])#周总报警数
  18. CS_Warning_day_Finish=CS_Warning_Total_Finish[CS_Warning_Total_Finish['发生时间']>=start_time]#周运维数
  19. CS_Warning_day_Finish_Count=len(CS_Warning_day_Finish)
  20. SftyPlt_EmgcyData_day=df_fltinfo[df_fltinfo['start_time']>=start_time] #周紧急报警数
  21. SftyPlt_EmgcyData_day=len(SftyPlt_EmgcyData_day[SftyPlt_EmgcyData_day['level']>3])
  22. SftyPlt_EmgcyData_day_Finish=CS_Warning_day_Finish[CS_Warning_day_Finish['运维紧急程度']=='紧急']
  23. SftyPlt_EmgcyData_day_Finish_Count=len(SftyPlt_EmgcyData_day_Finish)
  24. if SftyPlt_Data_Total>0:
  25. OprationManageRate=round(float(CS_Warning_day_Finish_Count/SftyPlt_Data_day)*100,2)
  26. else:
  27. OprationManageRate=100
  28. if SftyPlt_EmgcyData_day>0:
  29. OprationManageEmgcyRate=round(float(SftyPlt_EmgcyData_day_Finish_Count/SftyPlt_EmgcyData_day)*100,2)
  30. else:
  31. OprationManageEmgcyRate=100
  32. PK504FltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('PK504')])
  33. PK502FltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('PK502')])
  34. PK500FltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('PK500')])
  35. MGMCLFltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('MGMCL')])
  36. MGMLXFltData_Count=len(df_fltinfo[df_fltinfo['product_id'].str.contains('MGMLX')])
  37. # print('总报警数=',SftyPlt_Data_Total)
  38. # print('总完成运维数=',CS_Warning_Total_Finish_Count)
  39. # print('周报警数=',SftyPlt_Data_day)
  40. # print('周完成运维数=',CS_Warning_day_Finish_Count)
  41. # print('周紧急报警数=',SftyPlt_EmgcyData_day)
  42. # print('周紧急完成运维数=',SftyPlt_EmgcyData_day_Finish_Count)
  43. # print('周运维率=',OprationManageRate)
  44. # print('周紧急运维率=',OprationManageEmgcyRate)
  45. # print('PK504总报警=',PK504FltData_Count)
  46. # print('PK502总报警=',PK502FltData_Count)
  47. # print('PK500总报警=',PK500FltData_Count)
  48. # print('格林美总报警=',MGMCLFltData_Count)
  49. # print('自研总报警=',MGMLXFltData_Count)
  50. 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'])
  51. Celltype=DataFrame(columns=['PK504','PK502','PK500','MGMCL','MGMLX'])
  52. FltAlarmInfo.loc[0]=[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]
  53. Celltype.loc[0]=[PK504FltData_Count,PK502FltData_Count,PK500FltData_Count,MGMCLFltData_Count,MGMLXFltData_Count]
  54. return FltAlarmInfo,Celltype
  55. def WeekInfoSta(df_fltinfo,start_time,end_time):
  56. df_fltinfo=df_fltinfo[df_fltinfo['start_time']>=start_time]
  57. FaultLvlCount=DataFrame(columns=['level','count'])
  58. FaultLvlCount=df_fltinfo.groupby('level').count().T.head(1).T
  59. FaultLvlCount=FaultLvlCount.reset_index(drop=False)
  60. return FaultLvlCount
  61. def SftyWrngClsfy(df_fltinfo):
  62. DsnSaftyCode=[]
  63. DataSaftyCode=[]
  64. SamplingSaftyCode=[2,10,50,53,54,55,56]
  65. HvSaftyCode=[]
  66. SysSaftyCode=[]
  67. 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]
  68. CtrlSatyCode=[4,12,18,20,21,22]
  69. StateSaftyCode=[27,28,52]
  70. DsnSaftyCodeCount=len(df_fltinfo[df_fltinfo['code'].isin(DsnSaftyCode)])
  71. DataSaftyCodeCount=len(df_fltinfo[df_fltinfo['code'].isin(DataSaftyCode)])
  72. HvSaftyCodeCount=len(df_fltinfo[df_fltinfo['code'].isin(HvSaftyCode)])
  73. SysSaftyCodeCount=len(df_fltinfo[df_fltinfo['code'].isin(SysSaftyCode)])
  74. SamplingSatyCount=len(df_fltinfo[df_fltinfo['code'].isin(SamplingSaftyCode)])
  75. CellSaftyCount=len(df_fltinfo[df_fltinfo['code'].isin(CellSaftyCode)])
  76. CtrlSaftyCodeCount=len(df_fltinfo[df_fltinfo['code'].isin(CtrlSatyCode)])
  77. StateSaftyCodeCount=len(df_fltinfo[df_fltinfo['code'].isin(StateSaftyCode)])
  78. SatftyCount=DataFrame(columns=['DsnSaftyCodeCount','DataSaftyCodeCount','HvSaftyCodeCount','SysSaftyCodeCount','SamplingSatyCount','CellSaftyCount','CtrlSaftyCodeCount','StateSaftyCodeCount'])
  79. SatftyCount.loc[0]=[DsnSaftyCodeCount,DataSaftyCodeCount,HvSaftyCodeCount,SysSaftyCodeCount,SamplingSatyCount,CellSaftyCount,CtrlSaftyCodeCount,StateSaftyCodeCount]
  80. # print('设计安全分数为',DsnSaftyCodeCount)
  81. # print('数据安全分数为',DataSaftyCodeCount)
  82. # print('高压安全分数为',HvSaftyCodeCount)
  83. # print('系统安全分数为',SysSaftyCodeCount)
  84. # print('采样安全分数为',SamplingSatyCount)
  85. # print('电芯安全分数为',CellSaftyCount)
  86. # print('控制安全分数为',CtrlSaftyCodeCount)
  87. # print('状态安全分数为',StateSaftyCodeCount)
  88. # print('---------------------------------------------------------------------------')
  89. return SatftyCount
  90. def AccumInfo(df_last_accum,df_FirstDataTime,end_time):
  91. df_last_accum=df_last_accum[~df_last_accum['devcode'].str.contains('TJMCL')]
  92. MaxAccumAh=df_last_accum['dsg_ahaccum'].max()
  93. TotalAccumAh=df_last_accum['dsg_ahaccum'].sum()
  94. PK504_Ah=df_last_accum[df_last_accum['devcode'].str.contains('PK504')]
  95. PK504_Ah_Max=(PK504_Ah['dsg_ahaccum'].max())/60
  96. PK502_Ah=df_last_accum[df_last_accum['devcode'].str.contains('PK502')]
  97. PK502_Ah_Max=(PK502_Ah['dsg_ahaccum'].max())/40
  98. PK500_Ah=df_last_accum[df_last_accum['devcode'].str.contains('PK500')]
  99. PK500_Ah_Max=(PK500_Ah['dsg_ahaccum'].max())/40
  100. MGMCL_Ah=df_last_accum[df_last_accum['devcode'].str.contains('MGMCL')]
  101. MGMCL_Ah_Max=(MGMCL_Ah['dsg_ahaccum'].max())/50
  102. MGMLX_Ah=df_last_accum[df_last_accum['devcode'].str.contains('MGMLX')]
  103. MGMLX_Ah_Max=(MGMLX_Ah['dsg_ahaccum'].max())/50
  104. MaxCycle=round(max(PK504_Ah_Max,PK502_Ah_Max,PK500_Ah_Max,MGMCL_Ah_Max,MGMLX_Ah_Max),0)
  105. deltatimeMax=0
  106. deltatime=DataFrame(columns=['runningdate'])
  107. df_FirstDataTime=df_FirstDataTime.dropna(how='any')
  108. df_FirstDataTime=df_FirstDataTime.reset_index(drop=False)
  109. for i in range(0,len(df_FirstDataTime)):
  110. End_time=datetime.datetime.now()
  111. df_FirstDataTime.loc[i,'first_data_time']=df_FirstDataTime.loc[i,'first_data_time'].strftime('%Y-%m-%d')
  112. df_FirstDataTime.loc[i,'first_data_time']=datetime.datetime.strptime(df_FirstDataTime.loc[i,'first_data_time'],'%Y-%m-%d')
  113. deltatime.loc[i,'runningdate']=(End_time-df_FirstDataTime.loc[i,'first_data_time'])
  114. deltatime.loc[i,'runningdate']= deltatime.loc[i,'runningdate'].total_seconds()/60
  115. MaxRunningHour=int(deltatime['runningdate'].max())
  116. TotalRunHour=int(deltatime['runningdate'].sum())
  117. return MaxAccumAh,TotalAccumAh,MaxCycle,MaxRunningHour,TotalRunHour