---
# System prepended metadata

title: 【⼤數據分析之資料處理概論】
tags: [Data Analysis]

---

# 【⼤數據分析之資料處理概論】

<style>
/* 自定義 highlight 樣式 */
.highlight {
    background: linear-gradient(to top, lightblue 50%, transparent 50%);
    font-weight: bold;
}
</style>

```mermaid
graph LR
A(定義題目)
--> B(收集資料) 
--> C(清洗資料)
--> D(取特徵值)
--> E(降維)
F1(建模)
F2(分類)
G(製作報告)
E --> F1 --> G
E --> F2 --> G

style A fill:#fff,stroke:#333,stroke-width:2px;
style B fill:#fff,stroke:#333,stroke-width:2px;
style C fill:#fff,stroke:#333,stroke-width:2px;
style D fill:#fff,stroke:#333,stroke-width:2px;
style E fill:#fff,stroke:#333,stroke-width:2px;
style F1 fill:#fff,stroke:#333,stroke-width:2px;
style F2 fill:#fff,stroke:#333,stroke-width:2px;
style G fill:#fff,stroke:#333,stroke-width:2px;
```

## 目錄
- Part1: 資料主要類型介紹
- Part2: 資料收集的途徑與注意事項
- Part3: 資料收集實例介紹
- Part4: 資料清洗實例介紹
- Part5: 資料取特徵值實例介紹
- Part6: 各種方法轉換實例介紹

<br><br>

## Part1: 資料主要類型介紹
- 離散資料：一筆筆獨立的資料，常用散佈圖表示。
<center>
        <img src="https://hackmd.io/_uploads/rkx1h6wuJl.png",        
             style="
                    width: 60%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>



- 連續資料：固定時間間隔的資料，常用時間序列表示。
    :::info
    **注意事項**: 時間序列是由<span class = "highlight"> 多個小的時間序列組合而成 </span> (例如: 一次預測全中興人數V.S. 先把中興人流分成幾個部分)，最好的方法為各自建模後再加總即可。
    :::
    :::success
    **重點筆記**: 資工鐵則 - <span class = "highlight"> Divide and Conquer </span>對解決問題非常有幫助。
    :::
- 時空資料：有空間、時間的資料，可為離散或連續的。
- 文字資料
- 圖形資料


<br><br>

## Part2: 資料收集的途徑與注意事項
```mermaid
graph LR
A(定義題目)
--> B(收集資料) 
--> C(清洗資料)
--> D(取特徵值)
--> E(降維)
F1(建模)
F2(分類)
G(製作報告)
E --> F1 --> G
E --> F2 --> G

style A fill:#fff,stroke:#333,stroke-width:2px;
style B fill:#ddf,stroke:#333,stroke-width:2px;
style C fill:#fff,stroke:#333,stroke-width:2px;
style D fill:#fff,stroke:#333,stroke-width:2px;
style E fill:#fff,stroke:#333,stroke-width:2px;
style F1 fill:#fff,stroke:#333,stroke-width:2px;
style F2 fill:#fff,stroke:#333,stroke-width:2px;
style G fill:#fff,stroke:#333,stroke-width:2px;
```
#### 內部資料
分析廠商提供的資料。(例如：機台運作資料、廠商銷售記錄)

#### 外部資料
自行收集對分析案有幫助的資料。(例如：天氣資料、捷運站進出流量、上網抓資料)

#### 資料收集的注意事項
1. 資**料格式問題**：不管是政府還是公司，資料格式都常常變動。
<center>
        <img src="https://hackmd.io/_uploads/r1LY0TPOkl.png",        
             style="
                    width: 60%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>    

2. **資料內的錯別字或一種方式各種表態**：別懷疑，錯字超多。同一個地點也有多種描述的方法。
<center>
        <img src="https://hackmd.io/_uploads/SkQ110vOyl.png",        
             style="
                    width: 50%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>


