R語(yǔ)言Kaggle泰坦尼克號(hào)性別階級(jí)模型數(shù)據(jù)分析案例
原文鏈接:http://tecdat.cn/?p=6062
?
這場(chǎng)災(zāi)難以拯救“婦女和兒童第一”而聞名,所以讓我們來(lái)看看性別和年齡變量。我們將從乘客的性別開(kāi)始。將數(shù)據(jù)重新加載到R后,請(qǐng)查看此變量的摘要:
> summary(train$Sex)
female male
314 577
所以我們看到大多數(shù)乘客都是男性。對(duì)幸存的男性和女性進(jìn)行雙向比較:
> prop.table(table(train$Sex, train$Survived))
0 1
female 0.09090909 0.26150393
male 0.52525253 0.12233446
我們希望看到的是行數(shù)比例,即存活的每個(gè)性別的比例。
> prop.table(table(train$Sex, train$Survived),1)
0 1
female 0.2579618 0.7420382
male 0.8110919 0.1889081
我們現(xiàn)在可以看到大多數(shù)女性幸存下來(lái),并且男性的比例非常低。
> test$Survived <- 0
> test$Survived[test$Sex == 'female'] <- 1
在這里,我們開(kāi)始像以前一樣添加“everyone dies”預(yù)測(cè)列,除了我們將拋棄rep命令并將零指定給整個(gè)列。然后我們改變了相同的列,其中1為乘客的變量“Sex”等于“女性”。
現(xiàn)在讓我們寫一個(gè)新的提交并發(fā)送給Kaggle

?
現(xiàn)在讓我們開(kāi)始深入研究年齡變量:
> 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
數(shù)據(jù)分析中可能缺少值,這可能會(huì)導(dǎo)致現(xiàn)實(shí)世界中出現(xiàn)的各種問(wèn)題,而這些問(wèn)題有時(shí)很難處理。目前我們可以假設(shè)177個(gè)缺失值是其余乘客的平均年齡。
現(xiàn)在我們有一個(gè)連續(xù)的變量,我們創(chuàng)建一個(gè)新的變量“Child”來(lái)表明乘客是否低于18歲:
> train$Child <- 0
> train$Child[train$Age < 18] <- 1
現(xiàn)在我們要?jiǎng)?chuàng)建一個(gè)包含性別和年齡的表,以查看不同子集的生存比例。首先讓我們嘗試找出不同子集的幸存者數(shù)量:
> aggregate(Survived ~ Child + Sex, data=train, FUN=sum)
Child Sex Survived
1 0 female 195
2 1 female 38
3 0 male 86
4 1 male 23
但我們不知道每個(gè)子集中的總?cè)藬?shù); 讓我們來(lái)看看:
> aggregate(Survived ~ Child + Sex, data=train, FUN=length)
Child Sex Survived
1 0 female 259
2 1 female 55
3 0 male 519
4 1 male 58
我們需要?jiǎng)?chuàng)建一個(gè)函數(shù),它將子集向量作為輸入,并將sum和length命令應(yīng)用于它,然后進(jìn)行除法以給出一個(gè)比例。
> aggregate(Survived ~ Child + Sex, data=train, FUN=function(x) {sum(x)/length(x)})
Child Sex Survived
1 0 female 0.7528958
2 1 female 0.6909091
3 0 male 0.1657033
4 1 male 0.3965517
雖票價(jià)是一個(gè)連續(xù)變量,需要將其簡(jiǎn)化為可以輕松制表的內(nèi)容。我們將票價(jià)收入不到10美元,10美元到20美元,20美元到30美元以及30美元以上,并將其存儲(chǔ)到一個(gè)新變量中:
> train$Fare2 <- '30+'
> train$Fare2[train$Fare < 30 & train$Fare >= 20] <- '20-30'
> train$Fare2[train$Fare < 20 & train$Fare >= 10] <- '10-20'
> train$Fare2[train$Fare < 10] <- '<10'
現(xiàn)在讓我們運(yùn)行一個(gè)更長(zhǎng)的聚合函數(shù),看看這里有什么有趣的東西:
> aggregate(Survived ~ Fare2 + Pclass + Sex, data=train, FUN=function(x) {sum(x)/length(x)})
Fare2 Pclass Sex Survived
1 20-30 1 female 0.8333333
2 30+ 1 female 0.9772727
3 10-20 2 female 0.9142857
4 20-30 2 female 0.9000000
5 30+ 2 female 1.0000000
6 <10 3 female 0.5937500
7 10-20 3 female 0.5813953
8 20-30 3 female 0.3333333 **
9 30+ 3 female 0.1250000 **
10 <10 1 male 0.0000000
11 20-30 1 male 0.4000000
12 30+ 1 male 0.3837209
13 <10 2 male 0.0000000
14 10-20 2 male 0.1587302
15 20-30 2 male 0.1600000
16 30+ 2 male 0.2142857
17 <10 3 male 0.1115385
18 10-20 3 male 0.2368421
19 20-30 3 male 0.1250000
20 30+ 3 male 0.2400000
雖然大多數(shù)男性,票價(jià)仍然做得不好。
讓我們根據(jù)新的見(jiàn)解做出新的預(yù)測(cè)。
> test$Survived <- 0
> test$Survived[test$Sex == 'female'] <- 1
> test$Survived[test$Sex == 'female' & test$Pclass == 3 & test$Fare >= 20] <- 0
好的,讓我們創(chuàng)建輸出文件,看看我們是否做得更好!

?
有問(wèn)題歡迎下方留言!
?