Repository for M.A.I.L system's analysis server.
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

kpi.py 5.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. import os
  2. import time
  3. import math
  4. import sys
  5. import numpy as np
  6. import pandas as pd
  7. from pandas import DataFrame as df
  8. from sklearn.cluster import DBSCAN
  9. import matplotlib.pyplot as plt
  10. ssd_dir = str(sys.argv[1])
  11. file_path = '/hdd/' + ssd_dir[5:]
  12. count = 1
  13. def get_quad(df):
  14. if df['x'] >= 0 and df['y'] >= 0:
  15. return 1
  16. elif df['x'] >= 0 and df['y'] < 0:
  17. return 2
  18. elif df['x'] < 0 and df['y'] < 0:
  19. return 3
  20. elif df['x'] < 0 and df['y'] >= 0:
  21. return 4
  22. def get_inc_num(df):
  23. global count
  24. prev_count = 0
  25. if abs(df['diff_diff']) > 0.0008:
  26. prev_count = df['inc_num']
  27. df['inc_num'] = count
  28. #print(prev_count)
  29. return count
  30. else:
  31. if prev_count != 0:
  32. count += 1
  33. df['inc_num'] = 0
  34. prev_count = df['inc_num']
  35. return 0
  36. else:
  37. df['inc_num'] = 0
  38. prev_count = df['inc_num']
  39. return 0
  40. def count_inc(df):
  41. e= 0
  42. count = 1
  43. prev_count = 0
  44. for x in df['diff_diff']:
  45. if abs(x) > 8:
  46. df['inc_num'][e] = count
  47. prev_count = count
  48. e +=1
  49. else:
  50. if prev_count != 0:
  51. count += 1
  52. df['inc_num'][e] = 0
  53. prev_count = 0
  54. e +=1
  55. else:
  56. df['inc_num'][e] = 0
  57. prev_count = 0
  58. e +=1
  59. def stroke_count(df):
  60. e = 0
  61. count = 1
  62. for x in df['diff_diff']:
  63. if x > 1.2:
  64. df['stroke_count'][e] = count
  65. e +=1
  66. else:
  67. df['stroke_count'][e] = 0
  68. e+=1
  69. def get_sqrt(df):
  70. e =0
  71. count = 1
  72. prev_x = 0.0
  73. prev_y = 0.0
  74. prev_z = 0.0
  75. for x in range(len(df)):
  76. df['sqrt'][e] = np.sqrt((df['x'][e] - prev_x) **2 + (df['y'][e] - prev_y) ** 2 +(df['z'][e] - prev_z) ** 2)
  77. prev_x = df['x'][e]
  78. prev_y = df['y'][e]
  79. prev_z = df['z'][e]
  80. e += 1
  81. def dist():
  82. file = os.path.join(file_path, 'coordinate.csv')
  83. norm = pd.read_csv(file)
  84. norm = norm.drop(norm.columns[0], axis=1)
  85. norm = norm.fillna(0)
  86. data = norm[['x', 'y', 'z']]
  87. norm['sqrt'] = 0.0
  88. get_sqrt(norm)
  89. #norm = norm.apply(lambda x:np.sqrt(x) if x.name in ['sqrt'] else x, axis =1)
  90. norm['diff'] = norm.diff()['sqrt']
  91. norm['diff_diff'] = norm.diff()['diff']
  92. norm['quad'] = norm.apply(get_quad, axis =1)
  93. norm = norm.fillna(0)
  94. norm['inc_num'] = 0
  95. #norm['inc_num'] = norm.apply(get_inc_num, axis = 1)
  96. count_inc(norm)
  97. norm['stroke_count'] = 0
  98. stroke_count(norm)
  99. print('num of inc')
  100. print(norm['inc_num'].unique())
  101. print('total stroke')
  102. #print(norm['stroke_count'].unique())
  103. print(norm)
  104. plt.plot(norm['frame'],norm['diff_diff'])
  105. plt.savefig('/sources/diff_diff.png')
  106. kpi = pd.DataFrame(index=range(0,1))
  107. quad_count = norm[norm['stroke_count'] != 0]
  108. quad1_c = quad_count[quad_count['quad'] == 1]
  109. quad2_c = quad_count[quad_count['quad'] == 2]
  110. quad3_c = quad_count[quad_count['quad'] == 3]
  111. quad4_c = quad_count[quad_count['quad'] == 4]
  112. print(len(quad1_c))
  113. print(len(quad2_c))
  114. print(len(quad3_c))
  115. print(len(quad4_c))
  116. print(quad1_c)
  117. kpi['PK'] = ssd_dir[5:]
  118. kpi['qaud1_c'] = len(quad1_c)
  119. kpi['qaud2_c'] = len(quad2_c)
  120. kpi['qaud3_c'] = len(quad3_c)
  121. kpi['qaud4_c'] = len(quad4_c)
  122. kpi['qaud1_s'] = quad1_c['sqrt'].mean() / 30
  123. kpi['qaud2_s'] = quad2_c['sqrt'].mean() / 30
  124. kpi['qaud3_s'] = quad3_c['sqrt'].mean() / 30
  125. kpi['qaud4_s'] = quad4_c['sqrt'].mean() / 30
  126. kpi['qaud1_d'] = quad1_c['sqrt'].mean() / 45
  127. kpi['qaud2_d'] = quad2_c['sqrt'].mean() / 45
  128. kpi['qaud3_d'] = quad3_c['sqrt'].mean() / 45
  129. kpi['qaud4_d'] = quad4_c['sqrt'].mean() / 45
  130. kpi_1 = {
  131. "stroke": [len(quad1_c),len(quad2_c),len(quad3_c),len(quad4_c)],
  132. "velocity": [quad1_c['sqrt'].mean() / 30, quad2_c['sqrt'].mean() / 30, quad3_c['sqrt'].mean() / 30, quad4_c['sqrt'].mean() / 30],
  133. "depth": [quad1_c['sqrt'].mean() / 45, quad2_c['sqrt'].mean() / 45, quad3_c['sqrt'].mean() / 45, quad4_c['sqrt'].mean() / 45]
  134. }
  135. print(kpi)
  136. val_list = []
  137. #PK =
  138. val_list.append(str(ssd_dir[5:-1]))
  139. #t_stroke =
  140. val_list.append(sum(kpi_1['stroke']))
  141. #t_vel
  142. val_list.append("{:.4f}".format(sum(kpi_1['velocity'])/4))
  143. #t_dep
  144. val_list.append("{:.4f}".format(sum(kpi_1['depth'])/4))
  145. #ud_s_rate =
  146. val_list.append("{:.4f}".format((kpi_1['stroke'][0] + kpi_1['stroke'][3] - kpi_1['stroke'][1] - kpi_1['stroke'][2]) / sum(kpi_1['stroke'])*100))
  147. #ud_v_rate =
  148. val_list.append("{:.4f}".format((kpi_1['velocity'][0] + kpi_1['velocity'][3] - kpi_1['velocity'][1] - kpi_1['velocity'][2])/2))
  149. #ud_d_rate =
  150. val_list.append("{:.4f}".format((kpi_1['depth'][0] + kpi_1['depth'][3] - kpi_1['depth'][1] - kpi_1['depth'][2])/2))
  151. #lr_s_rate =
  152. val_list.append("{:.4f}".format((kpi_1['stroke'][2] + kpi_1['stroke'][3] - kpi_1['stroke'][0] - kpi_1['stroke'][1]) / sum(kpi_1['stroke'])*100))
  153. #lr_v_rate =
  154. val_list.append("{:.4f}".format((kpi_1['velocity'][2] + kpi_1['velocity'][3] - kpi_1['velocity'][0] - kpi_1['velocity'][1])/2))
  155. #lr_d_rate =
  156. val_list.append("{:.4f}".format((kpi_1['depth'][2] + kpi_1['depth'][3] - kpi_1['depth'][0] - kpi_1['depth'][1])/2))
  157. print(val_list)
  158. dist()