數(shù)據(jù)預(yù)處理_缺失值

一冲茸、缺失值處理

  • 數(shù)據(jù)缺失主要包括記錄缺失和字段信息缺失等情況奠涌,其對數(shù)據(jù)分析會有較大影響邪乍,導(dǎo)致結(jié)果不確定性更加顯著
  • 缺失值處理方法:
    • 丟棄 → 刪除
    • 插補(bǔ) → 均值降狠、中位數(shù)对竣、眾數(shù)插補(bǔ) / 臨近值插補(bǔ) / 插值法
    • 不處理
# 設(shè)置cell多行輸出

from IPython.core.interactiveshell import InteractiveShell 
InteractiveShell.ast_node_interactivity = 'all' #默認(rèn)為'last'

# 導(dǎo)入相關(guān)庫
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import os
import warnings

warnings.filterwarnings('ignore')
os.chdir(r'E:\python_learn\data')
file_name = 'iris-data.csv'
iris_data = pd.read_csv(file_name,engine='python')
iris_data.head()
image.png

本次缺失值處理使用的數(shù)據(jù)集為修改過的鳶尾花卉數(shù)據(jù),將對該數(shù)據(jù)集進(jìn)行缺失值處理處理喊熟。其中柏肪,
sepal_length_cm為花萼長度
sepal_width_com為花萼寬度
petal_length_cm為花瓣長度
petal_length_cm為花瓣寬度
class為鳶尾花類別

通過這4個數(shù)據(jù),能判斷并分類出3種鳶尾花的類別芥牌。

# 查看數(shù)基本結(jié)構(gòu)
iris_data.info()

# 一共150條數(shù)據(jù)烦味,5個字段
# 從返回基本結(jié)構(gòu)可以看到除了class字段,其他字段都含有缺失值
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150 entries, 0 to 149
Data columns (total 5 columns):
sepal_length_cm    147 non-null float64
sepal_width_cm     148 non-null float64
petal_length_cm    144 non-null float64
petal_width_cm     144 non-null float64
class              150 non-null object
dtypes: float64(4), object(1)
memory usage: 5.9+ KB
# 缺失值判斷
iris_data.isna().sum()
sepal_length_cm    3
sepal_width_cm     2
petal_length_cm    6
petal_width_cm     6
class              0
dtype: int64

1.1丟棄處理

(1)丟棄處理

→用pandas的dropna()方法壁拉,刪除含NaN的行或列

  • 刪除帶缺失值記錄或列字段谬俄,雖減少缺失值對樣本的影響,但也意味著減少數(shù)據(jù)特征弃理。

  • @B邸!面對以下2種情況不宜丟棄處理缺失值:

    • 缺失值超過比例較大痘昌,超過10%
    • 帶缺失值的label標(biāo)簽主要集中于某一類或幾類钥勋,刪除會使樣本丟失大量特征信息
iris_dropna_1 = iris_data.dropna()    # 缺失值刪除處理
# 默認(rèn)how=any,axis=0辆苔,行記錄任意出現(xiàn)NaN就刪除行記錄

iris_dropna_1.isna().sum()  
iris_dropna_1.isna().sum().sum()  # 缺失值檢查
sepal_length_cm    0
sepal_width_cm     0
petal_length_cm    0
petal_width_cm     0
class              0
dtype: int64

0
iris_dropna_2 = iris_data.dropna(how='all')  # 缺失值刪除處理
# how=all算灸,當(dāng)整行記錄都為NaN才刪除記錄

iris_dropna_2.isna().sum()  
iris_dropna_2.isna().sum().sum()  # 缺失值檢查,發(fā)現(xiàn)并沒有刪除驻啤,表示不存在整行都為NaN的情況
sepal_length_cm    3
sepal_width_cm     2
petal_length_cm    6
petal_width_cm     6
class              0
dtype: int64

17

因本次演練數(shù)據(jù)集樣本量較少菲驴,不選擇刪除缺失值的處理方法

