Data Analytics for Beginners:第二节
2017-11-30 08:42
337 查看
本节目的:运用数据集建模
删除数据集中不能使用的变量:Ticket, Fare, Cabin, and Embarked。
c()函数生成一个数字列表,通过上述语句,R语言执行9到12行的删除功能。
性别转换成为男/女–> 0/1
为了转换成数字模型,将男女性别定性为0 1,使用gsub()函数,该函数可以将文本段替换成我们需要的值。
缺失年龄判断:第一步
数据集中的年龄有很多值缺失,但是Age是一个重要的变量,为了弥补这些缺失值,需要判断年龄和其他变量之间的关系。假设字段中的Mrs.的年龄大于字段Ms的年龄,缺失字段中有相同头衔的假定其年龄是一样的。
因此,我们将有相同姓氏的人员放在一个列表中,使用grep()函数,函数将返回指定姓氏的行号向量。
数据集中的一些不太常见的头衔,牧师或者是上校啥的,我们基于其人数少,不再考虑。
接下来,将每个名称缩短化,由于外国人的名字都太长了,为了数据易于分析,将每个人的名字直接缩短为其头衔名称,比如“Cumings, Mrs. John Bradley (Florence Briggs Thayer)”简化为“Mrs”
如图所示,姓名简化,名别替代后,整个表变的很简洁啦。
缺失年龄判断:第二步
对年龄缺失的部分,计算出具有相同头衔的组内平均值,使用其平均值进行替代。
(round函数好像是四舍五入,这里是保留两位小数点?)
然后开始进行缺失值的循环替代
nrow()
官方解释:nrow and ncol return the number of rows or columns present in x. NCOL and NROW do the same treating a vector as 1 -column matrix.
(大写的解释还没用到,也不是很明白,小写的nrow就是返回数据集中的行数或列数)
创建新变量
为了使增强模型需要创建新变量,也许通过创建的新的变量能更准确的预测出乘客是否生存。(通过创建这些变量,观察变量是否是有用的,变量是如何影响存活率的)
变量1:child
这个变量是考虑到乘客是否是孩子可能影响到该乘客的生存率,添加一个名为“Child”的新列,年龄在12岁以下的列中填“1”,其他的填“2”
变量2:Family
家庭变量表示每位乘客的家庭规模,猜测大的家庭可能存活率低,或者是完全相反的情况,接下来,构建模型对问题进行优化,看家庭与存活率之间是否存在某些关系(Siblings/Spouses[SibSp] Parents/Children[Parch])
变量3:Mother
通过查看头衔是否是Mrs或者是携带孩子数目是否大于0
清洗数据
缺失数据的处理,如:年龄字段中有缺失数据删除数据集中不能使用的变量:Ticket, Fare, Cabin, and Embarked。
trainData = trainData[-c(1,9:12)]
c()函数生成一个数字列表,通过上述语句,R语言执行9到12行的删除功能。
性别转换成为男/女–> 0/1
为了转换成数字模型,将男女性别定性为0 1,使用gsub()函数,该函数可以将文本段替换成我们需要的值。
trainData$Sex = gsub("female",1,trainData$Sex) trainData$Sex = gsub("male",0,trainData$Sex)
缺失年龄判断:第一步
数据集中的年龄有很多值缺失,但是Age是一个重要的变量,为了弥补这些缺失值,需要判断年龄和其他变量之间的关系。假设字段中的Mrs.的年龄大于字段Ms的年龄,缺失字段中有相同头衔的假定其年龄是一样的。
因此,我们将有相同姓氏的人员放在一个列表中,使用grep()函数,函数将返回指定姓氏的行号向量。
master_vector = grep("Master.",trainData$Name,fixed = TRUE) miss_vector = grep("Miss.",trainData$Name, fixed = TRUE) mrs_vector = grep("Mrs.",trainData$Name, fixed = TRUE) mr_vector = grep("Mr.",trainData$Name, fixed = TRUE) dr_vector = grep("Dr.",trainData$Name, fixed = TRUE)
数据集中的一些不太常见的头衔,牧师或者是上校啥的,我们基于其人数少,不再考虑。
接下来,将每个名称缩短化,由于外国人的名字都太长了,为了数据易于分析,将每个人的名字直接缩短为其头衔名称,比如“Cumings, Mrs. John Bradley (Florence Briggs Thayer)”简化为“Mrs”
for(i in master_vector){ trainData$Name[i] = "Master" } for (i in miss_vector) { trainData$Name[i] = "Miss" } for (i in mrs_vector) { trainData$Name[i] = "Mrs" } for (i in mr_vector) { trainData$Name[i] = "Mr" } for (i in dr_vector) { trainData$Name[i] = "Dr" }
如图所示,姓名简化,名别替代后,整个表变的很简洁啦。
缺失年龄判断:第二步
对年龄缺失的部分,计算出具有相同头衔的组内平均值,使用其平均值进行替代。
master_age = round(mean(trainData$Age[trainData$Name == "Master"],na.rm = TRUE),digits = 2) miss_age = round(mean(trainData$Age[trainData$Name == "Miss"],na.rm = TRUE),digits = 2) mrs_age = round(mean(trainData$Age[trainData$Name == "Mrs"], na.rm = TRUE), digits = 2) mr_age = round(mean(trainData$Age[trainData$Name == "Mr"],na.rm = TRUE), digits = 2) dr_age = round(mean(trainData$Age[trainData$Name == "Dr"], na.rm = TRUE),digits = 2)
(round函数好像是四舍五入,这里是保留两位小数点?)
然后开始进行缺失值的循环替代
for (i in 1:nrow(trainData)) { if (is.na(trainData[i,5])) { if (trainData$Name[i] == "Master") { trainData$Age[i] = master_age } else if (trainData$Name[i] == "Miss") { trainData$Age[i] = miss_age } else if (trainData$Name[i] == "Mrs") { trainData$Age[i] = mrs_age } else if (trainData$Name[i] == "Mr") { trainData$Age[i] = mr_age } else if (trainData$Name[i] == "Dr") { trainData$Age[i] = dr_age } else { print("Uncaught Title") } } }
nrow()
官方解释:nrow and ncol return the number of rows or columns present in x. NCOL and NROW do the same treating a vector as 1 -column matrix.
(大写的解释还没用到,也不是很明白,小写的nrow就是返回数据集中的行数或列数)
创建新变量
为了使增强模型需要创建新变量,也许通过创建的新的变量能更准确的预测出乘客是否生存。(通过创建这些变量,观察变量是否是有用的,变量是如何影响存活率的)
变量1:child
这个变量是考虑到乘客是否是孩子可能影响到该乘客的生存率,添加一个名为“Child”的新列,年龄在12岁以下的列中填“1”,其他的填“2”
trainData["Child"] for (i in 1:nrow(trainData)) { if(trainData$Age[i] <= 12){ trainData$Child[i] = 1 }else{ trainData$Child[i] = 2 } }
变量2:Family
家庭变量表示每位乘客的家庭规模,猜测大的家庭可能存活率低,或者是完全相反的情况,接下来,构建模型对问题进行优化,看家庭与存活率之间是否存在某些关系(Siblings/Spouses[SibSp] Parents/Children[Parch])
trainData["Family"] = NA for (i in 1:nrow(trainData)) { x = trainData$SibSp[i] y = trainData$Parch[i] trainData$Family[i] = x+y+1 }
变量3:Mother
通过查看头衔是否是Mrs或者是携带孩子数目是否大于0
trainData["Mother"] = NA for (i in 1:nrow(trainData)) { if(trainData$Name[i] == "Mrs" & trainData$Parch[i]>0){ trainData$Mother[i] = 1 }else{ trainData$Mother[i] =2 } }
相关文章推荐
- Data Analytics for Beginners:第三节
- Data Analytics for Beginners:第一节
- Real Time Analytics for Big Data: An Alternative Approach
- Cloudera 公司研发工程师,Kudu 发明人Todd Lipcon:Kudu,Storage for Fast Analytics on fast Data
- books for beginners in data mining and pattern recgonition
- Understanding Big Data – Analytics for Enterprise Class Hadoop and Streaming Data
- Graph Data Structures for Beginners
- 读论文《Probabilistic Data Structures for Web Analytics and Data Mining》笔记
- NSDI'17-论文阅读[CherryPick:Adaptively Unearthing the Best Cloud Configurations for Big Data Analytics]
- 初识NoSQL 快速认识NoSQL数据库 分析Analytics For Hackers: How To Think About Event Data
- BigBench: Toward An Industry-Standard Benchmark for Big Data Analytics
- Big Data Analytics for Security(Big Data Analytics for Security Intelligence)
- DOT--A Matrix Model for Analyzing,Optimizing and Deploying Software for Big Data Analytics in Distri
- Project Soul: Toward Social Big Data Analytics for Information Discovery and Recommendation
- DynamicData for Asp.net Mvc留言本实例 下篇 更新
- Codeproject—JavaScript For Beginners(4) Event handler_Link_Date
- Data truncated for column xxx
- Note for video Machine Learning and Data Mining——training vs Testing
- dbForge Data Compare for SQL Server工具控件下载及介绍
- Bigtable: A Distributed Storage System for Structured Data : part6 Refinements