타이타닉 데이터 분석 3.Feature Engineering (Final)
#테스트의 생존자 열에 NA값을 넣고 rbind를 이용해 두 시트를 합친다.
test$Survived <-na p="">combi <-rbind test="" train="">
#R에선 문자열은 팩터화시키는데 이를 케릭터화시킨다. text character는 문자열을 분리할 수 있다.
combi$Name <- ame="" as.character="" combi="" p="">combi$Name[1]
[1] "Braund, Mr. Owen Harris"
#,와. 를 기준으로 문자열을 분리시킨다.
strsplit(combi$Name[1], split='[,.]')
[[1]]
[1] "Braund" " Mr" " Owen Harris"
->-rbind>-na>
#Mr라는 단어만 분리시킨다.
strsplit(combi$Name[1], split='[,.]')[[1]][2]
[1] " Mr"
#combi의 title열에 함수의 조건에 맞는 값들을 넣는다. 밑의 명령어의 결과값은 Mr,Miss,Mrs 등으로 표현 될 것이다.
combi$Title <- ame="" combi="" div="" fun="function(x)" sapply="" split="[,.]" strsplit="" x="">->
#sapply란 무엇인가?
lapply: 결과를 리스트 형태로 반환
sapply: 벡터, 또는 행렬의 형태로 반환 (s: simplify)
> patients.sub
weight height
1 65.4 170
2 55.0 155
3 380.0 NA
4 72.2 173
5 51.0 161
6 NA 166
> lapply( patients.sub, mean, na.rm = TRUE )
$weight
[1] 124.72
$height
[1] 165
> sapply( patients.sub, mean, na.rm = TRUE )
weight height
124.72 165.00
sapply: 벡터, 또는 행렬의 형태로 반환 (s: simplify)
> patients.sub
weight height
1 65.4 170
2 55.0 155
3 380.0 NA
4 72.2 173
5 51.0 161
6 NA 166
> lapply( patients.sub, mean, na.rm = TRUE )
$weight
[1] 124.72
$height
[1] 165
> sapply( patients.sub, mean, na.rm = TRUE )
weight height
124.72 165.00
#띄어쓰기를 없애고 깔끔하게 Mr,Mrs,Miss 등을 만든다.
combi$Title <- combi="" div="" itle="" sub="">->
#sub란 무엇인가?
x=abcd(ef를 x=abcdef로 바꾸고 싶을때,
sub("||(","",x) 나 sub("(","",x,fixed=TRUE)를 이용해 바꿔야한다.
즉, sub는 단어나 글자를 바꿀 때 쓰인다.
#마무리로 Title열을 팩터화 시킨다.
combi$Title <- combi="" div="" factor="" itle="">->
#가족 수 열을 만들어 구한다. 가족 수 또한 결과에 영향을 미칠 것이라는 추측.
combi$FamilySize <- 1="" arch="" combi="" div="" ibsp="">->
#Surname 열을 추가해 sapply로 이름 열에서 첫번째 단어를 뽑아 대입한다.
combi$Surname <- ame="" combi="" div="" fun="function(x)" sapply="" split="[,.]" strsplit="" x="">->
#FamilyID라는 열을 만들어 FamilySize와 Surname값들을 합쳐 대입한다.
combi$FamilyID <- amilysize="" as.character="" combi="" div="" paste="" sep="" urname="">->
#가족 수가 2보다 작으면 small이라는 값을 넣는다.
combi$FamilyID[combi$FamilySize <= 2] <- div="" mall="">->
#combi의 FamilyID로 famIDs라는 데이터 프레임을 만든다.
famIDs <- amilyid="" combi="" data.frame="" div="" table="">->
#2보다 작은 값을 Freq에 넣는다.
famIDs <- 2="" div="" famids="" req="">->
#패밀리 아이디를 덮어쓰고 팩터화 시킨다.
combi$FamilyID[combi$FamilyID %in% famIDs$Var1] <- div="" mall="">->
combi$FamilyID <- amilyid="" combi="" div="" factor="">->
#마지막으로 combi를 test와 train으로 분리시킨다.
train <- combi="" div="">->
Prediction <- div="" fit="" predict="" test="" type="class">->
test <- combi="" div="">->
#의사결정나무를 그리고 예측하고 저장한다.
fit <- age="" data="train," div="" embarked="" familyid="" familysize="" fare="" method="class" parch="" pclass="" rpart="" sex="" sibsp="" title="" urvived="">->
Prediction <- div="" fit="" predict="" test="" type="class">->
> submit <- assengerid="test$PassengerId," data.frame="" survived="Prediction)</div">->
> write.csv(submit, file = "myfirstdtree.csv", row.names = FALSE)
Q. %in%은 무엇인가?
댓글
댓글 쓰기