用数据分析看泰坦尼克号
作為R語言的初學者,你是否也曾覺得看書看教程覺得so easy,但到了實際操作卻無從下手了呢?沒(hu)關(you)系(ni)……那都是假的,哈哈哈,好啦,我們還是多多實戰才是硬道理。
本文引用的數據集 - - Titanic Machine Learning from Disaster(被譽為五大最適合數據分析練手項目之一)就非常適合我們進行練手,當然我們接下來要講的并不是“you jump, I jump”的感人故事,而是“you dead I survived”的分析故事,那么我們就要看看到底怎樣的乘客才能成為幸運女神的寵兒呢?
1. 讀取數據
訓練集train與測試集test有11變量是相同的,而唯一不同的地方是test里面沒有Survived變量,為了方便接下來的數據處理,我們將兩數據集進行合并。
2. 加載所需程序包
- library(dplyr)
- library(stringr)
- library(VIM)
- library(mice)
- library(ggplot2)
- library(caret)
- library(randomForest)
3. 缺失值探索
合并后的full數據集里Survived變量含有481個缺失值(test集里不含有Survived變量,因此合并后使得full集有481個缺失值),Age變量有263個缺失值(多重插補法處理),Fare變量有1個缺失值(均值填補),Embarked變量有2個缺失值(眾數填補),Cabin變量含有1014個缺失值(缺失值太多,刪除處理)。
4. 缺失值處理
我們觀察到Age變量的缺失值高達263個,用均值替代或者刪除都會對結果產生較大的影響,因此我們將通過mice包對Age變量的缺失值進行插補,結果如上圖所示,插補后Age均值為29.57歲,最小的為0.17歲,最老的為80歲。
對Embarked變量和Fare變量的缺失值進行填補,因為只有兩個和1個的缺失值,因此我們考慮用眾數(Embarked變量為chr)和均值(Fare變量為int)的方式直接填補。Embarked變量的眾數為S,因此直接用S替代缺失值,結果如上圖所示。Fare變量在用均值填補時,要注意的一點是在進行均值處理是時,”na.rm = TRUE”不能忘,不然得出來的均值會是na值。最后我們用summary看一下處理過后的數據,除了Survived變量的481個缺失值外,其他的變量都漂漂亮亮的了,當然Cabin變量的1014個缺失值并沒有進行處理,因為待會我們會直接刪掉它,結果如下圖所示。
5. 特征值選取與描述性分析
- Title VS Survived
Title變量是從Name變量中提取出來的,因為我們觀察到Name變量除了中間的稱呼外,沒有太多的共同點,對分析沒有太多價值,因此將稱呼提取出來進行分析。結果如下圖所示,可以發現不同的Title的幸存率還是有很大差距。
- Pclass,Sex,Pclass&Sex VS Survived
Pclass變量對幸存率的影響還是挺大的,一等艙和二等艙的幸存率挺高的,而三等艙的死亡率卻高達 75 %,由此我們不得不說“天下武功,唯富不破”,我們還是要努力賺錢啊!
Sex變量對幸存率的影響就不用說太多了,女士優先,因此我們可以看到女性的死亡率只有25%左右,而男性的死亡率卻高達75%。
分析完Pclass變量與Sex變量對幸存率的影響,小文突發奇想,會不會幸存率比較高的女性都在一二等艙呢?因此將Pclass與Sex進行合并分析,結果還是很令人滿意的,一二等艙的女士幸存率都接近100%,連死亡率較高的三等艙的女士生存率也接近50%。
- Fare VS Survived
(a)圖是Fare變量的分布,可以看到大部分人的票價都在100以下,其中還有很大一部分是免費上船的;(b)圖是Fare變量對幸存率的影響,可以看到票價高的乘客幸存率也較高,這與上面Pclass對幸存率的影響趨勢一致。
- Age VS Survived
Age變量的分布比較廣,由 0歲到80歲不等,直接分析沒太大意義,因此將其分為未成年人與成年人兩組進行統計分析。結果表明,未成年人的幸存率比成年人的高。
- Familysize(FS)VS Survived
一開始小文對數據集中的SibSp變量與Parch變量搞不清楚,怒小文的英語水平有限,查看了字典之后才發現原來是兄弟姐妹老婆孩子的意思,那好辦,我們建立一個新的變量,命名為Fsize,Fsize = SibSp + Parch + 1,并將家庭的人數分為單身,小家庭,大家庭進行分組統計分析。結果表明,家庭人數對幸存率的影響還是比較明顯的。
- Embarked VS Survived
6. 建模
通過上述的特征值提取與描述性分析,我們知道Title,Pclass,Sex,PS,FS,AG,Fare,Emarked變量對幸存率的影響還是比較明顯的,因此在建模預測之前,先用randomForest進行特征變量分析,看看其中哪些變量影響力更大。(在特征變量分析之前,需將所有的變量轉化為因子變量,不然會出錯)
特征變量提取之后,分別用樸素貝葉斯算法與隨機森林算法對測試集進行預測,結果表明,樸素貝葉斯分類器的正確率為98.80%,在418個測試集中只有5個乘客預測錯誤,分別是兩個未幸存者錯誤歸類到幸存者當中,3個幸存者錯誤歸類到未幸存者中;而隨機森林分類器的預測正確率比樸素貝葉斯要低一點點,為97.61%,有10個乘客預測錯誤,其中有4個未幸存者錯誤歸類到幸存者當中,6個幸存者錯誤歸類到未幸存者中。
總體而言兩個模型表現得還不錯,有興趣的讀者可以繼續探討各種變量之間的關系,塑造更多有意思的變量組合,提高正確率,不說了,小文要趕緊把結果上傳到kaggle,看看能不能排得上號……
總結
以上是生活随笔為你收集整理的用数据分析看泰坦尼克号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pytorch 微调(Fine-tuni
- 下一篇: 二战三跨考生的血与泪,交大电通两年记录