티스토리 뷰

데이터 분석에 앞서 

이상치, 결측치를 확인해야 한다.


이상치, 결측지에 관한 포스팅은 다음으로 미루고 실습위주로 한다.


분석은 전 포스팅에 이어서 한다.



결측치 확인 및 결측치 채우기



패키지

library(VIM)


결측치 확인

> VIM::aggr(fullDT,

+      prop=FALSE,

+      numbers=TRUE,

+      sortVars= TRUE,

+      cex.axis = .7)


 Variables sorted by number of missings: 

    Variable Count

       Cabin  1014

    Survived   418

         Age   263

    Embarked     2

        Fare     1

 PassengerId     0

      Pclass     0

        Name     0

         Sex     0

       SibSp     0

       Parch     0

      Ticket     0


Variable 

 Count

 Cabin  

 1014

 Survived   

 418

 Age   

 263

 Embarked     

 2

 Fare     

 1



결측치(NA) 개수를 확인할 수 있다. 그리고 시각화       


    데이터를 보면 Carbin(객실), Age(나이), Embarked(승선지역), Fare(요금)에 결측치가 있다.


Fare(요금)

> fullDT[is.na(Fare)]


   PassengerId Pclass               Name  Sex  Age SibSp Parch Ticket Fare

1:        1044      3 Storey, Mr. Thomas male 60.5     0     0   3701   NA

   Cabin Embarked Survived

1:  <NA>        S     <NA>



> mean(fullDT$Fare, na.rm = TRUE)

[1] 33.29548

> fullDT[is.na(Fare)]$Fare <- mean(fullDT$Fare, na.rm = TRUE)


Fare에 결측치 개수는 1개로 결측치행을 탐색해 볼때 뚜렸한 인사이트를 얻기 힘들거 같다.

결측치 개수가 적으므로 승객들의 평균 Fare로 결측치를 채운다.




Embarked(승선지역)

> fullDT[is.na(Embarked)]


   PassengerId Pclass                                      Name    Sex Age

1:          62      1                       Icard, Miss. Amelie female  38

2:         830      1 Stone, Mrs. George Nelson (Martha Evelyn) female  62

   SibSp Parch Ticket Fare Cabin Embarked Survived

1:     0     0 113572   80   B28     <NA>        1

2:     0     0 113572   80   B28     <NA>        1



> fullDT[Ticket %in% 113572]


   PassengerId Pclass                                      Name    Sex Age

1:          62      1                       Icard, Miss. Amelie female  38

2:         830      1 Stone, Mrs. George Nelson (Martha Evelyn) female  62

   SibSp Parch Ticket Fare Cabin Embarked Survived

1:     0     0 113572   80   B28     <NA>        1

2:     0     0 113572   80   B28     <NA>        1



> fullDT[Cabin %in% "B28"]


   PassengerId Pclass                                      Name    Sex Age

1:          62      1                       Icard, Miss. Amelie female  38

2:         830      1 Stone, Mrs. George Nelson (Martha Evelyn) female  62

   SibSp Parch Ticket Fare Cabin Embarked Survived

1:     0     0 113572   80   B28     <NA>        1

2:     0     0 113572   80   B28     <NA>        1


> table(fullDT$Embarked)

  C   Q   S 

270 123 914 


> fullDT[is.na(Embarked)]$Embarked <- "S"


Embarked의 결측치는 2개로 직접 탐색해 봤을 때, 2명 승객에 티켓과 객실을 사용함을 알 수 있다.

그래서 같은 티켓과 같은 객을 사용하는 다른 사람이 있는지 찾아 보았지만, 두사람 이외에는 없음을 알 수 있다.


결측치값을 대체하기 위한 방법은 여러가지 존재한다. 대표적으로는 평균값, 최빈값 등등 여러가지 존재하지만 데이터 특성에 따라 대체하는 방법은 분석가가 판단하는 문제이다. 이 데이터에 인사트를 돌출하기 위해서는 많은 노력이 필요하기 때문에 범주형 데이터에서 흔히 사용한는 최빈값으로 대체할 생각이다.


 이 결측치에서는 Embarked의 level이 3가지 범주 [1] "C" "Q" "S" 에서 빈도가 "S"가 914로 가장 크기 때문에 결측치는 "S"로 대체한다.




> colSums(is.na(fullDT))

PassengerId      Pclass        Name         Sex         Age       SibSp       Parch      Ticket 

          0           0               0              0           263          0             0           0 

       Fare       Cabin    Embarked    Survived 

          1        1014           2            418 


colSums(is.na(fullDT)) 함수를 사용하여 결측치를 확인할 수 있다.



'빅데이터 분석 > adp 실기' 카테고리의 다른 글

[adp 실기] Titanic 데이터 실습 1  (0) 2019.02.20
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함