1. 數據缺失分類
- 行記錄的缺失,又稱數據記錄丟失
- 列值的缺失,即數據記錄中某些列(變量)的值空缺
2. 數據列缺失的處理思路
2.1 丟棄
- 缺失值所在的行或者列整體刪除,減少缺失數據對總體的影響
- 整行刪除的前提:缺失行占總體的比例非常低,一般在5%以內
- 整列刪除(對應變量刪除)的前提:缺失值占整列的比例較高,一般在70%左右
- 注意,在大量的數據記錄不完整或者缺失值的特征表現較明顯的情況下,不采用此方法
2.2 補全
通常有以下幾種方法
- 統計法:
- 對於數值型數據,使用均值、加權均值、中位數等方法補全;
- 對於分類型數據,則選擇眾數補全
- 模型法:將缺失字段作為目標變量,根據已有的其他字段進行預測,得到補全值。
- 對於數值型變量,采用回歸模型;
- 對於分類型變量,采用分類模型(如KNN模型)
- 行業法:對於少量且具有重要意義的數據,通過行業專家補全
- 其他法:隨機方法、特殊值法、查找法
2.3 真值轉換
- 當缺失數據被認為是一種規律,需要作為輸入維度參與后續的處理和建模時,就不能對其隨意處理,此時采用的處理思路就是真值轉換
- 舉例描述:以用戶性別字段為例,很多數據集無法對性別做補全處理,也不能丟棄,所以將缺失值作為未知變量,和男、女變量一起從一個變量的多個值分布轉換為多個變量的真值分布狀態。
- 轉換前:性別(值域:男、女、未知)
- 轉換后:性別_男(值域1或0)、性別_女(值域1或0)、性別_未知(值域1或0)
- 最后,將這三個新的字段作為輸入維度替換原來的一個字段,用來參與后續的建模過程
2.4 不做處理
- 這種思路在於之后的建模應用和數據分析,很多模型對缺失值具有容忍度的處理方法,因此在預處理階段可以先不做處理
- 模型舉例:決策樹和隨機森林、神經網絡和朴素貝葉斯、KNN等
- 另外,在后期建模時字段或者特征的重要性判斷也決定是否處理缺失值
3. 實際操作(Python)
相關函數和屬性
- 判斷數據是否有缺失值:isnull()
- 獲得每一列的判斷結果:any()
- 計算變量的缺失值個數:sum()
- 計算數據集的行數和列數:shape,返回值:(行數, 列數)
- 刪除字段或數據行:drop()
- 缺失值填充:fillna()
需要的庫
import pandas as pd
數據
# 創建DataFrame對象,生成一份隨機數據 data = pd.DataFrame(np.random.randn(6, 4), columns=['col1', 'col2', 'col3', 'col4'])
3.1 判斷數據列(變量)的缺失值
代碼如下
data1 = pd.read_csv() # 判斷各變量中是否存在缺失值 data1.isnull().any(axis=0) # 各變量中缺失值的數量 data1.isnull().sum(axis=0) # 各變量中缺失值的比例 data1.isnull().sum(axis=0)/data1.shape[0]
3.2 判斷數據行的缺失值
代碼如下
# 判斷數據行中是否存在缺失值 data1.isnull().any(axis=1).any() # 缺失值的行數 data1.isnull().any(axis=1).sum() # 缺失值的比例 data1.isnull().any(axis=1).sum()/data1.shape[0]
3.3 刪除缺失數據
代碼如下
參考資料:
《Python數據分析與數據化運營》
公眾號 - 數據分析1480