IndexStaByOneCycle.py 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595
  1. <<<<<<< HEAD
  2. <<<<<<< HEAD
  3. '''
  4. 基于单一状态(一次行车、一次静置、一次充电)的指标统计库
  5. '''
  6. __author__ = 'lmstack'
  7. import CONFIGURE.PathSetting as PathSetting
  8. import sys
  9. sys.path.append(PathSetting.backend_path)
  10. import datetime
  11. import Tools
  12. import pandas as pd
  13. import numpy as np
  14. class IndexStaByOneCycle():
  15. def __init__(self):
  16. pass
  17. def odo_sta(self, odo_array):
  18. '''
  19. 一次行车行驶里程统计
  20. ---------输入参数------------
  21. odo_array : 一次行车对应的odo数据
  22. ---------输出参数------------
  23. 如果gps 可信,则输出本次行车的累积行驶里程;
  24. 否则,输出None
  25. '''
  26. odo_array = odo_array[~pd.isnull(odo_array)]
  27. if len(odo_array) > 0:
  28. return np.sum(odo_array)
  29. else:
  30. return None
  31. def capacity_sta(self, cap, soc_array, soh_array):
  32. '''
  33. 一个cycle净累积ah统计
  34. ---------输入参数------------
  35. cap : 标称容量
  36. soc_array : 一个cycle对应的soc数据
  37. soh_array : 一个cycle对应的soh数据
  38. ---------输出参数------------
  39. 本次行车的累积ah
  40. '''
  41. soc_array = soc_array[~pd.isnull(soc_array)]
  42. soh_array = soh_array[~pd.isnull(soh_array)]
  43. if len(soc_array) > 0 and len(soh_array) > 0 :
  44. return (soc_array[0] - soc_array[-1]) * np.mean(soh_array) * cap / 100.0 / 100.0
  45. else:
  46. return None
  47. def energy_sta(self, cap, soc_array, soh_array, volt_array):
  48. '''
  49. 一个cycle净累积能量统计
  50. ---------输入参数------------
  51. cap : 标称容量
  52. soc_array : 一个cycle对应的soc数据
  53. soh_array : 一个cycle对应的soh数据
  54. volt_array : 一个cycle对应的volt数据
  55. ---------输出参数------------
  56. 本次行车的累积能量
  57. '''
  58. soc_array = soc_array[~pd.isnull(soc_array)]
  59. soh_array = soh_array[~pd.isnull(soh_array)]
  60. volt_array = volt_array[~pd.isnull(volt_array)]
  61. if len(soc_array) > 0 and len(soh_array) > 0 and len(volt_array)>0:
  62. cap = self.capacity_sta(cap, soc_array, soh_array)
  63. return cap * np.mean(volt_array) / 1000.0
  64. else:
  65. return None
  66. def acc_time_sta(self, time_array):
  67. '''
  68. 一个cycle的持续时间
  69. ---------输入参数------------
  70. time_array : 一次cycle对应的time数据
  71. ---------输出参数------------
  72. 本cycle的持续时间,单位 h
  73. '''
  74. time_array = time_array[~pd.isnull(time_array)]
  75. if len(time_array) > 0:
  76. return float(abs(time_array[0] - time_array[-1]))/1e9/3600.0
  77. else:
  78. return None
  79. def mean_temp_sta(self, temp_array):
  80. '''
  81. 一个cycle的单体平均温度
  82. ---------输入参数------------
  83. temp_array : 一个cycle对应的某个单体的temp数据
  84. ---------输出参数------------
  85. 本cycle的单体平均温度
  86. '''
  87. temp_array = temp_array[~pd.isnull(temp_array)]
  88. if len(temp_array) > 0:
  89. return np.mean(temp_array)
  90. else:
  91. return None
  92. def temp_change_rate_sta(self, time_array, temp_array):
  93. '''
  94. 一个cycle的单体温度变化率
  95. ---------输入参数------------
  96. time_array : 一个cycle对应的time数据
  97. temp_array : 一个cycle对应的temp数据
  98. ---------输出参数------------
  99. 本cycle的单体温度变化率
  100. '''
  101. time_array = time_array[~pd.isnull(time_array)]
  102. temp_array = temp_array[~pd.isnull(temp_array)]
  103. if len(temp_array) > 0 and len(time_array) > 0:
  104. return abs(temp_array[0] - temp_array[-1])/\
  105. (float(abs(time_array[0] - time_array[-1]))/1e9/3600.0)
  106. else:
  107. return None
  108. def dischrg_max_pwr_sta(self, volt_array, crnt_array):
  109. '''
  110. 一个cycle的放电功率最大值
  111. ---------输入参数------------
  112. volt_array : 一个cycle对应的volt数据
  113. crnt_array : 一个cycle对应的crnt数据
  114. ---------输出参数------------
  115. 本cycle的放电功率最大值
  116. '''
  117. volt_array = volt_array[~pd.isnull(volt_array)]
  118. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  119. if len(volt_array) > 0 and len(crnt_array) > 0:
  120. pwr = volt_array * crnt_array / 1000.0
  121. pwr = pwr[pwr > 0]
  122. return np.max(pwr)
  123. else:
  124. return None
  125. def chrg_max_pwr_sta(self, volt_array, crnt_array):
  126. '''
  127. 一个cycle的充电功率最大值
  128. ---------输入参数------------
  129. volt_array : 一个cycle对应的volt数据
  130. crnt_array : 一个cycle对应的crnt数据
  131. ---------输出参数------------
  132. 本cycle的充电功率最大值
  133. '''
  134. volt_array = volt_array[~pd.isnull(volt_array)]
  135. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  136. if len(volt_array) > 0 and len(crnt_array) > 0:
  137. pwr = volt_array * crnt_array / 1000.0
  138. pwr = pwr[pwr < 0]
  139. return np.max(abs(pwr))
  140. else:
  141. return None
  142. def regen_count_sta(self, crnt_array):
  143. '''
  144. 一个行车cycle的regen 行数
  145. ---------输入参数------------
  146. crnt_array : 一个行车cycle对应的crnt数据
  147. ---------输出参数------------
  148. 本行车cycle的regen行数, 总行数
  149. '''
  150. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  151. if len(crnt_array) > 0:
  152. return len(crnt_array[crnt_array < -1]), len(crnt_array)
  153. else:
  154. return None, None
  155. def speed_sta(self, sum_odo, acc_time, speed_array):
  156. '''
  157. 一个行车cycle的平均速度和最大瞬时速度
  158. ---------输入参数------------
  159. sum_odo : 一个行车cycle对应的累积odo数据
  160. acc_time : 一个行车cycle对应的累积time数据
  161. speed_array : 一个行车cycle对应的speed数据
  162. ---------输出参数------------
  163. 本行车cycle的平均速度和最大速度
  164. '''
  165. speed_array = speed_array[~pd.isnull(speed_array)]
  166. if ~pd.isnull(sum_odo) and ~pd.isnull(acc_time) and len(speed_array) > 0:
  167. return sum_odo/acc_time, np.max(speed_array)
  168. else:
  169. return None, None
  170. def speed_sta(self, sum_odo, acc_time, speed_array):
  171. '''
  172. 一个行车cycle的平均速度和最大瞬时速度
  173. ---------输入参数------------
  174. sum_odo : 一个行车cycle对应的累积odo数据
  175. acc_time : 一个行车cycle对应的累积time数据
  176. speed_array : 一个行车cycle对应的speed数据
  177. ---------输出参数------------
  178. 本行车cycle的平均速度和最大速度
  179. '''
  180. speed_array = speed_array[~pd.isnull(speed_array)]
  181. if ~pd.isnull(sum_odo) and ~pd.isnull(acc_time) and len(speed_array) > 0:
  182. return sum_odo/acc_time, np.max(speed_array)
  183. else:
  184. =======
  185. '''
  186. 基于单一状态(一次行车、一次静置、一次充电)的指标统计库
  187. '''
  188. __author__ = 'lmstack'
  189. import CONFIGURE.PathSetting as PathSetting
  190. import sys
  191. sys.path.append(PathSetting.backend_path)
  192. import datetime
  193. import Tools
  194. import pandas as pd
  195. import numpy as np
  196. class IndexStaByOneCycle():
  197. def __init__(self):
  198. pass
  199. def odo_sta(self, odo_array):
  200. '''
  201. 一次行车行驶里程统计
  202. ---------输入参数------------
  203. odo_array : 一次行车对应的odo数据
  204. ---------输出参数------------
  205. 如果gps 可信,则输出本次行车的累积行驶里程;
  206. 否则,输出None
  207. '''
  208. odo_array = odo_array[~pd.isnull(odo_array)]
  209. if len(odo_array) > 0:
  210. return np.sum(odo_array)
  211. else:
  212. return None
  213. def capacity_sta(self, cap, soc_array, soh_array):
  214. '''
  215. 一个cycle净累积ah统计
  216. ---------输入参数------------
  217. cap : 标称容量
  218. soc_array : 一个cycle对应的soc数据
  219. soh_array : 一个cycle对应的soh数据
  220. ---------输出参数------------
  221. 本次行车的累积ah
  222. '''
  223. soc_array = soc_array[~pd.isnull(soc_array)]
  224. soh_array = soh_array[~pd.isnull(soh_array)]
  225. if len(soc_array) > 0 and len(soh_array) > 0 :
  226. return (soc_array[0] - soc_array[-1]) * np.mean(soh_array) * cap / 100.0 / 100.0
  227. else:
  228. return None
  229. def energy_sta(self, cap, soc_array, soh_array, volt_array):
  230. '''
  231. 一个cycle净累积能量统计
  232. ---------输入参数------------
  233. cap : 标称容量
  234. soc_array : 一个cycle对应的soc数据
  235. soh_array : 一个cycle对应的soh数据
  236. volt_array : 一个cycle对应的volt数据
  237. ---------输出参数------------
  238. 本次行车的累积能量
  239. '''
  240. soc_array = soc_array[~pd.isnull(soc_array)]
  241. soh_array = soh_array[~pd.isnull(soh_array)]
  242. volt_array = volt_array[~pd.isnull(volt_array)]
  243. if len(soc_array) > 0 and len(soh_array) > 0 and len(volt_array)>0:
  244. cap = self.capacity_sta(cap, soc_array, soh_array)
  245. return cap * np.mean(volt_array) / 1000.0
  246. else:
  247. return None
  248. def acc_time_sta(self, time_array):
  249. '''
  250. 一个cycle的持续时间
  251. ---------输入参数------------
  252. time_array : 一次cycle对应的time数据
  253. ---------输出参数------------
  254. 本cycle的持续时间,单位 h
  255. '''
  256. time_array = time_array[~pd.isnull(time_array)]
  257. if len(time_array) > 0:
  258. return float(abs(time_array[0] - time_array[-1]))/1e9/3600.0
  259. else:
  260. return None
  261. def mean_temp_sta(self, temp_array):
  262. '''
  263. 一个cycle的单体平均温度
  264. ---------输入参数------------
  265. temp_array : 一个cycle对应的某个单体的temp数据
  266. ---------输出参数------------
  267. 本cycle的单体平均温度
  268. '''
  269. temp_array = temp_array[~pd.isnull(temp_array)]
  270. if len(temp_array) > 0:
  271. return np.mean(temp_array)
  272. else:
  273. return None
  274. def temp_change_rate_sta(self, time_array, temp_array):
  275. '''
  276. 一个cycle的单体温度变化率
  277. ---------输入参数------------
  278. time_array : 一个cycle对应的time数据
  279. temp_array : 一个cycle对应的temp数据
  280. ---------输出参数------------
  281. 本cycle的单体温度变化率
  282. '''
  283. time_array = time_array[~pd.isnull(time_array)]
  284. temp_array = temp_array[~pd.isnull(temp_array)]
  285. if len(temp_array) > 0 and len(time_array) > 0:
  286. return abs(temp_array[0] - temp_array[-1])/\
  287. (float(abs(time_array[0] - time_array[-1]))/1e9/3600.0)
  288. else:
  289. return None
  290. def dischrg_max_pwr_sta(self, volt_array, crnt_array):
  291. '''
  292. 一个cycle的放电功率最大值
  293. ---------输入参数------------
  294. volt_array : 一个cycle对应的volt数据
  295. crnt_array : 一个cycle对应的crnt数据
  296. ---------输出参数------------
  297. 本cycle的放电功率最大值
  298. '''
  299. volt_array = volt_array[~pd.isnull(volt_array)]
  300. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  301. if len(volt_array) > 0 and len(crnt_array) > 0:
  302. pwr = volt_array * crnt_array / 1000.0
  303. pwr = pwr[pwr > 0]
  304. return np.max(pwr)
  305. else:
  306. return None
  307. def chrg_max_pwr_sta(self, volt_array, crnt_array):
  308. '''
  309. 一个cycle的充电功率最大值
  310. ---------输入参数------------
  311. volt_array : 一个cycle对应的volt数据
  312. crnt_array : 一个cycle对应的crnt数据
  313. ---------输出参数------------
  314. 本cycle的充电功率最大值
  315. '''
  316. volt_array = volt_array[~pd.isnull(volt_array)]
  317. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  318. if len(volt_array) > 0 and len(crnt_array) > 0:
  319. pwr = volt_array * crnt_array / 1000.0
  320. pwr = pwr[pwr < 0]
  321. return np.max(abs(pwr))
  322. else:
  323. return None
  324. def regen_count_sta(self, crnt_array):
  325. '''
  326. 一个行车cycle的regen 行数
  327. ---------输入参数------------
  328. crnt_array : 一个行车cycle对应的crnt数据
  329. ---------输出参数------------
  330. 本行车cycle的regen行数, 总行数
  331. '''
  332. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  333. if len(crnt_array) > 0:
  334. return len(crnt_array[crnt_array < -1]), len(crnt_array)
  335. else:
  336. return None, None
  337. def speed_sta(self, sum_odo, acc_time, speed_array):
  338. '''
  339. 一个行车cycle的平均速度和最大瞬时速度
  340. ---------输入参数------------
  341. sum_odo : 一个行车cycle对应的累积odo数据
  342. acc_time : 一个行车cycle对应的累积time数据
  343. speed_array : 一个行车cycle对应的speed数据
  344. ---------输出参数------------
  345. 本行车cycle的平均速度和最大速度
  346. '''
  347. speed_array = speed_array[~pd.isnull(speed_array)]
  348. if ~pd.isnull(sum_odo) and ~pd.isnull(acc_time) and len(speed_array) > 0:
  349. return sum_odo/acc_time, np.max(speed_array)
  350. else:
  351. return None, None
  352. def speed_sta(self, sum_odo, acc_time, speed_array):
  353. '''
  354. 一个行车cycle的平均速度和最大瞬时速度
  355. ---------输入参数------------
  356. sum_odo : 一个行车cycle对应的累积odo数据
  357. acc_time : 一个行车cycle对应的累积time数据
  358. speed_array : 一个行车cycle对应的speed数据
  359. ---------输出参数------------
  360. 本行车cycle的平均速度和最大速度
  361. '''
  362. speed_array = speed_array[~pd.isnull(speed_array)]
  363. if ~pd.isnull(sum_odo) and ~pd.isnull(acc_time) and len(speed_array) > 0:
  364. return sum_odo/acc_time, np.max(speed_array)
  365. else:
  366. >>>>>>> master
  367. =======
  368. '''
  369. 基于单一状态(一次行车、一次静置、一次充电)的指标统计库
  370. '''
  371. __author__ = 'lmstack'
  372. # import CONFIGURE.PathSetting as PathSetting
  373. # import sys
  374. # sys.path.append(PathSetting.backend_path)
  375. # import datetime
  376. # import Tools
  377. import pandas as pd
  378. import numpy as np
  379. class IndexStaByOneCycle():
  380. def __init__(self):
  381. pass
  382. def odo_sta(self, odo_array):
  383. '''
  384. 一次行车行驶里程统计
  385. ---------输入参数------------
  386. odo_array : 一次行车对应的odo数据
  387. ---------输出参数------------
  388. 如果gps 可信,则输出本次行车的累积行驶里程;
  389. 否则,输出None
  390. '''
  391. odo_array = odo_array[~pd.isnull(odo_array)]
  392. if len(odo_array) > 0:
  393. return np.sum(odo_array)
  394. else:
  395. return None
  396. def capacity_sta(self, cap, soc_array, soh_array):
  397. '''
  398. 一个cycle净累积ah统计
  399. ---------输入参数------------
  400. cap : 标称容量
  401. soc_array : 一个cycle对应的soc数据
  402. soh_array : 一个cycle对应的soh数据
  403. ---------输出参数------------
  404. 本次行车的累积ah
  405. '''
  406. soc_array = soc_array[~pd.isnull(soc_array)]
  407. soh_array = soh_array[~pd.isnull(soh_array)]
  408. if len(soc_array) > 0 and len(soh_array) > 0 :
  409. return (soc_array[0] - soc_array[-1]) * np.mean(soh_array) * cap / 100.0 / 100.0
  410. else:
  411. return None
  412. def energy_sta(self, cap, soc_array, soh_array, volt_array):
  413. '''
  414. 一个cycle净累积能量统计
  415. ---------输入参数------------
  416. cap : 标称容量
  417. soc_array : 一个cycle对应的soc数据
  418. soh_array : 一个cycle对应的soh数据
  419. volt_array : 一个cycle对应的volt数据
  420. ---------输出参数------------
  421. 本次行车的累积能量
  422. '''
  423. soc_array = soc_array[~pd.isnull(soc_array)]
  424. soh_array = soh_array[~pd.isnull(soh_array)]
  425. volt_array = volt_array[~pd.isnull(volt_array)]
  426. if len(soc_array) > 0 and len(soh_array) > 0 and len(volt_array)>0:
  427. cap = self.capacity_sta(cap, soc_array, soh_array)
  428. return cap * np.mean(volt_array) / 1000.0
  429. else:
  430. return None
  431. def acc_time_sta(self, time_array):
  432. '''
  433. 一个cycle的持续时间
  434. ---------输入参数------------
  435. time_array : 一次cycle对应的time数据
  436. ---------输出参数------------
  437. 本cycle的持续时间,单位 h
  438. '''
  439. time_array = time_array[~pd.isnull(time_array)]
  440. if len(time_array) > 0:
  441. return float(abs(time_array[0] - time_array[-1]))/1e9/3600.0
  442. else:
  443. return None
  444. def mean_temp_sta(self, temp_array):
  445. '''
  446. 一个cycle的单体平均温度
  447. ---------输入参数------------
  448. temp_array : 一个cycle对应的某个单体的temp数据
  449. ---------输出参数------------
  450. 本cycle的单体平均温度
  451. '''
  452. temp_array = temp_array[~pd.isnull(temp_array)]
  453. if len(temp_array) > 0:
  454. return np.mean(temp_array)
  455. else:
  456. return None
  457. def temp_change_rate_sta(self, time_array, temp_array):
  458. '''
  459. 一个cycle的单体温度变化率
  460. ---------输入参数------------
  461. time_array : 一个cycle对应的time数据
  462. temp_array : 一个cycle对应的temp数据
  463. ---------输出参数------------
  464. 本cycle的单体温度变化率
  465. '''
  466. time_array = time_array[~pd.isnull(time_array)]
  467. temp_array = temp_array[~pd.isnull(temp_array)]
  468. if len(temp_array) > 0 and len(time_array) > 0:
  469. return abs(temp_array[0] - temp_array[-1])/\
  470. (float(abs(time_array[0] - time_array[-1]))/1e9/3600.0)
  471. else:
  472. return None
  473. def dischrg_max_pwr_sta(self, volt_array, crnt_array):
  474. '''
  475. 一个cycle的放电功率最大值
  476. ---------输入参数------------
  477. volt_array : 一个cycle对应的volt数据
  478. crnt_array : 一个cycle对应的crnt数据
  479. ---------输出参数------------
  480. 本cycle的放电功率最大值
  481. '''
  482. volt_array = volt_array[~pd.isnull(volt_array)]
  483. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  484. if len(volt_array) > 0 and len(crnt_array) > 0:
  485. pwr = volt_array * crnt_array / 1000.0
  486. pwr = pwr[pwr > 0]
  487. return np.max(pwr)
  488. else:
  489. return None
  490. def chrg_max_pwr_sta(self, volt_array, crnt_array):
  491. '''
  492. 一个cycle的充电功率最大值
  493. ---------输入参数------------
  494. volt_array : 一个cycle对应的volt数据
  495. crnt_array : 一个cycle对应的crnt数据
  496. ---------输出参数------------
  497. 本cycle的充电功率最大值
  498. '''
  499. volt_array = volt_array[~pd.isnull(volt_array)]
  500. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  501. if len(volt_array) > 0 and len(crnt_array) > 0:
  502. pwr = volt_array * crnt_array / 1000.0
  503. pwr = pwr[pwr < 0]
  504. return np.max(abs(pwr))
  505. else:
  506. return None
  507. def regen_count_sta(self, crnt_array):
  508. '''
  509. 一个行车cycle的regen 行数
  510. ---------输入参数------------
  511. crnt_array : 一个行车cycle对应的crnt数据
  512. ---------输出参数------------
  513. 本行车cycle的regen行数, 总行数
  514. '''
  515. crnt_array = crnt_array[~pd.isnull(crnt_array)]
  516. if len(crnt_array) > 0:
  517. return len(crnt_array[crnt_array < -1]), len(crnt_array)
  518. else:
  519. return None, None
  520. def speed_sta(self, sum_odo, acc_time, speed_array):
  521. '''
  522. 一个行车cycle的平均速度和最大瞬时速度
  523. ---------输入参数------------
  524. sum_odo : 一个行车cycle对应的累积odo数据
  525. acc_time : 一个行车cycle对应的累积time数据
  526. speed_array : 一个行车cycle对应的speed数据
  527. ---------输出参数------------
  528. 本行车cycle的平均速度和最大速度
  529. '''
  530. speed_array = speed_array[~pd.isnull(speed_array)]
  531. if ~pd.isnull(sum_odo) and ~pd.isnull(acc_time) and len(speed_array) > 0:
  532. return sum_odo/acc_time, np.max(speed_array)
  533. else:
  534. return None, None
  535. def speed_sta(self, sum_odo, acc_time, speed_array):
  536. '''
  537. 一个行车cycle的平均速度和最大瞬时速度
  538. ---------输入参数------------
  539. sum_odo : 一个行车cycle对应的累积odo数据
  540. acc_time : 一个行车cycle对应的累积time数据
  541. speed_array : 一个行车cycle对应的speed数据
  542. ---------输出参数------------
  543. 本行车cycle的平均速度和最大速度
  544. '''
  545. speed_array = speed_array[~pd.isnull(speed_array)]
  546. if ~pd.isnull(sum_odo) and ~pd.isnull(acc_time) and len(speed_array) > 0:
  547. return sum_odo/acc_time, np.max(speed_array)
  548. else:
  549. >>>>>>> 65a87ae16013552e359df047df19f46fc4e6eb08
  550. return None, None