每日一學 如何處理缺失值

2021-08-18 18:58:23 字數 2905 閱讀 6250

今天學習kaggle上的缺失值處理課程,學習記錄,可能不太嚴謹,請指正。

觀察幾個樣本資料或者所有資料有無nan 或者none

1.1讀取資料,顯示資料,肉眼觀察

1.2 python中用下列方法

a.data.isnull( )   ----對整體的series或者dataframe判斷

isnan(data) ----對某一行進行判斷(這裡我也不是特別明白)

二者返回false和true,false代表沒有缺失值,true代表有缺失值

參考:b.統計有多少缺失值

missing_count = data.isnull( ).sum( )

返回每列中缺失值個數

c.統計缺失值佔比

total = np.product(data.shape) ---計算矩陣一共有多少個元素,行數乘以列數

missing = missing_count.sum( ) ---總共的缺失值的個數

(missing / total )*100 ---缺失值佔比(該統計用於判斷如何更好地處理缺失值)

判斷為什麼有有缺失值

2.1 確實不存在

2.2 未被記錄

3.1 整行或者整列刪除(一般不推薦該方法)

data.dropna( ) 或者 data.dropna(axis=0) 按行刪除,如果有缺失值的話,就把整行刪除

data.dropna(axis = 1) 按列刪除

3.2 資料補齊

3.2.1用「0」值代替缺失值(用值代替缺失值稱為imputation)

3.2.2 用同一列或者同一行的值代替缺失值

data.fillna(method = 'bfill',axis=0) ---將缺失值同一列後一行的值賦值給缺失值,對於沒有後一行的值仍然是缺失值

data.fillna(method = 'bfill',axis=0).fillna(0) ---將缺失值同一列後一行的值賦值給缺失值,對於沒有後一行的值用「0」填充

data.fillna(method = 'bfill',axis=1).fillna(0) ---將缺失值同一列後一行的值賦值給缺失值,對於沒有後一行的值用「0」填充

fillna 的用法可以參見

主要說下其中引數method:backfill/bfill:同列或者同行後一值填充,pad/ffill:同列或者同行前一值填充,預設是none(none這邊的意思是?看具體用什麼值填充嗎?如果fillna()括號裡沒有值的話會報錯的)

3.2.3 用均值、中位數、眾數代替nan值

參見:imputer 用法

from sklearn.preprocessing import imputer

my_imputer = imputer( )

data_imputer = my_imputer.fit_transform(data)

imputer引數中有個strategy:mean(用均值填充),median(用中位數填充),most_frquent(用眾數填充),預設值是mean,用均值填充

3.2.4 有時3.4的方法得到的替代值高於或者低於實際值(可能有些真實值並未採集到,在資料中無法體現),或者缺失值在某方面具有唯一性。(直譯,還沒完全理解該方法)

a.複製資料以防更改原資料

new_data = data.copy( )

b.新增一列,推算出缺失值可能的值

cols_with_missing = (col for col in new_data.columns

if new_data[c],isnull( ).any( ))

for col in cols_with_missing:

new_data[col+'_was_missing'] = new_data[col].isnull( )

my_imputer = imputer( )

new_data = my_imputer.fit_transform

還有其他很多處理方法,詳見:

3.3 不處理

直接在包含空值的資料上進行資料探勘。這類方法包括貝葉斯網路和人工神經網路等。

貝葉斯網路是用來表示變數間連線概率的圖形模式,它提供了一種自然的表示因果資訊的方法,用來發現資料間的潛在關係。在這個網路中,用節點表示變數,有向邊表示變數間的依賴關係。貝葉斯網路僅適合於對領域知識具有一定了解的情況,至少對變數間的依賴關係較清楚的情況。否則直接從資料中學習貝葉斯網的結構不但複雜性較高(隨著變數的增加,指數級增加),網路維護代價昂貴,而且它的估計引數較多,為系統帶來了高方差,影響了它的**精度。當在任何乙個物件中的缺失值數量很大時,存在指數**的危險。

人工神經網路可以有效的對付空值,但人工神經網路在這方面的研究還有待進一步深入展開。人工神經網路方法在資料探勘應用中的侷限性。這種做法的缺點是在模型的選擇上有侷限

pandas中如何處理缺失值

大多機器學習演算法不能處理缺失的特徵,因此先建立一些函式來處理特徵缺失的問題。當在一些.csv檔案中缺少某些值的時候,一般有三種方法解決 1 去掉對應的整個屬性 2 去掉缺失值所在的資料 3 將缺失值進行賦值 在pandas中,用 dataframe 的 dropna drop 和 fillna 方...

決策樹 缺失值如何處理

參考部落格 決策樹如何處理缺失值?也就是面對兩個問題 1 如果樣本某個屬性有缺失值,那麼怎麼計算使用這個屬性劃分結點時的資訊增益呢?2 在第一步的基礎上,即使資訊增益計算出來了,那麼由於樣本這一屬性值缺失了,應該將這一樣本劃分到哪個子結點呢?我們分別來看一下訓練集 測試集上怎麼處理缺失值。訓練集 對...

eviews如何處理缺失資料填補 缺失值的處理

一 缺失值產生的原因 缺失值的產生的原因多種多樣,主要分為機械原因和人為原因。機械原因是由於機械原因導致的資料收集或儲存的失敗造成的資料缺失,比如資料儲存的失敗,儲存器損壞,機械故障導致某段時間資料未能收集 對於定時資料採集而言 人為原因是由於人的主觀失誤 歷史侷限或有意隱瞞造成的資料缺失,比如,在...