task02 數(shù)據(jù)清洗及特征處理

【回顧&引言】前面一章的內(nèi)容大家可以感覺到我們主要是對(duì)基礎(chǔ)知識(shí)做一個(gè)梳理榜田,讓大家了解數(shù)據(jù)分析的一些操作瞒爬,主要做了數(shù)據(jù)的各個(gè)角度的觀察。那么在這里堪簿,我們主要是做數(shù)據(jù)分析的流程性學(xué)習(xí)棒旗,主要是包括了數(shù)據(jù)清洗以及數(shù)據(jù)的特征處理喘批,數(shù)據(jù)重構(gòu)以及數(shù)據(jù)可視化。這些內(nèi)容是為數(shù)據(jù)分析最后的建模和模型評(píng)價(jià)做一個(gè)鋪墊铣揉。

開始之前饶深,導(dǎo)入numpy、pandas包和數(shù)據(jù)

import numpy as np

import pandas as pd

df = pd.read_csv('train.csv')

df.head(3)

第二章:第一節(jié)數(shù)據(jù)清洗及特征處理

我們拿到的數(shù)據(jù)通常是不干凈的逛拱,所謂的不干凈敌厘,就是數(shù)據(jù)中有缺失值,有一些異常點(diǎn)等朽合,需要經(jīng)過(guò)一定的處理才能繼續(xù)做后面的分析或建模俱两,所以拿到數(shù)據(jù)的第一步是進(jìn)行數(shù)據(jù)清洗,本章我們將學(xué)習(xí)缺失值曹步、重復(fù)值锋华、字符串和數(shù)據(jù)轉(zhuǎn)換等操作,將數(shù)據(jù)清洗成可以分析或建模的亞子箭窜。

2.1 缺失值觀察與處理

我們拿到的數(shù)據(jù)經(jīng)常會(huì)有很多缺失值,比如我們可以看到Cabin列存在NaN衍腥,那其他列還有沒(méi)有缺失值磺樱,這些缺失值要怎么處理呢

2.1.1 任務(wù)一:缺失值觀察

(1) 請(qǐng)查看每個(gè)特征缺失值個(gè)數(shù)

(2) 請(qǐng)查看Age, Cabin婆咸, Embarked列的數(shù)據(jù) 以上方式都有多種方式竹捉,所以大家多多益善

df.info()

df.isnull().sum()

df[['Age','Cabin','Embarked']].head(3)

2.1.2 任務(wù)二:對(duì)缺失值進(jìn)行處理

(1)處理缺失值一般有幾種思路

(2) 請(qǐng)嘗試對(duì)Age列的數(shù)據(jù)的缺失值進(jìn)行處理

(3) 請(qǐng)嘗試使用不同的方法直接對(duì)整張表的缺失值進(jìn)行處理

df[df['Age']==None] =0

df[df['Age'].isnull()]=0

df[df['Age']==np.nan].head(3)

df.dropna(axis=0,how='any')

df.fillna(0)

【思考1】dropna和fillna有哪些參數(shù),分別如何使用呢??

DataFrame.dropna(self, axis=0, how='any', thresh=None, subset=None, inplace=False)

1尚骄、axis =0:刪除所在行 axis =1或者columns:刪除所在列

2块差、how=any:刪除任一個(gè)行/列 how=all:當(dāng)所有行/列為NA時(shí)才刪除

3、提高刪除NA的閾值倔丈。參數(shù)thresh=2憨闰,表示行/列中的NA數(shù)量大于2才刪除

4、參數(shù)subset設(shè)置待判斷的列/行名需五,這些列/行中有NA值則所在行/列被刪除

5鹉动、將處理后的df替換原本的df。參數(shù)inplace=True

