01
為什麼需要資料前處理?
現實世界的資料幾乎從來不完美。資料可能有缺失值、格式不一致、異常數值,或者不同來源的資料難以直接合併。如果直接把這樣的資料丟進機器學習模型,結果就像電腦科學的經典警語:
「垃圾進,垃圾出(Garbage In, Garbage Out)」 — 資料品質決定了模型的上限。
資料前處理的目標,就是在模型訓練之前,把原始資料轉換成乾淨、一致、適合分析的格式。
「垃圾進,垃圾出(Garbage In, Garbage Out)」 — 資料品質決定了模型的上限。
資料前處理的目標,就是在模型訓練之前,把原始資料轉換成乾淨、一致、適合分析的格式。
在實際的機器學習專案中,資料前處理往往佔去整個專案 60–80% 的時間。這不是枯燥的雜事,而是決定模型好壞的關鍵。
02
四個主要步驟(大架構)
資料清洗
Data Cleaning
處理缺失值、去除重複、修正錯誤數值
資料轉換
Data Transformation
特徵縮放、特徵抽取、類別編碼、降維
資料集成
Data Integration
整合不同來源資料,統一格式與單位
資料歸納
Data Reduction
降低維度與資料量,保留關鍵資訊
03
本週關鍵名詞
Missing Value缺失值
資料中某些欄位沒有數值(例如某位學生的年齡欄空白)。常見處理方式:刪除填補均值/中位數模型預測填補
Standardization標準化
將數值縮放至均值為 0、標準差為 1 的分布。適合線性回歸、SVM 等假設資料呈常態分布的模型。
Normalization正規化
將數值縮放至 [0, 1] 範圍內。適合神經網路、需要固定值域的場景。
Label Encoding標籤編碼
將類別資料轉換為整數,例如「紅=0, 綠=1, 藍=2」。適合有序類別(例如評級)及樹型模型。
One-Hot Encoding獨熱編碼
為每個類別建立獨立的 0/1 欄位,消除類別間的虛假順序關係。適合無序類別(例如城市名稱)。
PCA主成分分析
一種非監督式降維技術,保留資料中方差最大的方向,去除冗餘特徵。不需要標籤資訊。
Feature Extraction特徵抽取
從原始資料中提取有意義的特徵,例如從身高體重計算 BMI,或從日期提取「星期幾」。
Outlier異常值/離群值
明顯偏離其他資料的數值,例如年齡欄出現 -5 或 999。需要判斷是資料錯誤還是真實的極端值再決定如何處理。
04
兩個必記公式
📐 標準化(Standardization)
z = (x - μ) / σ
μ:該欄位的平均值
σ:該欄位的標準差
結果集中在 [-3, 3] 之間,均值為 0。
σ:該欄位的標準差
結果集中在 [-3, 3] 之間,均值為 0。
📐 正規化(Min-Max Normalization)
z = (x - min) / (max - min)
結果必定落在 [0, 1] 之間。
若資料有離群值,會壓縮大多數值到極小區間,此時標準化更穩健。
若資料有離群值,會壓縮大多數值到極小區間,此時標準化更穩健。
05
兩種類別編碼的差異
🏷️ Label Encoding(標籤編碼)
"Chicago" → 0
"Houston" → 1
"Los Angeles" → 2
"New York" → 3
"Phoenix" → 4
- 節省記憶體
- 適合有序類別或樹型模型
- ⚠️ 無序類別用此法會引入假順序
🔢 One-Hot Encoding(獨熱編碼)
"紅" → [1, 0, 0]
"綠" → [0, 1, 0]
"藍" → [0, 0, 1]
- 消除假順序關係
- 適合線性模型、神經網路
- ⚠️ 類別太多時會「維度爆炸」
06
課堂程式碼預覽
課堂上會實際操作以下程式碼,先看過一遍,上課時就能跟上節奏。
import pandas as pd import numpy as np # 建立範例資料集 data = { "Name": ["Alice", "Bob", "Charlie", "David", "Alice", np.nan], "Age": [25, np.nan, 35, 40, 25, 30], "Salary": [50000, 60000, 70000, np.nan, 50000, 150000] } df = pd.DataFrame(data) # 1. 檢視缺失值數量 print(df.isnull().sum()) # 2. 用均值填補 Age、中位數填補 Salary df["Age"] = df["Age"].fillna(df["Age"].mean()) df["Salary"] = df["Salary"].fillna(df["Salary"].median()) # 3. 刪除重複行 df = df.drop_duplicates()
from sklearn.preprocessing import StandardScaler, MinMaxScaler # 標準化(均值0、標準差1) scaler = StandardScaler() data_std = scaler.fit_transform(data) # 正規化(壓縮到 [0,1] 範圍) scaler2 = MinMaxScaler() data_norm = scaler2.fit_transform(data)
07
本課程使用的工具
Python 套件
Pandas
表格資料處理的核心工具。讀取、清洗、轉換資料的大多數操作都用它。
Python 套件
NumPy
數值運算基礎。Pandas 底層依賴 NumPy,處理矩陣與陣列運算。
Python 套件
Scikit-learn
提供
StandardScaler、MinMaxScaler、LabelEncoder、OneHotEncoder 等現成工具。Python 套件
Matplotlib / Seaborn
視覺化資料分佈,幫助識別異常值與資料偏態。
08
預習思考題
帶著這些問題去上課,不必現在找到答案——思考本身才是重點。
Q 01
一個欄位有 30% 的缺失值,你會選擇刪除還是填補?你的決定依據什麼?
概念
💡 想想看:刪除會損失多少資料?填補可能引入什麼偏差?
Q 02
對「城市名稱」這類無序類別,為什麼不能直接用標籤編碼(0、1、2…)?
概念
💡 模型會對這些整數做數學運算,想想這會造成什麼問題。
Q 03
若資料有一個特徵範圍是 [0, 1],另一個是 [0, 1,000,000],在使用 KNN 演算法時會發生什麼事?特徵縮放如何解決這個問題?
應用
💡 KNN 的核心是計算距離——哪個特徵會主導距離計算?
Q 04
薪資欄出現 -10000,年齡欄出現 -5,這是「缺失值」還是「異常值」?處理方式有什麼不同?
應用
💡 缺失 vs. 錯誤 vs. 真實極端值——三種情況各有不同的對策。
Q 05
在 Python 中,
df.dropna() 和 df.fillna() 的差別是什麼?各適合什麼情境?
程式
💡 先看一眼上方的程式碼預覽,想想兩者的行為差異。
09
上課前確認清單
確認你已完成:
□ 我知道資料前處理的四個主要步驟
□ 我能說出標準化與正規化的公式與差異
□ 我知道 Label Encoding 和 One-Hot Encoding 各適合哪種情境
□ 我的 Python 環境已安裝
□ 我知道資料前處理的四個主要步驟
□ 我能說出標準化與正規化的公式與差異
□ 我知道 Label Encoding 和 One-Hot Encoding 各適合哪種情境
□ 我的 Python 環境已安裝
pandas、numpy、scikit-learn