處理遺漏資料

使用 PySpark 進行特徵工程

John Hogue

Lead Data Scientist, General Mills

在數位時代,資料如何遺漏?

資料蒐集

  • 感測器故障

資料儲存規則

  • 2017-01-01 vs January 1st, 2017

異質資料整併

  • 月資料轉週資料

刻意留白

  • 隱私考量

失蹤

使用 PySpark 進行特徵工程

遺漏型態

完全隨機遺漏

  • 遺漏值是完全隨機的子集

隨機遺漏

  • 依另一觀測條件性隨機遺漏

非隨機遺漏

  • 因蒐集方式而遺漏
使用 PySpark 進行特徵工程

評估遺漏值

何時刪除含遺漏值的列?

  • 遺漏值很少見
  • 屬於完全隨機遺漏

isNull()

  • 若當前運算式為 null 則為 True。
df.where(df['ROOF'].isNull()).count()
765
使用 PySpark 進行特徵工程

視覺化遺漏值

# Import library
import seaborn as sns

# subset the dataframe sub_df = df.select(['ROOMAREA1'])
# sample the dataframe sample_df = sub_df.sample(False, .5, 4)
# Convert to Pandas DataFrame pandas_df = sample_df.toPandas()
# Plot it sns.heatmap(data=pandas_df.isnull())
使用 PySpark 進行特徵工程

遺漏值熱圖

遺漏值熱圖

使用 PySpark 進行特徵工程

遺漏值插補

替補遺漏值的流程

規則式

  • 依商業邏輯給值

統計式

  • 使用平均數、中位數等

模型式

  • 用模型預測數值
使用 PySpark 進行特徵工程

遺漏值插補

** fillna(value, subset=None)

  • value 用於替換遺漏值的數值
  • subset 要替換遺漏值的欄位名稱清單
# 以 0 替換遺漏值
df.fillna(0, subset=['DAYSONMARKET'])
# 以該欄的平均數替換
col_mean = df.agg({'DAYSONMARKET': 'mean'}).collect()[0][0]
df.fillna(col_mean, subset=['DAYSONMARKET'])
使用 PySpark 進行特徵工程

一起來練習吧!

使用 PySpark 進行特徵工程

Preparing Video For Download...