3. **隱私權問題**：去識別化的資料。台灣法規規定，地區的資料只要能明確辨識出個人的位置就要去識別化。
<center>
        <img src="https://hackmd.io/_uploads/H1ybyAP_yx.png",        
             style="
                    width: 70%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

4. **顯性與隱性資料**：真的所有人都表態了嘛？
<center>
        <img src="https://hackmd.io/_uploads/Hy2zyRv_Jg.png",        
             style="
                    width: 70%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

<br><br>

## Part3: 資料收集實例介紹
- 離散資料：常用散佈圖表示。
<center>
        <img src="https://hackmd.io/_uploads/Bk_6n6Ddyl.png",        
             style="
                    width: 80%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>    

- 連續資料：常用時間序列表示。
<center>
        <img src="https://hackmd.io/_uploads/B1KJp6vuJg.png",        
             style="
                    width: 65%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

- 時空資料：
1. 離散時空資料
<center>
        <img src="https://hackmd.io/_uploads/BJn6pav_ye.png",        
             style="
                    width: 80%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

2. 連續時空資料
<center>
        <img src="https://hackmd.io/_uploads/r1Q1Cawuyx.png",        
             style="
                    width: 80%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

- 文字資料：
<center>
        <img src="https://hackmd.io/_uploads/rJ1lRavOyl.png",        
             style="
                    width: 80%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

- 圖形資料：

<center>
        <img src="https://hackmd.io/_uploads/ryPb06Pdyx.png",        
             style="
                    width: 80%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

<br><br>

## Part4: 資料清洗實例介紹
```mermaid
graph LR
A(定義題目)
--> B(收集資料) 
--> C(清洗資料)
--> D(取特徵值)
--> E(降維)
F1(建模)
F2(分類)
G(製作報告)
E --> F1 --> G
E --> F2 --> G

style A fill:#fff,stroke:#333,stroke-width:2px;
style B fill:#fff,stroke:#333,stroke-width:2px;
style C fill:#ddf,stroke:#333,stroke-width:2px;
style D fill:#fff,stroke:#333,stroke-width:2px;
style E fill:#fff,stroke:#333,stroke-width:2px;
style F1 fill:#fff,stroke:#333,stroke-width:2px;
style F2 fill:#fff,stroke:#333,stroke-width:2px;
style G fill:#fff,stroke:#333,stroke-width:2px;
```

- 資料清洗包含<span class = "highlight"> 資料觀察 </span>與<span class = "highlight"> 資料修正 </span>兩部分。

<br>

### 資料清洗方法的分類

<center>

| | 離散 | 連續 | 時空 | 圖片 |
| :--: | :--: | :--: | :--: | :--: |
| 缺值 | A | D | G | - |
| 不合理 (單一數值異常) | B | E | H | - |
| 雜訊 (大量資料異常) | B | F | I | - |
| 資料不平衡 | C | - | - | - |

</center>
    
<br> 

### A - 離散資料：缺值
<center>
        <img src="https://hackmd.io/_uploads/S16-MB2i0.png",        
             style="
                    width: 90%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

- 缺值造成的問題
    1. 少數資料缺值，可能造成資料群聚，無法辨識不同資料
    2. 同一維度多數資料缺值，會造成使用到該欄位的議題無法分析。
- 缺值處理的方式
    1. 同一筆資料太多缺值，刪除該筆資料
    2. 重要資料某個欄位缺值，拿近似資料估算
    3. 同一欄位太多缺值，刪除該欄位

<br>

### B - 離散資料：不合理與雜訊
<center>
        <img src="https://hackmd.io/_uploads/rJDQGr3jC.png",        
             style="
                    width: 90%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

- 不合理與雜訊的問題：
    1. 超出可能範圍太多
    2. 不符合常理
    3. 不合理資料會造成建模時，模型訓練不佳

