Browse Source

自定义分析算法first-commit

chenhongyan1989 5 months ago
commit
b50441764f
5 changed files with 324 additions and 0 deletions
  1. 0 0
      api/__init__.py
  2. 109 0
      api/define_api.log
  3. 59 0
      api/define_api_test.py
  4. 86 0
      api/self_define_api.py
  5. 70 0
      api/self_define_def.py

+ 0 - 0
api/__init__.py


+ 109 - 0
api/define_api.log

@@ -0,0 +1,109 @@
+nohup: ignoring input
+INFO:     Started server process [32374]
+INFO:     Waiting for application startup.
+INFO:     Application startup complete.
+INFO:     Uvicorn running on http://0.0.0.0:8666 (Press CTRL+C to quit)
+WARNING:  Invalid HTTP request received.
+INFO:     192.168.50.235:49438 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:56413 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:51461 - "GET /CalculateFeatures/ HTTP/1.1" 405 Method Not Allowed
+INFO:     192.168.50.201:51461 - "GET /favicon.ico HTTP/1.1" 404 Not Found
+INFO:     192.168.50.201:30410 - "GET /CalculateFeatures/ HTTP/1.1" 405 Method Not Allowed
+INFO:     192.168.50.201:30314 - "POST /CalculateFeatures/ HTTP/1.1" 422 Unprocessable Entity
+INFO:     192.168.50.201:53491 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:16807 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:16974 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:19835 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.235:42066 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.235:43174 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.235:45574 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.235:45780 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.201:61796 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:57490 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:58198 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:19328 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:65037 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:49921 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:50499 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:57869 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+/data/source_code/self_define/self_define_api.py:30: RuntimeWarning: invalid value encountered in scalar divide
+  Cf = Xp / Xrms  # 峰值指标
+/data/source_code/self_define/self_define_api.py:31: RuntimeWarning: invalid value encountered in scalar divide
+  Sk = np.mean((data - mean_value) ** 3) / Xrms ** 3  # 歪度指标
+/data/source_code/self_define/self_define_api.py:32: RuntimeWarning: invalid value encountered in scalar divide
+  Sf = Xrms / mean_value  # 波形指标
+/data/source_code/self_define/self_define_api.py:33: RuntimeWarning: invalid value encountered in scalar divide
+  If = Xp / np.mean(np.abs(data))  # 脉冲指标
+/data/source_code/self_define/self_define_api.py:35: RuntimeWarning: invalid value encountered in scalar divide
+  Ce = Xp / Xr  # 裕度指标
+INFO:     192.168.50.201:58487 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:46011 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:49529 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:46541 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:51360 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:51457 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:51573 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:54581 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:47307 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:55127 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:55303 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:55669 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:56223 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:56468 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:64676 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.235:52316 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.235:55826 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.201:49616 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.235:56370 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.235:56880 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.235:57122 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.201:58324 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:11711 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:14606 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:61339 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:63162 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:64220 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:18817 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:19865 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:50271 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:50507 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:25753 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:26486 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:50190 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:50702 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:52481 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:27736 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:63838 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:46651 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:25214 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:53633 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:29581 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:43568 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:51568 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:49823 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:53426 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:58702 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:55261 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:13818 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:58715 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:8874 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.201:28568 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.235:37106 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.201:56850 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK
+INFO:     192.168.50.235:38458 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.235:38828 - "POST /sAlgorithm/CalculateFeatures/ HTTP/1.0" 404 Not Found
+INFO:     192.168.50.235:38934 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.235:39336 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.235:40256 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.235:40420 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.235:41054 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.235:41764 - "POST /CalculateFeatures/ HTTP/1.0" 200 OK
+INFO:     192.168.50.235:37332 - "POST /sAlgorithm/CalculateFeatures/ HTTP/1.0" 404 Not Found
+INFO:     192.168.50.235:37374 - "POST /sAlgorithm/CalculateFeatures/ HTTP/1.0" 404 Not Found
+INFO:     192.168.50.235:37390 - "POST /sAlgorithm/CalculateFeatures/ HTTP/1.0" 404 Not Found
+INFO:     192.168.50.235:37608 - "POST /sAlgorithm/CalculateFeatures/ HTTP/1.0" 404 Not Found
+INFO:     192.168.50.235:53870 - "POST /sAlgorithm/CalculateFeatures/ HTTP/1.0" 404 Not Found
+INFO:     192.168.50.201:60865 - "POST /sAlgorithm/CalculateFeatures/ HTTP/1.1" 404 Not Found
+INFO:     192.168.50.201:62140 - "POST /sAlgorithm/CalculateFeatures/ HTTP/1.1" 404 Not Found
+INFO:     192.168.50.201:62415 - "POST /sAlgorithm/CalculateFeatures/ HTTP/1.1" 404 Not Found
+INFO:     192.168.50.201:12724 - "POST /CalculateFeatures/ HTTP/1.1" 200 OK

