在我們處理巨量資料時,特別是針對物聯網 (IoT)、智慧城市感測器數據或是企業 ESG 永續治理的相關指標,我們幾乎不可能拿到完美的資料。感測器斷線會產生缺失值 (Null),系統重試機制則可能引發重複的紀錄 (Duplicates)。如果帶著這些「髒資料」直接進入分析或機器學習模型,將會導致嚴重的誤差(這就是所謂的 Garbage In, Garbage Out)。
今天,我們將學習 PySpark 內建的資料品質守門員,透過幾個簡單的語法,優雅地處理這些異常資料!
1. 缺失值處理策略:刪除 (Drop) 還是 填補 (Fill)?
當我們遇到欄位空白 (Null 或 NaN) 時,通常有兩種作法:一是將該筆資料整列刪除;二是根據商業邏輯填補一個預設值(例如補 0,或是補上平均數)。
2. 實作一:精準打擊 Null 值的 dropna() 與 fillna()
在 PySpark 中,處理 Null 非常直覺。我們可以選擇只要有任一欄位是 Null 就整列刪除(非常嚴格),或是只有當「指定欄位」是 Null 時才刪除。
# 假設 df 是我們的智慧城市感測器資料
# 【策略 1:嚴格刪除】
# 只要該列有「任何 (any)」一個欄位是 Null,就把整列刪掉
df_clean = df.dropna(how="any")
# 只有當 "PM2_5" 欄位是 Null 時,才把該列刪掉
df_clean_specific = df.dropna(subset=["PM2_5"])
# 【策略 2:智慧補值】
# 將數值型欄位的 Null 全部補為 0
df_filled = df.fillna(value=0)
# 只針對特定欄位補值 (例如 Status 狀態未知時補上 'Unknown')
df_filled_specific = df.fillna(value="Unknown", subset=["Status"])
3. 實作二:消滅重複資料的 dropDuplicates()
-->在我們處理巨量資料時,特別是針對物聯網 (IoT)、智慧城市感測器數據或是企業 ESG 永續治理的相關指標,我們幾乎不可能拿到完美的資料。感測器斷線會產生缺失值 (Null),系統重試機制則可能引發重複的紀錄 (Duplicates)。如果帶著這些「髒資料」直接進入分析或機器學習模型,將會導致嚴重的誤差(這就是所謂的 Garbage In, Garbage Out)。
今天,我們將學習 PySpark 內建的資料品質守門員,透過幾個簡單的語法,優雅地處理這些異常資料!
1. 缺失值處理策略:刪除 (Drop) 還是 填補 (Fill)?
當我們遇到欄位空白 (Null 或 NaN) 時,通常有兩種作法:一是將該筆資料整列刪除;二是根據商業邏輯填補一個預設值(例如補 0,或是補上平均數)。
2. 實作一:精準打擊 Null 值的 dropna() 與 fillna()
在 PySpark 中,處理 Null 非常直覺。我們可以選擇只要有任一欄位是 Null 就整列刪除(非常嚴格),或是只有當「指定欄位」是 Null 時才刪除。
# 假設 df 是我們的智慧城市感測器資料
# 【策略 1:嚴格刪除】
# 只要該列有「任何 (any)」一個欄位是 Null,就把整列刪掉
df_clean = df.dropna(how="any")
# 只有當 "PM2_5" 欄位是 Null 時,才把該列刪掉
df_clean_specific = df.dropna(subset=["PM2_5"])
# 【策略 2:智慧補值】
# 將數值型欄位的 Null 全部補為 0
df_filled = df.fillna(value=0)
# 只針對特定欄位補值 (例如 Status 狀態未知時補上 'Unknown')
df_filled_specific = df.fillna(value="Unknown", subset=["Status"])

沒有留言:
張貼留言