DataFrame.fillna(self, value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

1宏邮、設(shè)定每列NA的填充值泽示。value為字典格式

2缸血、用前向值/后向值填充NA。method='fillna'表示NA被前一個(gè)值填充

3械筛、設(shè)定每列/行的填充數(shù)捎泻。limit=1表示每列/行僅僅填充1個(gè)NA

4、參數(shù)axis和inplace與dropna相同

【參考】https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html

【參考】https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html

【思考】檢索空缺值用np.nan,None以及.isnull()哪個(gè)更好埋哟,這是為什么笆豁?如果其中某個(gè)方式無(wú)法找到缺失值,原因又是為什么定欧?

2.2 重復(fù)值觀察與處理

由于這樣那樣的原因渔呵,數(shù)據(jù)中會(huì)不會(huì)存在重復(fù)值呢,如果存在要怎樣處理呢

2.2.1 任務(wù)一:請(qǐng)查看數(shù)據(jù)中的重復(fù)值

df[df.duplicated()]

2.2.2 任務(wù)二:對(duì)重復(fù)值進(jìn)行處理

(1)重復(fù)值有哪些處理方式呢砍鸠?

(2)處理我們數(shù)據(jù)的重復(fù)值

df.drop_duplicates()

df.head()

2.2.3 任務(wù)三:將前面清洗的數(shù)據(jù)保存為csv格式

df.to_csv('test_train_csv')

2.3 特征觀察與處理

我們對(duì)特征進(jìn)行一下觀察扩氢,可以把特征大概分為兩大類:

數(shù)值型特征:Survived ,Pclass爷辱, Age 录豺,SibSp, Parch饭弓, Fare双饥,其中Survived, Pclass為離散型數(shù)值特征弟断,Age咏花,SibSp, Parch阀趴, Fare為連續(xù)型數(shù)值特征

文本型特征:Name昏翰, Sex, Cabin刘急,Embarked棚菊, Ticket,其中Sex叔汁, Cabin统求, Embarked, Ticket為類別型文本特征据块,數(shù)值型特征一般可以直接用于模型的訓(xùn)練码邻,但有時(shí)候?yàn)榱四P偷姆€(wěn)定性及魯棒性會(huì)對(duì)連續(xù)變量進(jìn)行離散化。文本型特征往往需要轉(zhuǎn)換成數(shù)值型特征才能用于建模分析另假。

2.3.1 任務(wù)一:對(duì)年齡進(jìn)行分箱(離散化)處理

(1) 分箱操作是什么冒滩?

簡(jiǎn)單點(diǎn)說(shuō)就是將不同的東西,按照特定的條件放到一個(gè)指定容器里浪谴,比如水果 把綠色的放一個(gè)籃子里开睡,紅色一個(gè)籃子等等因苹,這個(gè)籃子就是箱,而水果就是數(shù)據(jù) 顏色就是條件

(2) 將連續(xù)變量Age平均分箱成5個(gè)年齡段篇恒,并分別用類別變量12345表示?

pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)

參數(shù): x扶檐,類array對(duì)象,且必須為一維胁艰,待切割的原形式

bins, 整數(shù)款筑、序列尺度、或間隔索引腾么。如果bins是一個(gè)整數(shù)奈梳,它定義了x寬度范圍內(nèi)的等寬面元數(shù)量,但是在這種情況下解虱,x的范圍在每個(gè)邊上被延長(zhǎng)1%攘须,以保證包括x的最小值或最大值。如果bin是序列殴泰,它定義了允許非均勻in寬度的bin邊緣于宙。在這種情況下沒(méi)有x的范圍的擴(kuò)展。

right,布爾值悍汛。是否是左開右閉區(qū)間

labels,用作結(jié)果箱的標(biāo)簽捞魁。必須與結(jié)果箱相同長(zhǎng)度。如果FALSE离咐,只返回整數(shù)指標(biāo)面元谱俭。

retbins,布爾值。是否返回面元

precision宵蛀,整數(shù)旺上。返回面元的小數(shù)點(diǎn)幾位

include_lowest,布爾值糖埋。第一個(gè)區(qū)間的左端點(diǎn)是否包含?

