文科生學Python系列16:泰坦尼克數(shù)據(jù)2(缺失值處理)

第八課:案例分析 - 泰坦尼克數(shù)據(jù)

本節(jié)課將重點分析泰坦尼克號沉船事故,我們將探索是什么因素決定了最后是否生還蜕依。

我們將將前面課程所學過的知識點融會貫通,舉一反三

新增知識點:

? ? ? ?缺失值處理:pandas中的fillna()方法

? ? ? ?數(shù)據(jù)透視表:pandas中的pivot_table函數(shù)

我們上一篇文章用以前的知識將泰坦尼克案例的前面數(shù)據(jù)簡單操作了一番辩尊,剩下的內容會有新的知識點赎婚,不知道一篇文章裝不裝得下,來了熬料瘛紫谷!正文:


2、缺失值處理

真實數(shù)據(jù)往往某些變量會有缺失值捐寥。

首先笤昨,我們用 info( ) 語句操作,看到整份數(shù)據(jù)的大概情況:

titanic_df.info()

從這份數(shù)據(jù)我們可以發(fā)現(xiàn)握恳,這里一共有 891 行數(shù)據(jù)瞒窒,所以在中間那一列數(shù)據(jù)中看到的不是 891 個數(shù)據(jù)的,都是有缺失值的乡洼。比如年齡Age這一列崇裁,有714個非空數(shù)值,就有 891-714=177 個缺失值束昵。又比如船艙號碼 cabin寇壳,缺失值就更多了。登船碼頭的缺失值比較少妻怎,后面可以不用處理壳炎。

這些缺失值是怎么處理的呢?一般是三種處理方法:不處理/丟棄/填充逼侦。

這里匿辩,cabin有超過70%以上的缺失值,我們可以考慮直接丟掉這個變量榛丢。 -- 刪除某一列數(shù)據(jù)

像Age這樣的重要變量铲球,有20%左右的缺失值,我們可以考慮用中位值來填補晰赞。-- 填補缺失值

我們一般不提倡去掉帶有缺失值的行稼病,因為其他非缺失的變量可能提供有用的信息。-- 刪除帶缺失值的行

刪除帶缺失值的行(一般不建議):df.dropna( )

刪除某一列:df.drop('column_name', axis=1, inplace=True)

填充缺失值:df.column_name.fillna( )

axis=1掖鱼,代表刪除的是一列的數(shù)據(jù)然走,也就是 column_name 這一列。inplace=True戏挡,表示在 df 這個原始數(shù)據(jù)上面進行修改芍瑞。

其實我們這節(jié)課重點的是最后一個:填充缺失值。fill 是填充褐墅,na 是缺失值的代稱拆檬。

我們在 info( ) 這個運行中可以看到 Age 的缺失值不少洪己,下面將使用中位數(shù)來填充 缺失值。


填補年齡數(shù)據(jù)中的缺失值

直接使用所有人年齡的中位數(shù)來填補

為了方便后面的比較竟贯,我們首先用 describe 統(tǒng)計數(shù)據(jù)答捕。

查看Age列的統(tǒng)計值

這份數(shù)據(jù)照樣是可以看到,非缺失值 count 是有 714屑那,平均值 mean 是 29.6歲噪珊,標準差 std 是 14.5,這時可以注意一下 50% ?那個數(shù)據(jù):28齐莲。

中位數(shù)

為了防止數(shù)據(jù)有改動,我們在開始之前需要重新載入數(shù)據(jù)磷箕。

正確的中位數(shù)可以使用 median 的方法獲取选酗,得到的數(shù)和上面的 50% 的數(shù)是一樣的。

填充年齡缺失值

把中位數(shù)賦值給 age_median1岳枷,這個操作體現(xiàn)在第二行代碼芒填。我的理解是,要是這里不重新賦值的話空繁,后面需要用到這個中位數(shù)的時候殿衰,就需要完整碼出 titanic_df.Age.median( ) 這一句,重新賦值就可以直接使用 age_median1 來代替稍微長一點的句子了盛泡。

titanic_df.Age.fillna(age_median1,inplace=True) 中闷祥,因為使用到Age這列數(shù)據(jù),然后用 fillna 來實現(xiàn)填充傲诵,所以語句用 titanic_df.Age.fillna( ) 來表達凯砍,括號里面需要填的參數(shù)就是需要填充的值,也就是里面的缺失值都是由剛剛賦值的 age_median1 來代替拴竹。逗號后面再加上inplace=True悟衩,表示在原來的 df 數(shù)據(jù)中進行修改了,如果不加上這個參數(shù)栓拜,就需要把填充后的值重新賦值給 Age 這一列座泳,所以 inplace 這個動作是為了簡單起見。