1.2插補(bǔ)處理

當(dāng)數(shù)據(jù)集不宜采用丟棄的方法處理缺失值時,可以使用插補(bǔ)的方法補(bǔ)全缺失值骑冗。

(1)均值/中位數(shù)/眾數(shù)插補(bǔ)

→ pandas的fillna()方法

iris_fillna_1 = iris_data.fillna(iris_data.median())  # 在不確定是否存在異常值時赊瞬,此處選擇時候中位數(shù)填補(bǔ)
iris_fillna_1.isna().sum()
sepal_length_cm    0
sepal_width_cm     0
petal_length_cm    0
petal_width_cm     0
class              0
dtype: int64

→ sklearn.impute的SimpleImputer數(shù)據(jù)預(yù)處理方法

from sklearn.impute import SimpleImputer
iris_nan_model = SimpleImputer(missing_values=np.nan,strategy='median')   # 用中位數(shù)替換NaN
iris_nan_result = iris_nan_model.fit_transform(np.array(iris_data)[:,:4]) # 應(yīng)用模型,數(shù)據(jù)以數(shù)組形式傳入
iris_result = pd.DataFrame(iris_nan_result,columns=['sepal_length_cm','sepal_width_cm','petal_length_cm','petal_width_cm'])

iris_result.isna().sum()
iris_result.isna().sum().sum()
sepal_length_cm    0
sepal_width_cm     0
petal_length_cm    0
petal_width_cm     0
dtype: int64

0

(2)臨近值插補(bǔ)

→pandas的fillna()方法,設(shè)置method參數(shù)贼涩;method=ffill,用前面值替換NaN巧涧;method=bfill,用后面值替換NaN

iris_data.head()
iris_fillna_2 = iris_data.fillna(method='ffill')
iris_fillna_2.head()

iris_result.isna().sum()
iris_result.isna().sum().sum()
image.png
sepal_length_cm    0
sepal_width_cm     0
petal_length_cm    0
petal_width_cm     0
dtype: int64

0

(3)插值法

→ 拉格朗日插值法:將缺失函數(shù)值對應(yīng)的點x代入插值多項式得到缺失值的近似值L(x)

from scipy.interpolate import lagrange   # 導(dǎo)入拉格朗日插值函數(shù)

iris_lagrange = iris_data.copy()  # 復(fù)制一份原數(shù)據(jù),用于操作
print(iris_lagrange.head())

# 自定義列向量插值函數(shù)
# s為列向量遥倦,n為被插值的位置褒侧,k為取前后的數(shù)據(jù)個數(shù),默認(rèn)為5
def ployinterp_columnn(s,n,k=5):
    y = s[list(range(n-k,n))+list(range(n+1,n+1+k))]   # 取數(shù)
    y = y[y.notna()]                                    # 剔除空值
    return lagrange(y.index,list(y))(n)                 # 插值并返回插值結(jié)果

# 逐個元素判斷是否需要插值
for i in iris_lagrange.columns:
    for j in range(len(iris_lagrange)):
        if (iris_lagrange[i].isna())[j]:
            iris_lagrange[i][j] = ployinterp_columnn(iris_lagrange[i],j)

iris_lagrange.isna().sum()
iris_lagrange.isna().sum().sum()  # 缺失值檢查
print(iris_lagrange.head())
   sepal_length_cm  sepal_width_cm  petal_length_cm  petal_width_cm  \
0              5.1             3.5              1.4             0.2   
1              4.9             3.0              1.4             0.2   
2              4.7             3.2              1.3             NaN   
3              4.6             3.1              1.5             0.2   
4              5.0             3.6              1.4             0.2   

         class  
0  Iris-setosa  
1  Iris-setosa  
2  Iris-setosa  
3  Iris-setosa  
4  Iris-setosa  





sepal_length_cm    0
sepal_width_cm     0
petal_length_cm    0
petal_width_cm     0
class              0
dtype: int64






