泰坦尼克事件探秘


泰坦尼克事件被一再提起塘辅,因為這次沉船事件的戲劇化的悲劇色彩,一瞬間華麗到幻滅的無常都使人嗟嘆不已。只是沒想到在R語言的學(xué)習(xí)中,竟然也要再次觸碰這場事件。第一次接觸kaggle,一個為開發(fā)商和數(shù)據(jù)科學(xué)家提供舉辦機器學(xué)習(xí)競賽劲厌、托管數(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名乘客的命運需要預(yù)測锌半,且只有11個變量,這是因為“Survived”列缺失了寇漫。這就是我們想要預(yù)測的列刊殉。

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

table(train$Survived)01549342

0代表死亡州胳,1代表存活记焊,從此看出,多數(shù)人未能存活栓撞。但就此來預(yù)測未免太粗略了遍膜。

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

> table(train$Sex)

female? male? ? 314? ? 577

顯然女性乘客數(shù)量遠少于男性恩尾,所以用存活的男女?dāng)?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è)是一個實例練習(xí)谷浅,沒有明確的指引該怎么往下做扒俯。在兩眼一抹黑的情況下奶卓,幸有前人引路,一點點揭開R語言神秘的面紗『承現(xiàn)在只是簡單地一窺尊容夺姑,發(fā)現(xiàn)R里面的乾坤世界,在Kaggle上更是見識了機器學(xué)習(xí)的浩然大海掌猛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盏浙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荔茬,更是在濱河造成了極大的恐慌废膘,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兔院,死亡現(xiàn)場離奇詭異殖卑,居然都是意外死亡,警方通過查閱死者的電腦和手機坊萝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門孵稽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人十偶,你說我怎么就攤上這事菩鲜。” “怎么了惦积?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵接校,是天一觀的道長。 經(jīng)常有香客問我狮崩,道長蛛勉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任睦柴,我火速辦了婚禮诽凌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坦敌。我一直安慰自己侣诵,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布狱窘。 她就那樣靜靜地躺著杜顺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蘸炸。 梳的紋絲不亂的頭發(fā)上躬络,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天,我揣著相機與錄音搭儒,去河邊找鬼洗鸵。 笑死越锈,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的膘滨。 我是一名探鬼主播甘凭,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼火邓!你這毒婦竟也來了丹弱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤铲咨,失蹤者是張志新(化名)和其女友劉穎躲胳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纤勒,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡坯苹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了摇天。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粹湃。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖泉坐,靈堂內(nèi)的尸體忽然破棺而出为鳄,到底是詐尸還是另有隱情,我是刑警寧澤腕让,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布孤钦,位于F島的核電站,受9級特大地震影響纯丸,放射性物質(zhì)發(fā)生泄漏偏形。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一觉鼻、第九天 我趴在偏房一處隱蔽的房頂上張望俊扭。 院中可真熱鬧,春花似錦滑凉、人聲如沸统扳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吹由,卻和暖如春若未,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背倾鲫。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工粗合, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萍嬉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓隙疚,卻偏偏與公主長得像壤追,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子供屉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

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