再來看我們得到的結果幕与,這個時候的非空缺失值已經變成了891挑势,平均值也從原本的29.7降到了29.4,因為我們剛剛填充的中位數(shù)是28啦鸣,比原來的平均值小薛耻,所以會有所新的平均值也會有所下降。

上面講的是所有人的年齡中位數(shù)赏陵,現(xiàn)在我們進一步來思考:性別因素饼齿,會怎么影響結果呢饲漾?


考慮性別因素,分別用男女乘客各自年齡的中位數(shù)來填補

由于上面的操作已經對原始數(shù)據(jù)進行修改了缕溉,所以要是我們需要重新分類考传,那就要重新載入原始數(shù)據(jù),不然后面的操作都會以上一步填充了所有年齡缺失值的基礎上操作的哦证鸥!這個虧我吃過僚楞。。枉层。

性別的中位數(shù)

我們得到的女性中位數(shù)是 27泉褐,男性的是 29,還是有差距的吧鸟蜡!我們后面需要用到的是膜赃,用得出的中位數(shù)來填充男女的缺失值。

接下來的步驟揉忘,按照以前跳座,通常的思路是用布爾型索引取到女性中缺失值的數(shù)據(jù),然后用 27 重新賦值泣矛;同理可求男性的操作疲眷。

但是我們這節(jié)課學了fillna 這個新的方法啊您朽!

不過剛剛我們使用 fillna 的時候狂丝,填充的只是一個數(shù)值,這里不止一個數(shù)值哗总,就需要根據(jù)不同的情況來填充美侦。此時可以用到 Pandas 中里的一個小技巧,Pandas 的值在運算的過程中魂奥,會根據(jù)索引的值來進行自動的匹配菠剩。在這里我們可以看到這里的索引是 female 和 male 兩個值,如果原始數(shù)據(jù)也可以用性別來進行索引的話耻煤,就可以用 fillna 自動匹配相應的索引形式進行填充了具壮。

fillna 進行性別分類索引

所以這里要對原來的數(shù)值重新設置索引,一開始是 0 1 2 這樣的數(shù)值哈蝇,現(xiàn)在要把它設置成性別這一列數(shù)據(jù)棺妓。用 set_index 語句,用 Sex 來進行索引炮赦,同時加入參數(shù) inplace=True怜跑,表示在原來的數(shù)據(jù)上進行修改。

inplace=True的含義應該講了第三遍了,其實我覺得要是不是很明白這個語句的用法時性芬,你可以先不加上這一句峡眶,跟著打代碼,然后到后面運行的哪一步你發(fā)現(xiàn)和老師的代碼不一樣的時候植锉,你就知道這個語句的重要性了辫樱。

我們可以看到這里的運行結果 列索引變成了 Sex,列首索引是 male 和 female 俊庇,在行首 Sex 已經不存在了狮暑。

填充性別分類的缺失值

我們將這里分類中位數(shù)賦值為 age_median2。填充的套路和上面也是一樣一樣的辉饱,根據(jù) Pandas 的自動匹配搬男,填充的時候會根據(jù)索引來匹配不同的值了。因為后續(xù)需要用到 Sex 這一列彭沼,所以這里也需要重置索引缔逛,將索引變成它的列。這里使用 reset_index溜腐。

非空值是 891 時就說明缺失值全部填充完畢了,這時候的均值是29.4瓜喇。

所以到這里挺益,我們把性別分類的缺失值也用各自的中位數(shù)填充完畢了。下一步要考慮的是乘寒,同時兩個因素的影響:


同時考慮性別和艙位因素

那我們首先來看一下望众,在不同年齡和不同艙位的中位數(shù),有什么變化呢伞辛?

groupby 分組的對象分別是 Pclass 艙位 和 Sex 性別烂翰,由于這里需要考量的有兩個因素:性別和艙位,所以這里需要使用到中括號蚤氏,后面加上用 Age.median 就可以得到分組的中位數(shù)了甘耿。

不同艙位男女年齡的中位數(shù)

這里就有兩個索引,分別是艙位和性別竿滨,我們可以看到佳恬,隨著艙位的下降,它的年齡也是在下降的于游。用我們的話理解就是毁葱,年輕人普遍比年長的窮啊,年齡大一點的人積累的財富也多一點贰剥。

