Database for Everything

[R 프로그램] Kaggle 타이타닉 생존자 예측(2) - EDA(1) 본문

R

[R 프로그램] Kaggle 타이타닉 생존자 예측(2) - EDA(1)

Yeenn 2021. 12. 5. 15:54
728x90

결측값(NA) 확인 및 평균값 대치

# 각 변수들에 존재하는 NA 값의 개수와 비율
NA_num <- t(colSums(is.na(data)))
NA_prop <- t(colSums(is.na(data))) / nrow(data)
rbind(NA_num, NA_prop)
  PassengerId Survived Pclass Name Sex         Age SibSp Parch Ticket         Fare Cabin Embarked
[1,]           0     1309      0    0   0 263.0000000     0     0      0 1.0000000000     0        0
[2,]           0        1      0    0   0   0.2009167     0     0      0 0.0007639419     0        0

# 벡터기준으로 NA값 대치하는 사용자 정의함수
imputation_NA <- function(vec, fun = mean) {
  vec_not_NA <- na.omit(vec)
  imp_val <- fun(vec_not_NA)
  
  vec[is.na(vec)] <- imp_val
}

# For 문을 활용한 한번에 NA값 대치
for (col in c('Age', 'Fare')) {
  data[[col]] <- imputation_NA(data[[col]])
}

 

변수들에 존재하는 NA값의 개수와 비율을 확인할 수 있는 표를 만들어 확인해보았더니, Age변수에는 20%, Fare변수에는 0.07%의 NA값이 존재하였다. 

이 NA값들을 각 컬럼의 평균값으로 대치하였다. 

 

 

 

Survived(생존여부) 변수 

#Survived변수
str(train$Survived)
 Factor w/ 2 levels "No","Yes": 1 2 2 2 1 1 1 1 2 2 ...
 
table(train$Survived)
 No Yes 
549 342 

#Survived 변수 시각화
library(ggplot2)
ggplot(data=train)+
  geom_bar(aes(x=Survived, fill=Survived))+
  labs(title='생존자 분포표')

 

Survived 변수의 No Yes 빈도표를 확인한 후, ggplot을 통해 시각화하였다.

확인해보니, 사망자(No) 생존자(Yes)보다 더 많이 분포하고 있는 것을 확인할 수 있었다.

 

 

 

 

 

Passengerld(승객번호) 변수 

#Passengerld 변수 
length(unique(data$PassengerId)) == length(data$PassengerId)
[1] TRUE

 

Passengerld 는 승객번호 변수이다. 이 변수는 고유한 승객번호를 나타내므로, 각 값이 고유한 성질(Unique)을 갖는지 확인하는 작업이 필요하다.

 

중복값 제거를 거친 벡터의 길이와 원본 데이터의 벡터의 길이를 비교해보니 True값이 출력되는 것을 확인할 수 있었다.

 

 

 

 

 

Pclass(객실등급) 변수 

#Pclass 변수 타입
class(data$Pclass)
[1] "integer"

#Pclass 변수 팩터형 변환
data$Pclass <- factor(data$Pclass, levels=c(1,2,3))

#Pclass 빈도 확인
table(data$Pclass)
 1   2   3 
323 277 709 

ggplot(data=data)+
  geom_bar(aes(x=Pclass, fill=Pclass))

 

class()를 통해 Pclass변수 타입을 확인해보니, integer(수치형)로 되어있었으므로, 팩터형으로 변환 후, 빈도표와 ggplot()을 통해 시각화해보았다. 

3등급 > 1등급 > 2등급 순으로 많았다.

 

 

 

 

 

Name(승객 이름) 변수

#Name 변수
data$Name <- as.character(data$Name)

head(data$Name)
[1] "Braund, Mr. Owen Harris"                             "Cumings, Mrs. John Bradley (Florence Briggs Thayer)"
[3] "Heikkinen, Miss. Laina"                              "Futrelle, Mrs. Jacques Heath (Lily May Peel)"       
[5] "Allen, Mr. William Henry"                            "Moran, Mr. James"     

data$Name <- NULL

 

Name변수는 승객의 이름변수이다. 팩터형으로 지정되어있던 변수를 문자형으로 변환해주었다. 

하지만 이번 분석에서는 유의미하게 활용되지 않을 것 같아.. Null값 처리로 삭제하였다.

 

 

 

 

 

Sex(성별) 변수

#Sex 변수 확인
table(data$Sex)
female   male 
   466    843 
   
ggplot(data=data)+
  geom_bar(aes(x=Sex, fill=Sex))

#Sex변수와 종속변수 관계
with(data, table(Sex, Survived))
        Survived
Sex       No Yes
  female  81 233
  male   468 109
  
with(data, chisq.test(Sex, Survived))

	Pearson's Chi-squared test with Yates' continuity correction

data:  Sex and Survived
X-squared = 260.72, df = 1, p-value < 2.2e-16

 

 

Sex 변수를 살펴보니, 남성이 여성보다 약 2배가량 많은 것으로 확인되었고, 

종속변수인 Survived 변수와 Cross table과 카이제곱 검정을 시행한 결과, 종속변수와 연관이 있음을 확인할 수 있었다.

 

728x90
Comments