[R语言]资料分析实作分享-----铁达尼号存活分析(上集)

Kaggle是一个全球性的资料科学社群网站,上面有很多资料分析的比赛、资料分析的文章,以及可供下载的资料集。今天想跟大家分享一则资料分析的文章,作者(Meg Risdal)所要分析的资料集是有关铁达尼号的乘客资讯,里面使用到的data在Kaggle里面可以下载。那我们就跟着他的脚步来走一遍资料分析。

http://img2.58codes.com/2024/20124935dXZYhNGxzi.jpg

以下是我们会用到的 package,所以我们就直接library进来。

library('ggplot2') # 视觉化library('ggthemes') # 视觉化library('scales') # 视觉化library('dplyr') # 资料整理与转换library('mice') # imputationlibrary('randomForest') # 机器学习

接着读入我们的资料集

train <- read.csv('F:/Users/yueh/Desktop/titanic08/train.csv', stringsAsFactors = F)test  <- read.csv('F:/Users/yueh/Desktop/titanic08/test.csv', stringsAsFactors = F)

先来看一下这两个资料个别带给我们什么资讯。

str(train)str(test)

http://img2.58codes.com/2024/20124935qTpvlkHAdM.png

http://img2.58codes.com/2024/20124935IMzpSHOPd7.png

我们可以看到train有891笔资料,且具有12个变数。而test有418笔资料,且具有11个变数。他们不同的变数只差在train多了Survived这个变数。

而事实上,这笔资料原本是Kaggle上举办的机器学习竞赛,train是训练集,而test就是测试集。

在train里面,我们有的变数是:

PassengerId:乘客编号Survived:是否存活(0:死亡,1:存活)Pclass:票舱分级(1:最高集,...,3:最低集)Name:姓名Sex:性别Age:年龄SibSp:兄弟姊妹及配偶在船上的总数(旁系)Parch:父母及小孩在船上的总数(直系)Ticket:票号Fare:票价Cabin:客舱编号Embarked:上船的港口

而我们的最终目的是去预测test里面的乘客是否存活。

首先我们先把两笔资料合併成一个资料框,如下:

full  <- bind_rows(train, test) # bind training & test datastr(full)

http://img2.58codes.com/2024/201249357rGFs0PVu3.png

虽然我们有了12种变数,但是这些变数(Feature)是否足够好用呢?有些人可能听过特徵工程( Feature Engineering ) ,其实就是把现有资料的变数转换成 更有用 的变数。举例来说,如果我们想要去预测一个人身高,但是我们只有手掌宽度的资料,那这笔资料有用吗?

或许有用,也或许无用,但是如果我们能够透过一些手法转换成跟预测目标更相关的资料,使得资料变得 更有用 ,这个过程就是特徵工程的工作。在做资料分析的时候,最重要的环节其实是看着资料冥想(?),指的是去思考这笔资料能看到什么?

在这边 Meg Risdal 做了些很有趣的事情,对于初学得我来说会认为 PassengerId 和 Name 是无用的两个栏位,不过国外的名子里面多了一个特别的资讯:称呼。所以 Meg 在这边进行了称呼的撷取,并且把称呼新增成一个变数,和Sex绘製成一个table。

# Grab title from passenger namesfull$Title <- gsub('(.*, )|(\\..*)', '', full$Name)# Show title counts by sextable(full$Sex, full$Title)

http://img2.58codes.com/2024/20124935Uw2LOTJxgO.png

接着把title稍微调整一下,把Mlle跟Ms改成Miss,且把Mme改成Mrs,其他都统合到 Rare Title。

# Titles with very low cell counts to be combined to "rare" levelrare_title <- c('Dona', 'Lady', 'the Countess','Capt', 'Col', 'Don',                 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer')# Also reassign mlle, ms, and mme accordinglyfull$Title[full$Title == 'Mlle']        <- 'Miss' full$Title[full$Title == 'Ms']          <- 'Miss'full$Title[full$Title == 'Mme']         <- 'Mrs' full$Title[full$Title %in% rare_title]  <- 'Rare Title'# Show title counts by sex againtable(full$Sex, full$Title)

http://img2.58codes.com/2024/20124935hs9oTXEOef.png

然后我们也把姓氏给撷取下来,并且新增一个新的栏位(Surname):

full$Surname <- sapply(full$Name,                        function(x) strsplit(x, split = '[,.]')[[1]][1])

既然我们有旁系血亲个数,也有直系血亲得个数,那们我们其实也可以算在同一艘船上的家族成员个数,并且也新增一个栏位。(Fsize)
并且把Surname和Fsize放在一起,看做是Family的变数。

# Create a family size variable including the passenger themselvesfull$Fsize <- full$SibSp + full$Parch + 1# Create a family variable full$Family <- paste(full$Surname, full$Fsize, sep='_')

使用之前学的ggplot2来画画看图表吧!

# Use ggplot2 to visualize the relationship between family size & survivalggplot(full[1:891,], aes(x = Fsize, fill = factor(Survived))) +  geom_bar(stat='count', position='dodge') +  scale_x_continuous(breaks=c(1:11)) +  labs(x = 'Family Size') +  theme_few()

http://img2.58codes.com/2024/20124935le8KWAl4s7.png

这个图表是用Fsize和Survived去画的,并且分成存活与未存活,从这个图我们的确得到一些资讯,像是孤家寡人的生存率大概只有1/3,且8人以上的大家庭似乎没人存活。那我们在做一些大胆的分类,把"孤家寡人"的人设成singleton,5人以上的称做大家庭(large),剩余的称做小家庭(small)

# Discretize family sizefull$FsizeD[full$Fsize == 1] <- 'singleton'full$FsizeD[full$Fsize < 5 & full$Fsize > 1] <- 'small'full$FsizeD[full$Fsize > 4] <- 'large'# Show family size by survival using a mosaic plotmosaicplot(table(full$FsizeD, full$Survived), main='Family Size by Survival', shade=TRUE)

http://img2.58codes.com/2024/201249354ds2V32rCJ.png

这个图我们就可以很明显看到,大家庭跟孤家寡人的存活率比小家庭低得多很多。

我们可以把客舱编号的字首也弄成一栏变,举例来说C28,代表的是船舱C的第28号,现在我们只想要前面的字首。

full$Deck<-factor(sapply(full$Cabin, function(x) strsplit(x, NULL)[[1]][1]))

到这边为止,我们的确新增了许多变数,目前的资料已经变成这样。

str(full)

http://img2.58codes.com/2024/20124935SskoOUkGZo.png

在下一篇文章,会针对缺失值(Missing value) 做一些处理,最后才会进行预测,这次的文章到这里,谢谢大家。

原文网址:[https://www.kaggle.com/mrisdal/exploring-survival-on-the-titanic]
推荐文章:5 Steps of a Data Science Project Lifecycle


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章