那接下來我們就用得出的中位數(shù)來各自重新賦值給艙位和性別倾剿。這時還是可以用 fillna 的,但是需要設置二重索引蚌成。

艙位和年齡的分類

套路還是一樣的前痘,把這里得出的中位數(shù)賦值為 age_median3凛捏,然后對索引進行重新的賦值,同樣的际度,這里有兩個因素葵袭,也是使用中括號,用 set_index 的方法乖菱。

然后來看一下重置索引后的數(shù)據(jù)坡锡。看輸出我們是可以看到二重索引的窒所,第一列的組合內容一共有 3*2=6 種情況鹉勒。在列上面,已經沒有 Pclass 和 Sex 兩列數(shù)據(jù)了吵取,因為此刻它們已經在索引上了禽额。

現(xiàn)在按同樣的方法 fillna ,用索引值來匹配不同的中位數(shù)皮官。

額脯倒。。捺氢。這兩張看起來和上面的一毛一樣啊藻丢,是我哪里錯了嗎。摄乒。悠反。?

為了還原這樣的索引馍佑,這里用 reset來重置

分類填充結果

這里的輸出可以看到非空數(shù)值已經是891了斋否,表示已經填滿缺失值了。平均值下降到了29.1歲拭荤,因為三等艙的人數(shù)比較多茵臭,而且年齡比較小,所以拉低了平均值舅世。

我們總結一下笼恰,這里使用的 fillna 的方法,可以對總體的中位數(shù)進行操作歇终,或者分類之后對中位數(shù)進行操作社证。分組之后由于有索引,所以同時也需要對原始數(shù)據(jù)進行索引评凝,對于相同索引值追葡,可以用匹配來進行填充。


在課堂答疑的時候,有同學問為什么要用中位數(shù)來填充缺失值呢宜肉?

老師回答其實也是可以用平均值來填充的匀钧,這里的中位數(shù)和平均值相差不大,極端值不明顯谬返。中位數(shù)在老師看來比較能夠表示人群的屬性之斯,老師舉了我國的人均收入這個例子,是用均值還是中位數(shù)比較好呢遣铝?要是用均值的話佑刷,大家都在拖后腿了。酿炸。瘫絮。

然后有同學問,設置索引有什么作用填硕?

老師回答:設置索引有匹配的作用麦萤,在剛剛男性和女性的分類中,就可以通過男性的屬性來匹配男性的中位數(shù)扁眯,女性的來匹配女性的中位數(shù)壮莹。通過第一個例子可以看到fillna 要是沒有索引的話,會給所有的數(shù)值都填充相同的一個值姻檀。


后面還有一大半內容命满。。施敢。老師說了這節(jié)課是一個加量的全家桶周荐,明天繼續(xù)更新后面的吧狭莱。僵娃。。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末腋妙,一起剝皮案震驚了整個濱河市默怨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌骤素,老刑警劉巖匙睹,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異济竹,居然都是意外死亡痕檬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門送浊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梦谜,“玉大人,你說我怎么就攤上這事⊙渥” “怎么了闭树?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長荒澡。 經常有香客問我报辱,道長,這世上最難降的妖魔是什么单山? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任碍现,我火速辦了婚禮,結果婚禮上饥侵,老公的妹妹穿的比我還像新娘鸵赫。我一直安慰自己,他們只是感情好躏升,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布辩棒。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上歧蕉,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天臂痕,我揣著相機與錄音,去河邊找鬼刀闷。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的复凳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼灶泵,長吁一口氣:“原來是場噩夢啊……” “哼育八!你這毒婦竟也來了?” 一聲冷哼從身側響起赦邻,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤髓棋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后惶洲,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體按声,經...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年恬吕,在試婚紗的時候發(fā)現(xiàn)自己被綠了签则。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡铐料,死狀恐怖渐裂,靈堂內的尸體忽然破棺而出侨颈,到底是詐尸還是另有隱情,我是刑警寧澤芯义,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布哈垢,位于F島的核電站,受9級特大地震影響扛拨,放射性物質發(fā)生泄漏耘分。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一绑警、第九天 我趴在偏房一處隱蔽的房頂上張望求泰。 院中可真熱鬧,春花似錦计盒、人聲如沸渴频。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卜朗。三九已至,卻和暖如春咕村,著一層夾襖步出監(jiān)牢的瞬間场钉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工懈涛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逛万,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓批钠,卻偏偏與公主長得像宇植,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子埋心,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容