self_define_def.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # %%
  2. import numpy as np
  3. import pandas as pd
  4. import json
  5. with open("input.json",'r') as f:
  6. json_data = json.load(f)
  7. json_data
  8. # %%
  9. # 定义加载数据并计算特征值的函数
  10. def load_and_calculate_features(json_data):
  11. # 定义计算统计指标的函数
  12. def _calculate_stats(data):
  13. # 确保数据是数值类型
  14. data = pd.to_numeric(data, errors='coerce')
  15. mean_value = np.mean(data)
  16. max_value = np.max(data)
  17. min_value = np.min(data)
  18. Xrms = np.sqrt(np.mean(data ** 2)) # 加速度均方根值(有效值)
  19. Xp = (max_value - min_value) / 2 # 峰值(单峰最大值)
  20. Xpp = max_value - min_value # 峰峰值
  21. Cf = Xp / Xrms # 峰值指标
  22. Sk = np.mean((data - mean_value) ** 3) / Xrms ** 3 # 歪度指标
  23. Sf = Xrms / mean_value # 波形指标
  24. If = Xp / np.mean(np.abs(data)) # 脉冲指标
  25. Xr = np.mean(np.sqrt(np.abs(data))) ** 2 # 方根幅值
  26. Ce = Xp / Xr # 裕度指标
  27. return {
  28. 'Xrms': Xrms,
  29. 'Mean': mean_value,
  30. 'Max': max_value,
  31. 'Min': min_value,
  32. 'Xp': Xp,
  33. 'Xpp': Xpp,
  34. 'Cf': Cf,
  35. 'Sk': Sk,
  36. 'Ce': Ce,
  37. 'If': If,
  38. 'Sf': Sf,
  39. }
  40. if json_data['start_index'] is not None and json_data['end_index'] is not None:
  41. df = pd.DataFrame(json_data['data'])
  42. start_index = json_data['start_index']
  43. end_index = json_data['end_index']
  44. selected_data = df[(df['index'] >= start_index) & (df['index'] <= end_index)]
  45. stats = _calculate_stats(selected_data['value'])
  46. for feature, value in stats.items():
  47. df[feature] = np.where((df['index'] >= start_index) & (df['index'] <= end_index), value, 0)
  48. json_output = df.to_json(date_format='iso', orient='records', force_ascii=False)
  49. else:
  50. df = pd.DataFrame(json_data['data'])
  51. stats = _calculate_stats(df['value'])
  52. for feature, value in stats.items():
  53. df[feature] = value
  54. json_output = df.to_json(date_format='iso', orient='records', force_ascii=False)
  55. return json_output
  56. # load_and_calculate_features(json_data)