泰坦尼克事件探秘


泰坦尼克事件被一再提起,因為這次沉船事件的戲劇化的悲劇色彩,一瞬間華麗到幻滅的無常都使人嗟嘆不已。只是沒想到在R語言的學習中,竟然也要再次觸碰這場事件。第一次接觸kaggle,一個為開發(fā)商和數(shù)據(jù)科學家提供舉辦機器學習競賽、托管數(shù)據(jù)庫、編寫和分享代碼的平臺,入門第一步就是從泰坦尼克事件中的數(shù)據(jù)分析開始。

拜讀了PPV課大數(shù)據(jù)的文章之后,也試圖結(jié)合自己的思考模仿做一下數(shù)據(jù)分析。

首先下載和加載數(shù)據(jù)包:

在Kaggle上,有三個csv可供下載:train.csv,test.csv,gender_submission.csv.


在train.csv中有891個觀測值(行),每個觀測值有12個變量。test.csv較小,只有418名乘客的命運需要預測,且只有11個變量,這是因為“Survived”列缺失了。這就是我們想要預測的列。

一、首先預測看下觀測數(shù)據(jù)中的存活率:

table(train$Survived)01549342

0代表死亡,1代表存活,從此看出,多數(shù)人未能存活。但就此來預測未免太粗略了。

二、泰坦尼克號事件中比較著名的“婦女和孩子先走”,先來看看是否如此。先看船上男女數(shù)量:

> table(train$Sex)

female? male? ? 314? ? 577

顯然女性乘客數(shù)量遠少于男性,所以用存活的男女數(shù)量比較是得不出想要的結(jié)果的。想知道男女分別存活的比率才是我們想要的。

prop.table(table(train$Sex, train$Survived),1)

? ? ? ? ? ? ? ? 0? ? ? ? 1?

female 0.2579618 0.7420382? male? 0.8110919 0.1889081

女性74.2%存活,而男性只有19%存活。

接著來看一下年齡因素的影響。

> prop.table(table(train$Child,train$Survived),1)

summary(train$Age)?

Min. 1st Qu.? Median? ? Mean 3rd Qu.? ? Max.? ? NA's? ? 0.42? 20.12? 28.00? 29.70? 38.00? 80.00? ? 177

缺失的記錄達177份,我們可以用年齡的均值來填補這些缺失值。我們把成人定義為18歲以上的人,孩子定義為18歲及以下的人,來對所有人作個歸類。

> train$Child<-"adult"> train$Child[train$Age<18]<-"child"

年齡的均值為29.7歲,大于18歲,屬性child已被設(shè)為“adult”。

> prop.table(table(train$Child,train$Survived),1)

? ? ? ? ? ? ? 0? ? ? ? 1?

adult 0.6388175 0.3611825? child 0.4601770 0.5398230

成人的存活比例是36%,而孩子的存活比例是54%。這個維度如果和性別交叉起來看,又該如何呢?先看一下各類人群人數(shù)。

> aggregate(Survived~Child+Sex,data=train,FUN=length)

? Child? ? Sex Survived1

adult female? ? ? 2592

child female? ? ? 553

adult? male? ? ? 5194

child? male? ? ? 58

現(xiàn)在要找出存活比例,此時需創(chuàng)建一個函數(shù)來解決:

> aggregate(Survived~Child+Sex,data=train,FUN=function(x){sum(x)/length(x)})? Child? ? Sex? Survived1 adult female 0.75289582 child female 0.69090913 adult? male 0.16570334 child? male 0.3965517

這里能看出,無論女性是否是孩子,比例很相近,而男孩子的存活比例要略高于成年男性,均遠低于女性比例??吹竭@個比例,似乎不太符合孩子優(yōu)先存活的說法,生活中其實十八歲的孩子其實身形已和成年人沒有什么區(qū)別,在沉船發(fā)生后的混亂局面中,很難去分辨是否低于18歲,因此,被優(yōu)先的可能是更小的孩子。因此,我們把孩子的年齡定義改為10歲,再來看看。

> train$Child<-"adult"> train$Child[train$Age<10]<-"child"> aggregate(Survived~Child+Sex,data=train,FUN=function(x){sum(x)/length(x)})

? Child? ? Sex? Survived1

adult female 0.75352112

child female 0.63333333

adult? male 0.16513764

child? male 0.5937500

10歲以下的男孩子存活比例明顯高于10歲以上的男性。

那么除了這些因素以外,其他因素是如何影響存活率的?想看看艙位等級是否對存活率有影響,船上有三種艙位,用Pclass表示。

> aggregate(Survived~Pclass+Sex,data=train,FUN=function(x){sum(x)/length(x)})

Pclass? ? Sex? Survived1? ? ?

1 female 0.96808512? ? ?

2 female 0.92105263? ? ?

3 female 0.50000004? ? ?

1? male 0.36885255? ? ?

2? male 0.15740746? ? ?

3? male 0.1354467

可以看出,對女性來說,一等艙和二等艙的存活率幾乎是三等艙的二倍,男性來說,一等艙是二等艙和三等艙存活率的二倍。

先按照以上推論做一版提交,打個底

> test$Survived<-0> test$Survived[test$Sex=="female"]<-1> test$Survived[test$Age<10]<-1> test$Survived[test$Pclass=="1"]<-1>

submit<-data.frame(PassengerId=test$PassengerId,Survived=test$Survived)> write.csv(submit, file ="theyallperish.csv", row.names =FALSE)

這次的成績:6485,0.7081

顯然,目前利用到的信息只有性別、年齡、艙位,在下一步利用“決策樹”(rpart—Recursive Partitioning andRegression Trees,遞歸分割和回歸樹)從更多的維度去分析。

library(rpart)

fit <- rpart(Survived ~ Pclass + Sex + Age + SibSp + Parch + Fare + Embarked,data=train,method="class")

我們看看fit:

> plot(fit)

> text(fit)

有些不清,用武器強化一下:

> install.packages('rattle')

> install.packages('rpart.plot')

> install.packages('RColorBrewer')

> library(rattle)

> library(rpart.plot)

> library(RColorBrewer)

> fancyRpartPlot(fit)


決策樹按照算法,將數(shù)據(jù)分析后一層層地,找到最可能分界點,最上一層是總比例,多數(shù)為“0”即死亡,按性別分,男性占比65%,但是多數(shù)為“0”即死亡,女性占比35%,多數(shù)為“1”即存活。年齡這層,分界點選在了6.5歲,因為在這個分界線上,生存概率區(qū)分最明顯,在6.5歲以下,兄弟姐妹數(shù)量大于2.5的存活機率又比其他的更多。以此類推。

> Prediction <- predict(fit, test, type ="class")

> submit <- data.frame(PassengerId = test$PassengerId, Survived = Prediction)

> write.csv(submit, file ="myfirstdtree.csv", row.names =FALSE)

這次上傳后排名直接上升到3039名。

這次的作業(yè)是一個實例練習,沒有明確的指引該怎么往下做。在兩眼一抹黑的情況下,幸有前人引路,一點點揭開R語言神秘的面紗?,F(xiàn)在只是簡單地一窺尊容,發(fā)現(xiàn)R里面的乾坤世界,在Kaggle上更是見識了機器學習的浩然大海。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容