+ 59 - 0
api/define_api_test.py

@@ -0,0 +1,59 @@
+import requests
+import json
+
+url = 'http://172.17.0.1:8666/CalculateFeatures/'
+
+
+data = {
+    "data":[
+    {
+        "index": 1,
+        "value": 503
+    },
+    {
+        "index": 2,
+        "value": 519
+    },
+    {
+        "index": 2,
+        "value": 527
+    },
+    {
+        "index": 3,
+        "value": 509
+    },
+    {
+        "index": 3,
+        "value": 527
+    },
+    {
+        "index": 4,
+        "value": 558
+    },
+    {
+        "index": 5,
+        "value": 552
+    },
+    {
+        "index": 6,
+        "value": 576
+    }
+],
+
+"start_index":None,
+
+"end_index":None
+
+}
+
+json_data = json.dumps(data)
+
+headers = {
+    'Content-Type': 'application/json'
+}
+
+response = requests.post(url, headers=headers, data=json_data)
+if response.status_code == 200:
+    print(response.json())
+else:
+    print(f"Error: {response.text}")

+ 86 - 0
api/self_define_api.py

@@ -0,0 +1,86 @@
+from fastapi import FastAPI, HTTPException, Body
+from pydantic import BaseModel
+import numpy as np
+import pandas as pd
+import json
+import uvicorn
+from typing import Optional, List
+
+
+app = FastAPI()
+
+class DataRequest(BaseModel):
+    
+    data: List
+    start_index: Optional[int] = None
+    end_index: Optional[int] = None
+
+def load_and_calculate_features(json_data):
+
+    # 定义计算统计指标的函数
+    def _calculate_stats(data):
+        # 确保数据是数值类型
+        data = pd.to_numeric(data, errors='coerce')
+        mean_value = np.mean(data)
+        max_value = np.max(data)
+        min_value = np.min(data)
+        Xrms = np.sqrt(np.mean(data ** 2))  # 加速度均方根值(有效值)
+        Xp = (max_value - min_value) / 2  # 峰值(单峰最大值)
+        Xpp = max_value - min_value  # 峰峰值
+        Cf = Xp / Xrms  # 峰值指标
+        Sk = np.mean((data - mean_value) ** 3) / Xrms ** 3  # 歪度指标
+        Sf = Xrms / mean_value  # 波形指标
+        If = Xp / np.mean(np.abs(data))  # 脉冲指标
+        Xr = np.mean(np.sqrt(np.abs(data))) ** 2  # 方根幅值
+        Ce = Xp / Xr  # 裕度指标
+
+        return {
+            'Xrms': Xrms,
+            'Mean': mean_value,
+            'Max': max_value,
+            'Min': min_value,
+            'Xp': Xp,
+            'Xpp': Xpp,
+            'Cf': Cf,
+            'Sk': Sk,
+            'Ce': Ce,
+            'If': If,
+            'Sf': Sf,
+        }
+        
+    if json_data['start_index'] is not None and json_data['end_index'] is not None:
+        df = pd.DataFrame(json_data['data'])
+        start_index = json_data['start_index']
+        end_index = json_data['end_index']
+        selected_data = df[(df['index'] >= start_index) & (df['index'] <= end_index)]
+
+        stats = _calculate_stats(selected_data['value'])
+
+        for feature, value in stats.items():
+            df[feature] = np.where((df['index'] >= start_index) & (df['index'] <= end_index), value, 0)
+
+        json_output = df.to_json(date_format='iso', orient='records', force_ascii=False)
+
+    else:
+        df = pd.DataFrame(json_data['data'])
+
+        stats = _calculate_stats(df['value'])
+
+        for feature, value in stats.items():
+            df[feature] = value
+
+        json_output = df.to_json(date_format='iso', orient='records', force_ascii=False)
+
+    return json_output
+
+@app.post("/CalculateFeatures/")
+async def calculate_features(request: DataRequest = Body(...)):
+    try:
+        json_data = request.model_dump()
+        result = load_and_calculate_features(json_data)
+        return result
+    except Exception as e:
+        raise HTTPException(status_code=400, detail=str(e))
+
+if __name__ == '__main__':
+    uvicorn.run(app, host="0.0.0.0", port=8666)

