Practice makes perfect

[R] 결측치(NA) 처리 본문

빅데이터/R

[R] 결측치(NA) 처리

kerpect 2020. 7. 6. 13:45
728x90
반응형
SMALL

분석을 위한 데이터셋을 확보했다 하더라도 바로 분석을 할 수 없는 경우가 많습니다. 그 이유는 바로 결측값, 이상치, 오입력 등이 있습니다. 따라서 데이터 분석에 적합하도록 데이터셋을 정제해야 합니다.

바로 이것을 전처리(data preprocessing)라고 합니다. 

 

결측값(missing value)

결측값은 입력이 누락된 값을 의미합니다. 보통 NA로 출력됩니다. 결측값이 포함되면 산술 연산에 문제가 생깁니다. 대부분의 산술 연산 함수는 결측값을 제외할 수 있는 옵션을 제공합니다. 

 

 

밑의 데이터를 토대로 설명하겠습니다 .

 

 

1) 결측치 확인

summary(dataset$price)

- 출력값 -
   Min    1st Qu.    Median    Mean    3rd Qu.  Max.       NA's 
-457.200    4.425    5.400    8.752    6.300  675.000       30 

sum(dataset$price) 
# NA가 하나라도 담겨 있으면 결과값으로 [1] NA 를 반환한다. 

summary() : 다양한 결과 값 출력

 

 

2) 결측치 제거

 

① sum() 함수에서 제공되는 속성 이용

sum(dataset$price, na.rm = T) 
출력값 : [1] 2362.9

na.rm = T : NA값 제외

 

 

② 결측데이터 제거 함수 이용

price2 <- na.omit(dataset$price) 

sum(price2)
출력값 : [1] 2362.9

length(price2) 
출력값 : [1] 270

na.omit() : NA가 들어 있는 항복 삭제

-  NA 항목을 다 삭제 하기 때문에 NA가 담겨있는 같은 행의 다른 항목들의 데이터들도 삭제 될 수 있는 위험이 존재.
-  데이터가 적을수록 분석결과가 신뢰도가 예측도가 떨어짐. 

 

 

 

3) 결측치 대체 

- 결측치를 0으로 대체하기  

x <- dataset$price # price vector 생성

head(x)  
출력값 : [1] 5.1 4.2 4.7 3.5 5.0 5.4

dataset$price2 <- ifelse(is.na(x),0,x)
ifelse(!is.na(x),x,0)

sum(dataset$price3) 
출력값 : [1] 2625.4

 

dataset$price2 <- ifelse(isx.na(x),0,x) : true 일 때 0, false 일 때 x로 출력.  / $를 붙이고 컬럼 이름을 넣으면 추가 

 

NA -> 0 출력

 

 

4) 결측치를 평균으로 대체하기 

dataset$price3 <- ifelse(is.na(x),round(mean(x, na.rm = T),2),x) 

mean(dataset$price3)
출력값 : [1] 8.751333

sum(dataset$price3)  
출력값 : [1] 2625.4

is.na(x),round(mean(x,na.rm = T) , 2) ,x) : true 일 때 평균 : round(mean(x,na.rm = T) , 2) / false 일때 x로 출력. 

 

* $를 붙이고 컬럼 이름을 넣으면 추가 

 

- 넣어준 평균 안에 이상치가 존재할 수 있기 때문에 결과의 값의 오류가 생길 수 있습니다. 

 

728x90
반응형
LIST

'빅데이터 > R' 카테고리의 다른 글

[R] 코딩 변경  (0) 2020.07.06
[R] 이상치(극단치)  (0) 2020.07.06
[R] 데이터 셋 보기  (0) 2020.07.06
[R] reshape2 패키지  (0) 2020.07.03
[R] 파이프 연산자(pipe)  (0) 2020.07.03