# 【⼤數據分析之資料處理概論】
<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)

**🛑 3. 停止條件(Stop Signal)**
- 每個點的所屬群組與上一輪完全一致
- 每個群的中心點位置沒有變動
**⚠️ 4. K-means 的缺點(Disadvantages)**
- 高計算成本(每一輪都要重算距離與中心點)
- 對初始值敏感(不同起始中心會導致不同分群結果)
- 結果不穩定(隨機起始 → 多次測試結果不同)
**🛠️ 5. 怎麼解決上述問題?**
- ✅ 做資料清理(data preprocessing),去除雜訊或離群值
- ✅ 使用更好的初始化方法(如 K-means++)
- ✅ 設定一個比較大的 k,再依據需求合併群組
### K-means 的限制(Disadvantages)
1. **只能處理凸型分布(convex hull)**:無法有效處理非凸形狀或有彎曲的分布(如月牙形)。
2. **中心點可能落在「虛擬位置」**:中心點是平均值,可能不在真實資料上,受離群值影響大。
3. **無法處理「不同大小或重疊的群」**:若兩群大小差異大,或有重疊區域,K-means 很容易錯判。
- 圖中畫出「中心點離某群太遠」、「重疊難分群」的情況。

4. **遇到時間序列資料時,維度暴增**:每筆資料是向量(如 S1 = [1,1,1,1]),維度會隨時間步增長。
- 在多時間點下,K-means 變得難以使用。

:::success
:::
### Extension of K-means:K-medoids
- 🔹K-means 的問題(缺點):
1. 它計算出來的中心點(centroid)是虛擬的(virtual point)→ 這是核心問題。
2. 若資料中有離群值(error/outliers),會對這個虛擬中心造成很大影響。
- 🔸K-medoids 的解法:
1. 改用實際存在的資料點作為中心點,來減少誤差干擾。
2. 換句話說,K-medoids 的中心點一定是資料集中某一個真實的樣本。

- 📌 圖解比較:
| 方法 | 中心點 | 抗誤差能力 |
| --------- | --- | ----- |
| 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 個資料點,則視為密度夠高,該點可成為群集核心。

**🔹 基本定義(Definition)**
- 核心點(Core / Central Point)
1. 條件:在半徑 ε 的鄰域內,包含自己在內的資料點數 n ≥ m。
2. 特性:密度足夠,具延伸能力、可連接其他核心點或邊界點,形成群集中心。
- 邊界點(border point):
1. 條件:該點自身鄰域內點數 n < m,但落在某個核心點的 ε 範圍內
2. 特性:被歸類進群集,但不會成為擴展依據
- 離群點(Outlier / Noise)
1. 條件:該點鄰域內點數不足(n < m)、也不在任何核心點的 ε 範圍內
2. 特性:無法分群,被視為噪音或異常值

| 參數 | 意義 |
| -- | ---------------------- |
| ε | 鄰近範圍半徑(Epsilon) |
| m | 最小點數門檻(MinPts),判斷密度的標準 |
| n | 實際在 ε 內的點數(包含自身) |
**🔸 補充說明(圖示補充)**
- ε:設定的鄰近半徑(決定「誰是附近的點」)
- m:最少點數門檻(決定密度夠不夠)
- 中心點 → 有多個箭頭向外指 → 被視為「主要區域」
- 邊界點 → 接近核心,但自己不夠密
- 離群點 → 沒有任何相連
**🔁 Running Example(執行範例)**
- 在圖上依照圓圈內點數篩選出:
1. 綠色圈:`ps3` 為核心點,`ps2` 為邊界點
2. 紅色圈:孤立的 o 被標為 outlier


3. 三個主要群組清楚分開(左、中、右)
**📝 小結**
| 名稱 | 條件 | 說明 |
| --- | ------------------ | ------------- |
| 核心點 | ε 範圍內點數 ≥ m | 可當作群的中心 |
| 邊界點 | ε 範圍內點數 < m,但鄰近核心點 | 被包含在群中但不是中心 |
| 離群點 | 無法連接任何核心點 | 被視為噪音、不屬於任何群組 |
**✅ 優點(Advantages of DBSCAN 相較於 K-means)**
- 可以找出任意形狀的群集(Arbitrary shape)→ 不像 K-means 只能找圓形、等距的群集。
- 能處理 K-means 不適合的資料分布 → 特別適用於不均勻密度或有雜訊的資料。
- 結果穩定,沒有隨機初始化問題 → 只要參數相同,DBSCAN 每次結果都一樣,不像 K-means 每次初始中心點不同會導致不同結果。

**⚠️ 缺點(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%)→ 視為雜訊或其他群體

**📝 小結**
| 比較項目 | 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>