algorithm.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from .DataStream import EMchPosmap
  2. import numpy as np
  3. import logging
  4. logger = logging.getLogger('calcer')
  5. def calc_chratios(data,pos_map,start,end):
  6. view = data[[pos_map.succ_count, pos_map.fail_count, pos_map.commit_count], :]
  7. view = view[:, start:end]
  8. all = np.cumsum(view, axis=1)
  9. succ = all[0, :]
  10. commit = all[0, :] + all[1, :]
  11. commit += 0.0000001
  12. y = succ / commit
  13. y = y.ravel()
  14. return int(all[0, -1]), int(all[0, -1] + all[1, -1]), y
  15. def calc_mchratios(data,pos_map,start,end):
  16. view = data[[pos_map.succ_count, pos_map.fail_count, pos_map.submit_count], :]
  17. view = view[:, start:end]
  18. all = np.cumsum(view, axis=1)
  19. succ = all[0, :]
  20. commit = all[0, :] + all[1, :]
  21. commit += 0.0000001
  22. y = succ / commit
  23. y = y.ravel()
  24. return int(all[0, -1]), int(all[0, -1] + all[1, -1]), y
  25. def calc_morder_send(data, pos_map: type(EMchPosmap), start: int, end: int):
  26. view = data[:, start:end]
  27. sums = np.sum(view, axis=1)
  28. all_return = sums[pos_map.succ_mch_amounts] + sums[pos_map.fail_mch_amounts] + 0.0000001
  29. ratio = sums[pos_map.succ_mch_amounts] / all_return
  30. send_count = sums[pos_map.submit_count] - sums[pos_map.succ_count] - sums[pos_map.fail_count]
  31. send_amounts = sums[pos_map.submit_amounts] - sums[pos_map.succ_mch_amounts] - sums[pos_map.fail_mch_amounts]
  32. lack_amounts = send_amounts * ratio
  33. return send_count, sums[pos_map.submit_count], sums[pos_map.succ_count], sums[pos_map.fail_count], sums[pos_map.submit_amounts], \
  34. sums[pos_map.succ_mch_amounts], sums[pos_map.fail_mch_amounts], send_amounts, lack_amounts
  35. def calc_morder_lack(data, pos_map: type(EMchPosmap), start: int, end: int):
  36. view = data[:, start:end]
  37. sums = np.sum(view, axis=1)
  38. all_return = sums[pos_map.succ_count] + sums[pos_map.fail_count] + 0.0000001
  39. ratio = sums[pos_map.succ_count] / all_return
  40. send_count = sums[pos_map.submit_count] - sums[pos_map.succ_count] - sums[pos_map.fail_count]
  41. send_amounts = sums[pos_map.submit_amounts] - sums[pos_map.succ_mch_amounts] - sums[pos_map.fail_mch_amounts]
  42. lack_amounts = send_amounts * ratio
  43. logger.info("send_count=%d send_amounts=%.4f ratio=%.4f lack_amounts=%.4f", send_count, send_amounts, ratio, lack_amounts)
  44. return send_amounts, lack_amounts