您的位置:首页 > 其它

Data Analytics for Beginners:第二节

2017-11-30 08:42 337 查看
本节目的:运用数据集建模

清洗数据

缺失数据的处理,如:年龄字段中有缺失数据

删除数据集中不能使用的变量: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
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据 r语言 函数