為什麼需要處理缺失值
為什麼資料有缺失值
缺失值的處理方法
這就是個廢問題,不處理就會影響結果準確性,但處理不好也會幫倒忙、增加噪音。所以要根據每個缺失值的具體情況,選擇適合的處理方法。
缺失值的產生的原因多種多樣,主要分為機械原因和人為原因:
缺失值可能出現在兩個階段:
完全隨機缺失指的是資料的缺失是隨機的,資料的缺失不依賴於任何不完全變數或完全變數。
當資料是完全隨機丟失的時候,資料丟失的機率對於所有觀測值都是一樣的。比如,資料收集過程中的受訪者決定在擲硬幣後宣布他們的收入。如果出現人頭,受訪者會申報其收入;如果出現圖案,則不申報。在這裡,每乙個觀察值都有相同的丟失值的機會。
指的是資料的缺失不是完全隨機的,即該類資料的缺失依賴於其他完全變數。
資料的缺失的機率受其他變數的影響。例如,當收集年齡資料時,女性更不願公開自己的年齡,因此女性的缺失值會遠遠大於男性。
指的是資料的缺失依賴於不完全變數自身,這裡有兩種情況:
1)缺失值與未觀察的輸入變數相關(missing that depends on unobserved predictors):
缺失值不是隨機的,而是與未觀察的輸入變數相關。
比如在醫學研究中,如果某一特定**導致不適,那麼患者退出研究的可能性就會更高,因此這些「不適」的患者沒有被觀察和測量,產生了缺失值。如果我們刪除這部分缺失樣本,則完全把不適的患者排除在分析樣本之外。
這個缺失的值不是隨機產生的,而是依賴於「不適」這個未被觀察到的變數。
2)缺失情況與變數本身直接相關(missing that depends on the missing value itself):
缺失是因為變數本身,比如高/低收入的人更不願意提供自己的收入資訊。
適合完全隨機缺失missing completely at random,有兩種刪除方法:
成列刪除list wise deletion:將整個樣本刪掉。
成對刪除pair wise deletion:只刪掉缺失值的部分;一些樣本雖然有缺失值,但是依舊可以使用其他未缺失的部分進行分析。
即用將缺失值填充掉,使用均值/中位數/眾數替代缺失值。
廣義插補(generalized imputation): 使用所有已知的資料,計算平均數/中位數替代缺失值。例如,上面的例子中,manpower 的缺失值可用其平均數28.33填充。
相似插補(similar case imputation): 按照每個缺失值的樣本特性,選擇已知相似樣本的平均數/中位數來插補缺失值。例如按性別計算平均數, 「male」 (29.75) 和「female」 (25) ;然後根據每個樣本的性別來選擇替代缺失值的平均數,男性則插補29.75,若樣本為女性則使用25。
首先,將資料集分成兩組,一組沒有缺失值,另一組包含缺失值。則第一組資料作為模型的訓練集,而第二組為測試集,缺失值即是目標變數。
然後,可以用方差分析,邏輯回歸等方法建模並計算出缺失值。
這個方法有兩個缺點:
模型估計值通常比真實值表現得更好
如果與資料集中的屬性和缺失值的屬性沒有關係,那麼模型將不能精確地估計缺失值
在該方法中,使用給定數量的與缺失值的屬性最相似的屬性進行缺失值的賦值。兩個屬性的相似性是通過距離函式來確定的。眾所周知,它也有一定的優勢和劣勢。
在訓練集train中做處理:當有資料集有很多列時,使用檢查統計缺失值:
train.isnull().sum()
刪除
train.dropna(inplace=true)
眾數插補:
train['gender'].fillna(train['gender'].mode()[0],inplace=true)
中位數插補:
train['loanamount'].fillna(train['loanamount'].median(), inplace=true)
平均數
train['loanamount'].fillna(train['loanamount'].mean(), inplace=true)
train.isnull().sum()
顯示不全,可以用下面**檢查缺失值情況
def
missing_value_table
(df)
:#計算所有的缺失值
mis_val = df.isnull().
sum(
)# %比
mis_val_percent =
100*df.isnull().
sum()/
len(df)
#合併 mis_val_table = pd.concat(
[mis_val,mis_val_percent]
,axis=1)
mis_val_rename = mis_val_table.rename(columns =
)#剔除沒有缺失值的列,然後排序
mis_val_rename = mis_val_rename[mis_val_rename.iloc[:,
1]!=0
].sort_values(
'% of total values'
,ascending=
false
)return mis_val_rename
參考資料:a comprehensive guide to data exploration
EDA 探索性資料分析
引導資料科學從業者進行資料處理以及特徵工程的步驟,使資料集的結構和特徵集讓接下來的 問題更加可靠。值得注意的是,eda過程中是對原始資料的特徵 統計特徵 分布特徵 相關性等 進行挖掘,但是沒有刪除或構造任何特徵 花式查詢,不包括增 刪 改 1 載入各種資料科學以及視覺化庫 資料科學庫 pandas ...
EDA(探索性資料分析)
1 什麼是eda分析?exploratory data analysis 在特徵 資料處理的過程中,對資料進行探索,找到他們之間的更多潛在關係。2 怎麼去做eda分析?主要是通過資料視覺化來顯示資料之間的關聯,從而對資料進行處理。首先,我們應該思考的是是否會出現下列問題 1 資料是否缺失,有沒有離群...
探索性資料EDA
import numpy as np import seaborn as sns import matplotlib.pyplot as plt from pandas import dataframe import pandas as pd from sklearn.datasets import...