**不合理的觀察方式1：特徵座標**
- 通常會直接用目測，或搭配 DBSCAN 演算法。
- 解決方法：資料夠多時直接刪除，資料太少時找類似資料校正
    <center>
            <img src="https://hackmd.io/_uploads/rJWtzB3jC.png",        
                 style="
                        width: 50%; 
                        height: auto;">
            <div style="
                    border-bottom: 3px solid #d9d9d9;
                    display: inline-block;
                    color: #999;
                    padding: 3px;">
            </div>
    </center>

::: info
**注意事項** : K-means vs DBSCAN
- **K-means**
    <center>
        <img src="https://hackmd.io/_uploads/ByejzHnjR.png",        
             style="
                    width: 80%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
    </center>
- **DBSCAN**
    1. 核心點：本身周圍 r 以內，有 n 個點。
    2. 邊線點：在其餘範圍 r 以內，但本身周圍沒有 n 個點
    3. 雜訊：本身距離其他點都 r 以上
    <center>
        <img src="https://hackmd.io/_uploads/Byxk7HhjR.png",        
             style="
                    width: 80%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
    </center>
:::

### K-means 演算法教學筆記總整理
**📘 1. 基本設定**
- K-means 是一種分群演算法，目的是把資料分成 k 個群組（clusters）。
- 「k」代表你想分幾群，這是事先設定的。

**🔄 2. 運作流程（每一輪的迭代）**
- Round 0: 初始化
    1. 隨機選出 k 個初始中心點（Centroids）。
    2. ❗ 問題1：隨機初始化 會導致每次結果可能不同。

- Round 1：
    1. Step 1：將每個資料點分配給最近的中心點
    2. Step 2：重新計算每一群的中心位置（平均座標）

- Round 2：
    1. 重複 Step 1 + Step 2
    2. 直到符合停止條件（Stop condition）
