(完整版)Titanic数据集分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

泰坦尼克数据集探索

1.简介:

从泰塔尼克数据集中,根据每个乘客的信息,建立模型并进行预测。

整篇文章分为三步:

1.特征选择

2.缺失数据处理

3.预测

1.1导入软件包并检查数据

> library('ggplot2') # 可视化

> library('ggthemes') # 可视化

> library('scales') # 可视化

> library('dplyr') # 数据处理

> library('mice') # 填充缺失数据

> library('randomForest') # 分类算法

> #数据的导入

> setwd('D:/Titanic')#设置默认功过路径

> train <- read.csv('train.csv',stringsAsFactors= FALSE)#训

练集

> test <- read.csv('test.csv',stringsAsFactors= FALSE)#测试集

#进行数据拼接,一同进行特征选择和缺失数据处理

> full <- bind_rows(train, test) # bind training & test data > # check data

> str(full)

我们观察到一共有1309条数据,每一条数据有12个相关变量。

2.特征工程

头衔

># 从名称中挖掘

> # 从乘客名字中提取头衔

> #R中的grep、grepl、sub、gsub、regexpr、gregexpr等函数都使用正则表达式的规则进行匹配。默认是egrep的规则,sub函数只实现第一个位置的替换,gsub函数实现全局的替换。

> full$Title <- gsub('(.*, )|(\\..*)', '', full$Name)

>

> # 查看按照性别划分的头衔数量

> table(full$Sex, full$Title)

我们发现头衔的类别太多,并且好多出现的频次是很低的,我们可以将这些类别进行合并

> rare_title <- c('Dona', 'Lady', 'the Countess','Capt', 'Col', 'Don',

+ 'Dr', 'Major', 'Rev', 'Sir', 'Jonkheer')# 合并低频头衔为一类

> # 重命名称呼

> full$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'

>

> # 再次查看按照性别划分的头衔数量

> table(full$Sex, full$Title)

可以看到头衔的个数得到了大量的缩减

> #sapply()函数:根据传入参数规则重新构建一个合理的数据类型返回

> full$Surname <- sapply(full$Name,

+ function(x) strsplit(x, split = '[,.]')[[1]][1])

家庭人数

既然我们已经根据乘客的名字划分成一些新的变量,我们可以把它进一步做一些新的家庭变量。首先我们要做一个基于兄弟姐妹/配

偶数量(s)和儿童/父母数量的家庭规模变量。

> # Create a family size variable including the passenger themselves

> full$Fsize <- full$SibSp + full$Parch + 1

>

> # Create a family variable

> full$Family <- paste(full$Surname, full$Fsize, sep='_')

> #为了直观显示,我们可以用ggplot2 画出家庭成员数量和生存家庭数情况的图形

> ggplot(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()

> full$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 plot > mosaicplot(table(full$FsizeD, full$Survived), main='Family Size

Survival',

shade=TRUE)

<-4-4:-2-2:00:2

2:4>4

相关文档
最新文档