Practice makes perfect
[R] 결측치(NA) 처리 본문
분석을 위한 데이터셋을 확보했다 하더라도 바로 분석을 할 수 없는 경우가 많습니다. 그 이유는 바로 결측값, 이상치, 오입력 등이 있습니다. 따라서 데이터 분석에 적합하도록 데이터셋을 정제해야 합니다.
바로 이것을 전처리(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로 출력.
* $를 붙이고 컬럼 이름을 넣으면 추가
- 넣어준 평균 안에 이상치가 존재할 수 있기 때문에 결과의 값의 오류가 생길 수 있습니다.
'빅데이터 > 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 |