![image](https://hackmd.io/_uploads/HyM0sAZ7xl.png)


**🛑 3. 停止條件（Stop Signal）**
- 每個點的所屬群組與上一輪完全一致
- 每個群的中心點位置沒有變動

**⚠️ 4. K-means 的缺點（Disadvantages）**
- 高計算成本（每一輪都要重算距離與中心點）
- 對初始值敏感（不同起始中心會導致不同分群結果）
- 結果不穩定（隨機起始 → 多次測試結果不同）

**🛠️ 5. 怎麼解決上述問題？**
- ✅ 做資料清理（data preprocessing），去除雜訊或離群值
- ✅ 使用更好的初始化方法（如 K-means++）
- ✅ 設定一個比較大的 k，再依據需求合併群組


### K-means 的限制（Disadvantages）

1. **只能處理凸型分布（convex hull）**：無法有效處理非凸形狀或有彎曲的分布（如月牙形）。

2. **中心點可能落在「虛擬位置」**：中心點是平均值，可能不在真實資料上，受離群值影響大。

3. **無法處理「不同大小或重疊的群」**：若兩群大小差異大，或有重疊區域，K-means 很容易錯判。
    - 圖中畫出「中心點離某群太遠」、「重疊難分群」的情況。
![image](https://hackmd.io/_uploads/By_GA0bXxx.png)

4. **遇到時間序列資料時，維度暴增**：每筆資料是向量（如 S1 = [1,1,1,1]），維度會隨時間步增長。
    - 在多時間點下，K-means 變得難以使用。
![image](https://hackmd.io/_uploads/rke4A0WQex.png)

:::success

:::

### Extension of K-means：K-medoids
- 🔹K-means 的問題（缺點）：
    1. 它計算出來的中心點（centroid）是虛擬的（virtual point）→ 這是核心問題。
    2. 若資料中有離群值（error/outliers），會對這個虛擬中心造成很大影響。

- 🔸K-medoids 的解法：
    1. 改用實際存在的資料點作為中心點，來減少誤差干擾。
    2. 換句話說，K-medoids 的中心點一定是資料集中某一個真實的樣本。
![image](https://hackmd.io/_uploads/HyKEC0WQex.png)

- 📌 圖解比較：

| 方法        | 中心點 | 抗誤差能力 |
| --------- | --- | ----- |
| K-means   | 虛擬點 | 差     |
| K-medoids | 實際點 | 好     |

> 「現實世界中，很多所謂的 K-means 相關演算法，其實內部是用 K-medoids 的概念實作出來的。」

**🕰️ Time Series vs K-means**
如果你想把「時間序列」拿來做 K-means 分群，會遇到一個問題：「時間越長，維度會變得越高。」
- 例子：你有三筆資料（S1, S2, S3），每一筆都有多個時間點的值。
- 這些資料會變成像這樣的多維資料：
    1. S1 = (1,1,1,1)
    2. S2 = (2.5, 3, 3.5)
    3. S3 = (2,2,2)
- 資料維度 = 時間長度（time steps）
- 結論：當你考慮越多時間步（time steps），你的資料就會變成高維向量，而高維會對 K-means 分群造成困擾（例如距離不再可靠）。

### DBSCAN 演算法教學筆記總整理
**🔸 核心概念**
- 與 K-means 不同，DBSCAN 根據資料的「密度」進行分群，而非預先指定群數 k。
- 如果某個點在其鄰近區域（半徑 ε 內）有至少 m 個資料點，則視為密度夠高，該點可成為群集核心。
![image](https://hackmd.io/_uploads/HJL0b1Mmlg.png)

**🔹 基本定義（Definition）**
- 核心點（Core / Central Point） 
    1. 條件：在半徑 ε 的鄰域內，包含自己在內的資料點數 n ≥ m。
    2. 特性：密度足夠，具延伸能力、可連接其他核心點或邊界點，形成群集中心。

- 邊界點（border point）：
    1. 條件：該點自身鄰域內點數 n < m，但落在某個核心點的 ε 範圍內  
    2. 特性：被歸類進群集，但不會成為擴展依據

- 離群點（Outlier / Noise）
    1. 條件：該點鄰域內點數不足（n < m）、也不在任何核心點的 ε 範圍內  
    2. 特性：無法分群，被視為噪音或異常值

![image](https://hackmd.io/_uploads/Hys5W1M7gl.png)


| 參數 | 意義                     |
| -- | ---------------------- |
| ε  | 鄰近範圍半徑（Epsilon）        |
| m  | 最小點數門檻（MinPts），判斷密度的標準 |
| n  | 實際在 ε 內的點數（包含自身）       |


**🔸 補充說明（圖示補充）**
- ε：設定的鄰近半徑（決定「誰是附近的點」）
- m：最少點數門檻（決定密度夠不夠）
- 中心點 → 有多個箭頭向外指 → 被視為「主要區域」
- 邊界點 → 接近核心，但自己不夠密
- 離群點 → 沒有任何相連

**🔁 Running Example（執行範例）**
- 在圖上依照圓圈內點數篩選出：
1. 綠色圈：`ps3` 為核心點，`ps2` 為邊界點
2. 紅色圈：孤立的 o 被標為 outlier


![image](https://hackmd.io/_uploads/S1_dzkG7gx.png)

![image](https://hackmd.io/_uploads/HJ3Fzyf7xe.png)


3. 三個主要群組清楚分開（左、中、右）


**📝 小結**

| 名稱  | 條件                 | 說明            |
| --- | ------------------ | ------------- |
| 核心點 | ε 範圍內點數 ≥ m        | 可當作群的中心       |
| 邊界點 | ε 範圍內點數 < m，但鄰近核心點 | 被包含在群中但不是中心   |
| 離群點 | 無法連接任何核心點          | 被視為噪音、不屬於任何群組 |

**✅ 優點（Advantages of DBSCAN 相較於 K-means）**
- 可以找出任意形狀的群集（Arbitrary shape）→ 不像 K-means 只能找圓形、等距的群集。
- 能處理 K-means 不適合的資料分布 → 特別適用於不均勻密度或有雜訊的資料。
- 結果穩定，沒有隨機初始化問題 → 只要參數相同，DBSCAN 每次結果都一樣，不像 K-means 每次初始中心點不同會導致不同結果。
![image](https://hackmd.io/_uploads/B11VMkfXgl.png)

**⚠️ 缺點（Disadvantages）**
- 無法指定群數（Cannot decide the number of clustering） → DBSCAN 自動決定群數，無法像 K-means 一樣直接設定 k。
- 參數 n 與 r（即 MinPts 與 ε）難以微調 → 不同資料需要不同參數，沒有通用值。
- 計算量高（高時間複雜度）→ 需要計算每對資料點之間的距離，當資料量大時會很慢。



**🔧 參數設定技巧（How to tune n & r）**
- 使用大量實驗（多次試驗不同的 n 與 r）。
- 使用基因演算法（Genetic Algorithm, GA）來自動尋找最適參數。

**🔄 DBSCAN vs K-means 圖解對比**
- K-means：只適合圓形區域，邊界固定。
- DBSCAN：可連接不規則、蜿蜒形狀的群集。
- 圖中展示：
    1. 圓圈中連接多個核心點形成群集
    2. 單獨點落在圓外，即為 outlier（離群點）

**📘 Extension of DBSCAN：應用延伸**
- 可用於「相似率分群」，例如商店消費者分類（手機、服飾、KFC、咖啡⋯）
- 設定不同 n 與 r，根據相似度群聚
    1. 高相似度（> 90%）→ 分一群
    2. 中相似度（50% < 相似度 < 90%）→ 邊界群
    3. 低相似度（< 40%）→ 視為雜訊或其他群體
![image](https://hackmd.io/_uploads/ryLeDJf7eg.png)



**📝 小結**

| 比較項目    | K-means       | DBSCAN         |
| ------- | ------------- | -------------- |
| 群數事先指定  | ✅ 必須設定 k      | ❌ 自動決定         |
| 支援不規則形狀 | ❌ 圓形群為主       | ✅ 任意形狀         |
| 抗雜訊能力   | 弱（離群點會影響中心）   | 強（可識別 outlier） |
| 演算法穩定性  | ❌ 隨機初始化可能結果不同 | ✅ 固定參數就固定結果    |
| 運算效率    | 快             | 慢（距離計算複雜）      |

| 類型      | ε 範圍內的點數 | 是否落在核心點 ε 內 | 可否擴展群集 |
| ------- | -------- | ----------- | ------ |
| **核心點** | ≥ MinPts | 無需依附他人      | ✅ 是    |
| **邊界點** | < MinPts | ✅ 是         | ❌ 否    |
| **離群點** | < MinPts | ❌ 否         | ❌ 否    |

<br>

**不合理的觀察方式2：盒鬚圖**
- 可快速觀察資料分布，並辨識資料是否位於合理範圍。
- 解決方法：僅留下上下四分位數間的資料進行處理
<center>
        <img src="https://hackmd.io/_uploads/SJix7Sns0.png",        
             style="
                    width: 50%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

**不合理的觀察方式3：直方圖**
- 比盒鬚圖來說更容易發現異常資料。
- 解決方法: 在資料夠多的狀況下，可以直接取最重要前80%~90% 資料來處理
<center>
        <img src="https://hackmd.io/_uploads/Bk1MXrhiA.png",        
             style="
                    width: 75%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

:::info
**注意事項**: 
資料科學重要概念：分析出來結果大部分人可以適用即可。
:::

<br>

### C - 離散資料：資料不平衡

**不平衡造成的問題：**
1. 建模準確率下降
2. 模型建出來沒有意義

<center>
        <img src="https://hackmd.io/_uploads/S1LaIy44kg.png",        
             style="
                    width: 50%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

**資料不平衡觀察方式1：如果資料簡單直接做統計** 
<center>
        <img src="https://hackmd.io/_uploads/H1xcQS2iA.png",        
             style="
                    width: 90%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>



**資料不平衡觀察方式2：如果資料複雜建議繪特徵座標**
<center>
        <img src="https://hackmd.io/_uploads/rywi7B2iR.png",        
             style="
                    width: 50%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

#### 不平衡處理的方法： 資料擴增 (Data)
1. 缺點: 只能在特定範圍、資料散佈時，無法使用需要產生的點跟其他類別重疊。
2. Downsampling：從資料量較多類別中取出與資料量較少類別大約數量的資料
<center>
        <img src="https://hackmd.io/_uploads/B12eVr3jR.png",        
             style="
                    width: 30%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

3. Upsampling: 
    - Smote: 對資料量較少的類別，產生類似的假資料
    <center>
        <img src="https://hackmd.io/_uploads/rk9pXS2sR.png",        
             style="
                    width: 50%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
    </center>

    - GAN: 近期補救方法，產生假資料。

:::success
**重點筆記**: 迴歸資料不平衡問題
- x 軸
<center>
    <img src="https://hackmd.io/_uploads/SJMPuat60.png",        
         style="
                width: 70%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>
    
- y 軸
    1. 資料太少不知道遇到數值較高的資料如何處理，大部分沒有任何的操作空間。
    2. 透過分段正規化，可以把 y 的操作空間填滿，提升模型的準確率。
<center>
    <img src="https://hackmd.io/_uploads/BJuMoaY6A.png",        
         style="
                width: 90%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>
:::

<br>

### D - 連續資料 : 缺值
<center>
        <img src="https://hackmd.io/_uploads/HkvE4S3jA.png",        
             style="
                    width: 90%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

#### 缺值造成的問題
- 訓練時間序列模型時，資料無法串連，所以效果很差。 

#### 時間序列圖
<center>
        <img src="https://hackmd.io/_uploads/Bkrd4HnoC.png",        
             style="
                    width: 90%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

<br> 

### E - 連續資料: 不合理值
- 三軸加速度計監測資料
<center>
        <img src="https://hackmd.io/_uploads/SyHnVHnsC.png",        
             style="
                    width: 70%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

#### 不合理值造成的問題
- 時間序列預測模型非常怕數值瞬間變化，會造成模型崩潰

#### 三倍標準差法
<center>
        <img src="https://hackmd.io/_uploads/rksTVrhoR.png",        
             style="
                    width: 70%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

<br>

### F - 連續資料: 雜訊
- 三軸加速度計監測資料

<center>
        <img src="https://hackmd.io/_uploads/rywkHH2iC.png",        
             style="
                    width: 70%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
</center>

#### 雜訊造成的問題
- 會造成收集來的資料數值不一致，並降低建模或分類的準確度

#### 雜訊處理的方法：
- 移動平均法：
    <center>
        <img src="https://hackmd.io/_uploads/BkCWBB3jC.png",        
             style="
                    width: 70%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
    </center>
    <center>
        <img src="https://hackmd.io/_uploads/SJJrrH3iR.png",        
             style="
                    width: 70%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
    </center>


- 利用濾波器：
    <center>
        <img src="https://hackmd.io/_uploads/Hy2IrS2sC.png",        
             style="
                    width: 90%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
    </center>
    
:::success
**重點筆記**:
- 處理順序：時域 $\rightarrow$ 頻域 $\rightarrow$ 濾波 $\rightarrow$ 頻域 $\rightarrow$ 時域
- 注意：時域是以時間為 X 軸，頻域是以頻率為 X 軸。
- 問題在於如何做時序的拆解 ( 以頻率來看 )
    1. Fourier 時域 $\rightarrow$ 頻域 $\rightarrow$ 手動挑選重要頻率
    2. STL 時域 $\rightarrow$ 時域趨勢、週期、概況
    3. Wavelet model時域 $\rightarrow$ 頻域 $\rightarrow$ 自動挑選重要頻率
:::
    
<center>
    <img src="https://hackmd.io/_uploads/BkZOSH2s0.png",        
         style="
                width: 90%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

<br><br>

### G - 連續資料: 不平衡問題

#### 長時間不平衡
- PM2.5 夏低東高，需要設定合適的 k (K-Fold) 來避免此問題。
- 假設 k = 5: 最後取 $Avg. E = E_1 + E_2 + ... + E_5$
<center>
    <img src="https://hackmd.io/_uploads/HJdtd144yg.png",        
         style="
                width: 50%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

#### 週期不平衡
- 一週平日五天、假日兩天，隱性資料不平衡。
- 基本上難以發現，需要根據自身的經驗。只要是人文預測就會有此問題。

<br><br>

## Part5: 資料取特徵值實例介紹
**取特徵值的目的：**
- 取特徵值的目的是從資料中取出對分析有用的資料
- 做不同資料格式間的轉換
- 特徵值轉換其形式再進 NN (現在最常見的技巧)

<center>

| 原始資料類型 | 離散 | 連續 | 時空 | 圖片 |
| :--: | :--: | :--: | :--: | :--: |
| 資料清洗 | - | l | - | - |
| 取特徵值 | - | l | - | - |
| | 離散 | 連續 | 時空 | 圖片 |
|  | $\downarrow$ | $\downarrow$ | $\downarrow$ | $\downarrow$ |
| 方法 | RF, DNN, NN, SVM | RNN, LSTM, GRU | - | CNN, YOLO
| 降維 | - | - | - | - |
| 分類 | - | - | - | - |
| 建模 | - | - | - | - |

</center>

<br> 

### 實例: 以刀具磨耗震動資料為例 - 本身為時間序列資料。
- 時間序列資料 $\rightarrow$ 離散資料：
    <center>
        <img src="https://hackmd.io/_uploads/H11ZIS2s0.png",        
             style="
                    width: 90%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
    </center>

- 時間序列資料 $\rightarrow$ 時間序列資料：
    <center>
        <img src="https://hackmd.io/_uploads/S1dzUB2oC.png",        
             style="
                    width: 90%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
    </center>

- 時間序列資料 $\rightarrow$ 時頻圖資料：
    <center>
        <img src="https://hackmd.io/_uploads/HkD4UHhs0.png",        
             style="
                    width: 90%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
    </center>

<br>

- 時頻圖的轉換：
<center>
        <img src="https://hackmd.io/_uploads/Hy2IrS2sC.png",        
             style="
                    width: 90%; 
                    height: auto;">
        <div style="
                border-bottom: 3px solid #d9d9d9;
                display: inline-block;
                color: #999;
                padding: 3px;">
        </div>
    </center>

:::success
**重點筆記**： 藉由取不同資料分析格式，可以達到不同的分析目標 藉由取不同資料分析格式，可以達到不同的分析目標。
:::

<br><br>

## Part6: 各種方法轉換實例介紹

<center>

| | 離散 | 連續 | 圖片 |
| :--: | :--: | :--: | :--: |
| 離散 | A | - | - | 
| 連續 | B、C | D、E | F |
| 時空 | G | - | - |
| 圖片 | H | - | - |

</center>

### A - 離散資料轉離散資料：問卷調查資料做男女生分析。
<center>
    <img src="https://hackmd.io/_uploads/HkwWDHnj0.png",        
         style="
                width: 90%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

<br>

### B - 連續資料轉離散資料：刀具磨耗 (傅立葉轉換後取特定頻率)
- 變成著標軸上的點，一個時間序列換成一個點
<center>
    <img src="https://hackmd.io/_uploads/SJMUDShoA.png",        
         style="
                width: 70%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

<center>
    <img src="https://hackmd.io/_uploads/BJodwS3i0.png",        
         style="
                width: 90%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

<br>

### C - 連續資料轉離散資料：動作辨識分析 (取窗型特徵值)
- 一個時間序列轉換成很多個點
<center>
    <img src="https://hackmd.io/_uploads/ry1ovHnj0.png",        
         style="
                width: 90%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

:::info
**注意事項**:
- 每個窗格的大小最好等於動作週期或是動作週期一半
- 每個窗格要 overlap
:::

<center>
    <img src="https://hackmd.io/_uploads/SJcnDr2sR.png",        
         style="
                width: 90%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

<br>

### D - 連續資料轉連續資料：機台操作數據資料 (STL)
- STL 拆解法能把連續資料拆成長期斯是、週期性資料，以及雜項
<center>
    <img src="https://hackmd.io/_uploads/S1dzUB2oC.png",        
         style="
                width: 90%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

<br>

### E - 連續資料轉連續資料：PM2.5 觀測數據 (小波模型)
- 小波模型能自動找到連續資料最重要的頻率，並進行多輪拆解
<center>
    <img src="https://hackmd.io/_uploads/rJbfdShoR.png",        
         style="
                width: 90%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

<center>
    <img src="https://hackmd.io/_uploads/rkcQdHnsC.png",        
         style="
                width: 70%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

<br>

### F - 連續資料轉圖片資料：刀具磨耗 (時頻圖)
- 
- 時序資料中，若使用時頻圖可以時間、頻率皆考慮，並不會忽略其中一者。
- 顏色越深代表越重要。
<center>
    <img src="https://hackmd.io/_uploads/r1KL_Sni0.png",        
         style="
                width: 90%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

<br>

### G - 時空資料轉離散資料：澳門公車路線 (地圖網個之Hash)
- 表達不同公車路線的差異
<center>
    <img src="https://hackmd.io/_uploads/HyNuOS3o0.png",        
         style="
                width: 50%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>


- 將地圖切割成多個網格，並針對網格編號
<center>
    <img src="https://hackmd.io/_uploads/B14idS2iC.png",        
         style="
                width: 50%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

1. Station1, (1, 2)： 記憶體位置 $\rightarrow$ 5 (公式：$1^2 + 2^2 = 5, \quad 5 mod 7 = 5$)
2. Station2, (1, 1)： 記憶體位址 $\rightarrow$ 2 (公式：$1^2 + 1^2 = 2, \quad 2 mod 7 = 2$)
3. Station3, (1, 1)： 記憶體位址 $\rightarrow$ 2 (公式: $1^2 + 1^2 = 2, \quad 2 mod 7 = 2$)
4. Station4, (2, 1)： 記憶體位址 $\rightarrow$ 6 (5+1) (公式: $2^2 + 1^2 = 5, \quad 5 mod 7 = 5$)

<center>
    
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| :--: | :--: | :--: | :--: | :--: | :--: | :--: |
| 0 | 2 | 0 | 0 | 1 | 1 | 0 |

</center>

<br>

### H - 圖片資料轉離散資料：Convolution 改變圖片特性 (Convolution+Pooling+Flatting)

- Convolution 範例一：
<center>
    <img src="https://hackmd.io/_uploads/BJjMKr3sR.png",        
         style="
                width: 75%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

<center>
    <img src="https://hackmd.io/_uploads/S1qEKSnjA.png",        
         style="
                width: 75%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

<br> 

- Convolution 範例二：
<center>
    <img src="https://hackmd.io/_uploads/HkKrtS2jC.png",        
         style="
                width: 75%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

<center>
    <img src="https://hackmd.io/_uploads/rydUtB3sC.png",        
         style="
                width: 75%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

- Pooling:
<center>
    <img src="https://hackmd.io/_uploads/SyAcKHnoR.png",        
         style="
                width: 75%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

- Flatting:
<center>
    <img src="https://hackmd.io/_uploads/rkypKBhjR.png",        
         style="
                width: 75%; 
                height: auto;">
    <div style="
            border-bottom: 3px solid #d9d9d9;
            display: inline-block;
            color: #999;
            padding: 3px;">
    </div>
</center>

