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