# AP5成型機 - 算法筆記 (參數趨勢統計) > [name=JayHsu][time=Tue, Sep 24, 2019 6:36 PM] ## 算法流程 ![](https://i.imgur.com/9LmJ3il.png) 步驟: 1. 讀取控制器數據與健康值數據 2. 根據健康值, 將控制器數據分成異常(Defect)和正常(ok)兩部份 3. 計算每個參數的基準值(健康數據的中位數) 4. 計算defect模次每個參數和基準的差距 5. 將上一步計算的差距轉為定性的特徵(變大(差距>0), 變小(差距<0), 不變(差距=0)) 4. 匯總每一個參數出現次數最多的特徵 ## Source Code > http://10.160.29.112:8888/tree/AP5/MMIA/IM_Algorithm/Algorithm-TrendAnalysis.ipynb Source Code主要包含兩個Class, 一個(DataAgent)讀取數據, 另一個(TrendAnalysis)分析參數趨勢 ```python= class DataAgent(object): """This class implement data query funciton functinos: gethvdata - 查詢健康值數據 getcontroldata - 查詢控制器數據 """ def gethvdata(self, ts1, ts2, mid): """ 從sqlite db抓設備健康值數據 Parameters: ts1 - 開始時間(timestamp) ts2 - 結束時間(timestamp) mid - 設備ID(string) Returns: 設備健康值數據(Dataframe) """ def getcontroldata(self, ts1, ts2, mid, data_type): """ 從solr api抓控制器原始數據 Parameters: ts1 - 開始時間(timestamp) ts2 - 結束時間(timestamp) mid - 設備ID(string) [A01, A03, A05, A06] data_type - 數據類型 (string) [spc, alarmrecord, historyrecord, machinestatus] Returns: Dataframe, 設備健康值數據 """ ``` ```python= class TrendAnalysis(object): """This class implement 參數趨勢統計 functinos: preparedata - 準備趨勢分析要用的數據 getDevAnalysis - 參數趨勢分析 plt - 畫圖 """ def preparedata(self): """ 準備趨勢分析要用的數據, 並根據健康值, 將數據分成defect和ok兩部份 設備健康值數據 - df_hv 控制器數據 - df_ctr 控制器數據(異常事件的區間) - df_ctr_defect 控制器數據(健康值正常的區間) - df_ctr_ok Parameters: NA Returns: NA """ def getDevAnalysis(self): """ 趨勢分析, 以下為分析步驟 1. 先計算每個參數的基準(健康數據的中位數) 2. 再計算defect模次每個參數和基準的差距 3. 將上一步計算的差距轉為定性的特徵(變大(差距>0), 變小(差距<0), 不變(差距=0)) 4. 匯總每一個參數出現次數最多的特徵 分析結果 - df_devSummary Parameters: NA Returns: NA """ def plt(self): """ 畫出每個參數的趨勢圖, 並標註 Defect模次 - 紅色 基準線(健康模次的中位數) - 黃色 Parameters: NA Returns: NA """ ``` ## Demo ```python= casecfg = json.load(open('case.json', 'r')) trendAnalysis = TrendAnalysis(casecfg=casecfg['case01']) trendAnalysis.plt() display(trendAnalysis.df_devSummary) ``` ![](https://i.imgur.com/NptEbzs.png) ![](https://i.imgur.com/xSPyWhj.png =500x) ###### tags: `AP5成型機`