0



   sepal_length_cm  sepal_width_cm  petal_length_cm  petal_width_cm  \
0              5.1             3.5              1.4        0.200000   
1              4.9             3.0              1.4        0.200000   
2              4.7             3.2              1.3        0.273333   
3              4.6             3.1              1.5        0.200000   
4              5.0             3.6              1.4        0.200000   

         class  
0  Iris-setosa  
1  Iris-setosa  
2  Iris-setosa  
3  Iris-setosa  
4  Iris-setosa  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谊迄,一起剝皮案震驚了整個濱河市闷供,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌统诺,老刑警劉巖歪脏,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粮呢,居然都是意外死亡婿失,警方通過查閱死者的電腦和手機(jī)钞艇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來豪硅,“玉大人哩照,你說我怎么就攤上這事±粮。” “怎么了飘弧?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長砚著。 經(jīng)常有香客問我次伶,道長,這世上最難降的妖魔是什么稽穆? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任冠王,我火速辦了婚禮,結(jié)果婚禮上舌镶,老公的妹妹穿的比我還像新娘柱彻。我一直安慰自己,他們只是感情好餐胀,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布哟楷。 她就那樣靜靜地躺著,像睡著了一般骂澄。 火紅的嫁衣襯著肌膚如雪吓蘑。 梳的紋絲不亂的頭發(fā)上惕虑,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天坟冲,我揣著相機(jī)與錄音,去河邊找鬼溃蔫。 笑死健提,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伟叛。 我是一名探鬼主播私痹,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼统刮!你這毒婦竟也來了紊遵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤侥蒙,失蹤者是張志新(化名)和其女友劉穎暗膜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鞭衩,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡学搜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年娃善,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瑞佩。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡聚磺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出炬丸,到底是詐尸還是另有隱情瘫寝,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布御雕,位于F島的核電站矢沿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏酸纲。R本人自食惡果不足惜捣鲸,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望闽坡。 院中可真熱鬧栽惶,春花似錦、人聲如沸疾嗅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽代承。三九已至汁蝶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間论悴,已是汗流浹背掖棉。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留膀估,地道東北人幔亥。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像察纯,于是被迫代替她去往敵國和親帕棉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 個人不建議填充缺失值饼记,建議設(shè)置啞變量或者剔除該變量香伴,填充成本較高 常見填充缺失值的方法: 1.均值、眾數(shù)填充具则,填充...
    slade_sal閱讀 4,868評論 0 0
  • 一即纲、認(rèn)識缺失值 在我們的數(shù)據(jù)分析過程中,經(jīng)常會碰到缺失值的情況乡洼。缺失值產(chǎn)生的原因很多崇裁,比如人工輸入失誤匕坯,系統(tǒng)出錯,...
    鳴人吃土豆閱讀 6,098評論 0 11
  • 數(shù)據(jù)預(yù)處理 原因在數(shù)據(jù)挖掘中拔稳,海量的原始數(shù)據(jù)中存在著大量不完整(有缺失值)葛峻、不一致、有異常的數(shù)據(jù)巴比,嚴(yán)重影響到數(shù)據(jù)挖...
    張雅琛閱讀 810評論 0 1
  • 數(shù)據(jù)預(yù)處理步驟有數(shù)據(jù)清洗术奖、數(shù)據(jù)集成、數(shù)據(jù)變換轻绞、數(shù)據(jù)規(guī)約采记。實際工作中不是每一步都必須。 版本一: 缺失值處理對于缺失...
    apricoter閱讀 3,421評論 0 8
  • 原文首發(fā)于我的博客歡迎關(guān)注 當(dāng)我們拿到一批數(shù)據(jù)的時候政勃,往往都是“不干凈”的唧龄,而缺失值是最常見也是最容易發(fā)現(xiàn)的。不同...
    tikyle閱讀 11,597評論 0 8