# AP5成型機 - 算法筆記 (參數趨勢統計)
> [name=JayHsu][time=Tue, Sep 24, 2019 6:36 PM]
## 算法流程

步驟:
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)
```


###### tags: `AP5成型機`