df['AgeBand'] = pd.cut(df['Age'],5,labels=[1,2,3,4,5]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? df.head()

(3) 將連續(xù)變量Age劃分為[0,5) [5,15) [15,30) [30,50) [50,80)五個(gè)年齡段,并分別用類別變量12345表示?

df['AgeBand1'] = pd.cut(df['Age'],5,right = False,labels =[1,2,3,4,5],include_lowest=True) df.head()


(4) 將連續(xù)變量Age按10% 30% 50% 70% 90%五個(gè)年齡段窃这,并用分類變量12345表示

df['AgeBand1'] = pd.cut(df['Age'],5,right = False,labels =[1,2,3,4,5],include_lowest=True) df.head()

(5) 將上面的獲得的數(shù)據(jù)分別進(jìn)行保存瞳别,保存為csv格式

【參考】https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.cut.html

【參考】https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.qcut.html

2.3.2 任務(wù)二:對(duì)文本變量進(jìn)行轉(zhuǎn)換

(1) 查看文本變量名及種類

#方法一: value_counts df['Sex'].value_counts()

#方法二: unique df['Sex'].unique()


df['Sex'].nunique()

(2) 將文本變量Sex, Cabin 杭攻,Embarked用數(shù)值變量12345表示

df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2]) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? df.head()

#方法二: map df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2}) ? ? ? ? ? ? ? ? ?df.head()

#方法三: 使用sklearn.preprocessing的LabelEncoder ? ? ?不怎么理解祟敛,需進(jìn)一步了解 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?from sklearn.preprocessing import LabelEncoder ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? for feat in ['Cabin', 'Ticket']: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?lbl = LabelEncoder() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?label_dict = dict(zip(df[feat].unique(), range(df[feat].nunique()))) ? ? ? ? ? ? ? ? ? ? ? ? ? ?df[feat + "_labelEncode"] = df[feat].map(label_dict) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? df[feat + "_labelEncode"] = lbl.fit_transform(df[feat].astype(str)) ? ? ? ? ? ? ? ? ? ? ? ? ? df.head()


(3) 將文本變量Sex, Cabin兆解, Embarked用one-hot編碼表示

#將類別文本轉(zhuǎn)換為one-hot編碼 ?不怎么理解馆铁,需進(jìn)一步了解?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

#方法一: OneHotEncoder?

for feat in ["Age", "Embarked"]:?

? ?# x = pd.get_dummies(df["Age"] // 6)?

? ?# x = pd.get_dummies(pd.cut(df['Age'],5))?

? ?x = pd.get_dummies(df[feat], prefix=feat)?

? ?df = pd.concat([df, x], axis=1)?

? ?#df[feat] = pd.get_dummies(df[feat], prefix=feat)?

df.head()



2.3.3 任務(wù)三:從純文本Name特征里提取出Titles的特征(所謂的Titles就是Mr,Miss,Mrs等)

df['Title'] = df.Name.str.extract('([A-Za-z]+)\.', expand=False) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?df.head()


#保存最終你完成的已經(jīng)清理好的數(shù)據(jù) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?df.to_csv('test_fin.csv')

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市锅睛,隨后出現(xiàn)的幾起案子埠巨,更是在濱河造成了極大的恐慌历谍,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辣垒,死亡現(xiàn)場(chǎng)離奇詭異望侈,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)勋桶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門脱衙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人例驹,你說(shuō)我怎么就攤上這事捐韩。” “怎么了鹃锈?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵荤胁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我仪召,道長(zhǎng)寨蹋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任扔茅,我火速辦了婚禮已旧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘召娜。我一直安慰自己运褪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布玖瘸。 她就那樣靜靜地躺著秸讹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雅倒。 梳的紋絲不亂的頭發(fā)上璃诀,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音蔑匣,去河邊找鬼劣欢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛裁良,可吹牛的內(nèi)容都是我干的凿将。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼价脾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼牧抵!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起侨把,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤犀变,失蹤者是張志新(化名)和其女友劉穎妹孙,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弛作,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡涕蜂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了映琳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片机隙。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖萨西,靈堂內(nèi)的尸體忽然破棺而出有鹿,到底是詐尸還是另有隱情,我是刑警寧澤谎脯,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布葱跋,位于F島的核電站,受9級(jí)特大地震影響源梭,放射性物質(zhì)發(fā)生泄漏娱俺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一废麻、第九天 我趴在偏房一處隱蔽的房頂上張望荠卷。 院中可真熱鬧,春花似錦烛愧、人聲如沸油宜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)慎冤。三九已至,卻和暖如春沧卢,著一層夾襖步出監(jiān)牢的瞬間蚁堤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工但狭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留披诗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓熟空,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親搞莺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子息罗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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