IndexStaByOneCycle.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  1. <<<<<<< HEAD
  2. '''
  3. 基于单一状态(一次行车、一次静置、一次充电)的指标统计库
  4. '''
  5. __author__ = 'lmstack'
  6. import CONFIGURE.PathSetting as PathSetting
  7. import sys
  8. sys.path.append(PathSetting.backend_path)
  9. import datetime
  10. import Tools
  11. import pandas as pd
  12. import numpy as np
  13. class IndexStaByOneCycle():
  14. def __init__(self):
  15. pass
  16. def odo_sta(self, odo_array):
  17. '''
  18. 一次行车行驶里程统计
  19. ---------输入参数------------
  20. odo_array : 一次行车对应的odo数据
  21. ---------输出参数------------
  22. 如果gps 可信,则输出本次行车的累积行驶里程;
  23. 否则,输出None
  24. '''
  25. odo_array = odo_array[~pd.isnull(odo_array)]
  26. if len(odo_array) > 0:
  27. return np.sum(odo_array)
  28. else:
  29. return None
  30. def capacity_sta(self, cap, soc_array, soh_array):
  31. '''
  32. 一个cycle净累积ah统计
  33. ---------输入参数------------
  34. cap : 标称容量
  35. soc_array : 一个cycle对应的soc数据
  36. soh_array : 一个cycle对应的soh数据
  37. ---------输出参数------------
  38. 本次行车的累积ah
  39. '''
  40. soc_array = soc_array[~pd.isnull(soc_array)]
  41. soh_array = soh_array[~pd.isnull(soh_array)]
  42. if len(soc_array) > 0 and len(soh_array) > 0 :
  43. return (soc_array[0] - soc_array[-1]) * np.mean(soh_array) * cap / 100.0 / 100.0
  44. else:
  45. return None
  46. def energy_sta(self, cap, soc_array, soh_array, volt_array):
  47. '''
  48. 一个cycle净累积能量统计
  49. ---------输入参数------------
  50. cap : 标称容量
  51. soc_array : 一个cycle对应的soc数据
  52. soh_array : 一个cycle对应的soh数据
  53. volt_array : 一个cycle对应的volt数据
  54. ---------输出参数------------
  55. 本次行车的累积能量
  56. '''
  57. soc_array = soc_array[~pd.isnull(soc_array)]
  58. soh_array = soh_array[~pd.isnull(soh_array)]
  59. volt_array = volt_array[~pd.isnull(volt_array)]
  60. if len(soc_array) > 0 and len(soh_array) > 0 and len(volt_array)>0:
  61. cap = self.capacity_sta(cap, soc_array, soh_array)
  62. return cap * np.mean(volt_array) / 1000.0
  63. else:
  64. return None
  65. def acc_time_sta(self, time_array):
  66. '''
  67. 一个cycle的持续时间
  68. ---------输入参数------------
  69. time_array : 一次cycle对应的time数据
  70. ---------输出参数------------
  71. 本cycle的持续时间,单位 h
  72. '''
  73. time_array = time_array[~pd.isnull(time_array)]
  74. if len(time_array) > 0:
  75. return float(abs(time_array[0] - time_array[-1]))/1e9/3600.0
  76. else:
  77. return None
  78. def mean_temp_sta(self, temp_array):
  79. '''
  80. 一个cycle的单体平均温度
  81. ---------输入参数------------
  82. temp_array : 一个cycle对应的某个单体的temp数据
  83. ---------输出参数------------
  84. 本cycle的单体平均温度
  85. '''
  86. temp_array = temp_array[~pd.isnull(temp_array)]
  87. if len(temp_array) > 0:
  88. return np.mean(temp_array)
  89. else:
  90. return None
  91. def temp_change_rate_sta(self, time_array, temp_array):
  92. '''
  93. 一个cycle的单体温度变化率
  94. ---------输入参数------------
  95. time_array : 一个cycle对应的time数据
  96. temp_array : 一个cycle对应的temp数据
  97. ---------输出参数------------
  98. 本cycle的单体温度变化率
  99. '''
  100. time_array = time_array[~pd.isnull(time_array)]
  101. temp_array = temp_array[~pd.isnull(temp_array)]
  102. if len(temp_array) > 0 and len(time_array) > 0:
  103. return abs(temp_array[0] - temp_array[-1])/\
  104. (float(abs(time_array[0] - time_array[-1]))/1e9/3600.0)
  105. else:
  106. return None
  107. def dischrg_max_pwr_sta(self, volt_array, crnt_array):
  108. '''
  109. 一个cycle的放电功率最大值
  110. ---------输入参数------------
  111. volt_array : 一个cycle对应的volt数据
  112. crnt_array : 一个cycle对应的crnt数据
  113. ---------输出参数------------
  114. 本cycle的放电功率最大值
  115. '''
  116. volt_array = volt_array[~pd.isnull(volt_array)]
  117. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  118. if len(volt_array) > 0 and len(crnt_array) > 0:
  119. pwr = volt_array * crnt_array / 1000.0
  120. pwr = pwr[pwr > 0]
  121. return np.max(pwr)
  122. else:
  123. return None
  124. def chrg_max_pwr_sta(self, volt_array, crnt_array):
  125. '''
  126. 一个cycle的充电功率最大值
  127. ---------输入参数------------
  128. volt_array : 一个cycle对应的volt数据
  129. crnt_array : 一个cycle对应的crnt数据
  130. ---------输出参数------------
  131. 本cycle的充电功率最大值
  132. '''
  133. volt_array = volt_array[~pd.isnull(volt_array)]
  134. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  135. if len(volt_array) > 0 and len(crnt_array) > 0:
  136. pwr = volt_array * crnt_array / 1000.0
  137. pwr = pwr[pwr < 0]
  138. return np.max(abs(pwr))
  139. else:
  140. return None
  141. def regen_count_sta(self, crnt_array):
  142. '''
  143. 一个行车cycle的regen 行数
  144. ---------输入参数------------
  145. crnt_array : 一个行车cycle对应的crnt数据
  146. ---------输出参数------------
  147. 本行车cycle的regen行数, 总行数
  148. '''
  149. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  150. if len(crnt_array) > 0:
  151. return len(crnt_array[crnt_array < -1]), len(crnt_array)
  152. else:
  153. return None, None
  154. def speed_sta(self, sum_odo, acc_time, speed_array):
  155. '''
  156. 一个行车cycle的平均速度和最大瞬时速度
  157. ---------输入参数------------
  158. sum_odo : 一个行车cycle对应的累积odo数据
  159. acc_time : 一个行车cycle对应的累积time数据
  160. speed_array : 一个行车cycle对应的speed数据
  161. ---------输出参数------------
  162. 本行车cycle的平均速度和最大速度
  163. '''
  164. speed_array = speed_array[~pd.isnull(speed_array)]
  165. if ~pd.isnull(sum_odo) and ~pd.isnull(acc_time) and len(speed_array) > 0:
  166. return sum_odo/acc_time, np.max(speed_array)
  167. else:
  168. return None, None
  169. def speed_sta(self, sum_odo, acc_time, speed_array):
  170. '''
  171. 一个行车cycle的平均速度和最大瞬时速度
  172. ---------输入参数------------
  173. sum_odo : 一个行车cycle对应的累积odo数据
  174. acc_time : 一个行车cycle对应的累积time数据
  175. speed_array : 一个行车cycle对应的speed数据
  176. ---------输出参数------------
  177. 本行车cycle的平均速度和最大速度
  178. '''
  179. speed_array = speed_array[~pd.isnull(speed_array)]
  180. if ~pd.isnull(sum_odo) and ~pd.isnull(acc_time) and len(speed_array) > 0:
  181. return sum_odo/acc_time, np.max(speed_array)
  182. else:
  183. =======
  184. '''
  185. 基于单一状态(一次行车、一次静置、一次充电)的指标统计库
  186. '''
  187. __author__ = 'lmstack'
  188. # import CONFIGURE.PathSetting as PathSetting
  189. # import sys
  190. # sys.path.append(PathSetting.backend_path)
  191. # import datetime
  192. # import Tools
  193. import pandas as pd
  194. import numpy as np
  195. class IndexStaByOneCycle():
  196. def __init__(self):
  197. pass
  198. def odo_sta(self, odo_array):
  199. '''
  200. 一次行车行驶里程统计
  201. ---------输入参数------------
  202. odo_array : 一次行车对应的odo数据
  203. ---------输出参数------------
  204. 如果gps 可信,则输出本次行车的累积行驶里程;
  205. 否则,输出None
  206. '''
  207. odo_array = odo_array[~pd.isnull(odo_array)]
  208. if len(odo_array) > 0:
  209. return np.sum(odo_array)
  210. else:
  211. return None
  212. def capacity_sta(self, cap, soc_array, soh_array):
  213. '''
  214. 一个cycle净累积ah统计
  215. ---------输入参数------------
  216. cap : 标称容量
  217. soc_array : 一个cycle对应的soc数据
  218. soh_array : 一个cycle对应的soh数据
  219. ---------输出参数------------
  220. 本次行车的累积ah
  221. '''
  222. soc_array = soc_array[~pd.isnull(soc_array)]
  223. soh_array = soh_array[~pd.isnull(soh_array)]
  224. if len(soc_array) > 0 and len(soh_array) > 0 :
  225. return (soc_array[0] - soc_array[-1]) * np.mean(soh_array) * cap / 100.0 / 100.0
  226. else:
  227. return None
  228. def energy_sta(self, cap, soc_array, soh_array, volt_array):
  229. '''
  230. 一个cycle净累积能量统计
  231. ---------输入参数------------
  232. cap : 标称容量
  233. soc_array : 一个cycle对应的soc数据
  234. soh_array : 一个cycle对应的soh数据
  235. volt_array : 一个cycle对应的volt数据
  236. ---------输出参数------------
  237. 本次行车的累积能量
  238. '''
  239. soc_array = soc_array[~pd.isnull(soc_array)]
  240. soh_array = soh_array[~pd.isnull(soh_array)]
  241. volt_array = volt_array[~pd.isnull(volt_array)]
  242. if len(soc_array) > 0 and len(soh_array) > 0 and len(volt_array)>0:
  243. cap = self.capacity_sta(cap, soc_array, soh_array)
  244. return cap * np.mean(volt_array) / 1000.0
  245. else:
  246. return None
  247. def acc_time_sta(self, time_array):
  248. '''
  249. 一个cycle的持续时间
  250. ---------输入参数------------
  251. time_array : 一次cycle对应的time数据
  252. ---------输出参数------------
  253. 本cycle的持续时间,单位 h
  254. '''
  255. time_array = time_array[~pd.isnull(time_array)]
  256. if len(time_array) > 0:
  257. return float(abs(time_array[0] - time_array[-1]))/1e9/3600.0
  258. else:
  259. return None
  260. def mean_temp_sta(self, temp_array):
  261. '''
  262. 一个cycle的单体平均温度
  263. ---------输入参数------------
  264. temp_array : 一个cycle对应的某个单体的temp数据
  265. ---------输出参数------------
  266. 本cycle的单体平均温度
  267. '''
  268. temp_array = temp_array[~pd.isnull(temp_array)]
  269. if len(temp_array) > 0:
  270. return np.mean(temp_array)
  271. else:
  272. return None
  273. def temp_change_rate_sta(self, time_array, temp_array):
  274. '''
  275. 一个cycle的单体温度变化率
  276. ---------输入参数------------
  277. time_array : 一个cycle对应的time数据
  278. temp_array : 一个cycle对应的temp数据
  279. ---------输出参数------------
  280. 本cycle的单体温度变化率
  281. '''
  282. time_array = time_array[~pd.isnull(time_array)]
  283. temp_array = temp_array[~pd.isnull(temp_array)]
  284. if len(temp_array) > 0 and len(time_array) > 0:
  285. return abs(temp_array[0] - temp_array[-1])/\
  286. (float(abs(time_array[0] - time_array[-1]))/1e9/3600.0)
  287. else:
  288. return None
  289. def dischrg_max_pwr_sta(self, volt_array, crnt_array):
  290. '''
  291. 一个cycle的放电功率最大值
  292. ---------输入参数------------
  293. volt_array : 一个cycle对应的volt数据
  294. crnt_array : 一个cycle对应的crnt数据
  295. ---------输出参数------------
  296. 本cycle的放电功率最大值
  297. '''
  298. volt_array = volt_array[~pd.isnull(volt_array)]
  299. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  300. if len(volt_array) > 0 and len(crnt_array) > 0:
  301. pwr = volt_array * crnt_array / 1000.0
  302. pwr = pwr[pwr > 0]
  303. return np.max(pwr)
  304. else:
  305. return None
  306. def chrg_max_pwr_sta(self, volt_array, crnt_array):
  307. '''
  308. 一个cycle的充电功率最大值
  309. ---------输入参数------------
  310. volt_array : 一个cycle对应的volt数据
  311. crnt_array : 一个cycle对应的crnt数据
  312. ---------输出参数------------
  313. 本cycle的充电功率最大值
  314. '''
  315. volt_array = volt_array[~pd.isnull(volt_array)]
  316. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  317. if len(volt_array) > 0 and len(crnt_array) > 0:
  318. pwr = volt_array * crnt_array / 1000.0
  319. pwr = pwr[pwr < 0]
  320. return np.max(abs(pwr))
  321. else:
  322. return None
  323. def regen_count_sta(self, crnt_array):
  324. '''
  325. 一个行车cycle的regen 行数
  326. ---------输入参数------------
  327. crnt_array : 一个行车cycle对应的crnt数据
  328. ---------输出参数------------
  329. 本行车cycle的regen行数, 总行数
  330. '''
  331. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  332. if len(crnt_array) > 0:
  333. return len(crnt_array[crnt_array < -1]), len(crnt_array)
  334. else:
  335. return None, None
  336. def speed_sta(self, sum_odo, acc_time, speed_array):
  337. '''
  338. 一个行车cycle的平均速度和最大瞬时速度
  339. ---------输入参数------------
  340. sum_odo : 一个行车cycle对应的累积odo数据
  341. acc_time : 一个行车cycle对应的累积time数据
  342. speed_array : 一个行车cycle对应的speed数据
  343. ---------输出参数------------
  344. 本行车cycle的平均速度和最大速度
  345. '''
  346. speed_array = speed_array[~pd.isnull(speed_array)]
  347. if ~pd.isnull(sum_odo) and ~pd.isnull(acc_time) and len(speed_array) > 0:
  348. return sum_odo/acc_time, np.max(speed_array)
  349. else:
  350. return None, None
  351. def speed_sta(self, sum_odo, acc_time, speed_array):
  352. '''
  353. 一个行车cycle的平均速度和最大瞬时速度
  354. ---------输入参数------------
  355. sum_odo : 一个行车cycle对应的累积odo数据
  356. acc_time : 一个行车cycle对应的累积time数据
  357. speed_array : 一个行车cycle对应的speed数据
  358. ---------输出参数------------
  359. 本行车cycle的平均速度和最大速度
  360. '''
  361. speed_array = speed_array[~pd.isnull(speed_array)]
  362. if ~pd.isnull(sum_odo) and ~pd.isnull(acc_time) and len(speed_array) > 0:
  363. return sum_odo/acc_time, np.max(speed_array)
  364. else:
  365. >>>>>>> 65a87ae16013552e359df047df19f46fc4e6eb08
  366. return None, None