+ 70 - 0
api/self_define_def.py

@@ -0,0 +1,70 @@
+# %%
+import numpy as np
+import pandas as pd
+import json
+
+with open("input.json",'r') as f:
+    json_data = json.load(f)
+json_data
+# %%
+# 定义加载数据并计算特征值的函数
+def load_and_calculate_features(json_data):
+
+    # 定义计算统计指标的函数
+    def _calculate_stats(data):
+        # 确保数据是数值类型
+        data = pd.to_numeric(data, errors='coerce')
+        mean_value = np.mean(data)
+        max_value = np.max(data)
+        min_value = np.min(data)
+        Xrms = np.sqrt(np.mean(data ** 2))  # 加速度均方根值(有效值)
+        Xp = (max_value - min_value) / 2  # 峰值(单峰最大值)
+        Xpp = max_value - min_value  # 峰峰值
+        Cf = Xp / Xrms  # 峰值指标
+        Sk = np.mean((data - mean_value) ** 3) / Xrms ** 3  # 歪度指标
+        Sf = Xrms / mean_value  # 波形指标
+        If = Xp / np.mean(np.abs(data))  # 脉冲指标
+        Xr = np.mean(np.sqrt(np.abs(data))) ** 2  # 方根幅值
+        Ce = Xp / Xr  # 裕度指标
+
+        return {
+            'Xrms': Xrms,
+            'Mean': mean_value,
+            'Max': max_value,
+            'Min': min_value,
+            'Xp': Xp,
+            'Xpp': Xpp,
+            'Cf': Cf,
+            'Sk': Sk,
+            'Ce': Ce,
+            'If': If,
+            'Sf': Sf,
+        }
+        
+    if json_data['start_index'] is not None and json_data['end_index'] is not None:
+        df = pd.DataFrame(json_data['data'])
+        start_index = json_data['start_index']
+        end_index = json_data['end_index']
+        selected_data = df[(df['index'] >= start_index) & (df['index'] <= end_index)]
+
+        stats = _calculate_stats(selected_data['value'])
+
+        for feature, value in stats.items():
+            df[feature] = np.where((df['index'] >= start_index) & (df['index'] <= end_index), value, 0)
+
+        json_output = df.to_json(date_format='iso', orient='records', force_ascii=False)
+
+    else:
+        df = pd.DataFrame(json_data['data'])
+
+        stats = _calculate_stats(df['value'])
+
+        for feature, value in stats.items():
+            df[feature] = value
+
+        json_output = df.to_json(date_format='iso', orient='records', force_ascii=False)
+
+    return json_output
+   
+    
+# load_and_calculate_features(json_data)