(完整版)Titanic数据集分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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