안녕하세요.
오늘은 데이터 전처리에서 가장 중요한 과정 중 하나인 결측치에 대해 알아보고 R을 활용하여 처리하는 방법에 대해 알아보겠습니다.
결측치 개요 (정의/종류/방법)
▣ 결측치란?
자료가 누락되어있는 상태를 결측(missing)이라고 하며 누락 되어있는 상태를 별도의 숫자 또는 문자로 표기한 것을 결측값(missing value)이라고 한다.
▣ 결측치 종류
- 완전 무작위 결측 (MCAR; Missing Completely at Random) : 결측치가 다른 변수들과 아무런 상관이 없음
- 무작위 결측 (MAR; Missing at Random) : 특정 변수에 관련되어 누락되었지만, 그 변수는 결과와 관련이 없음
- 비무작위 결측 (MNAR; Missing Not At Random) : 결과에 관련이 있는 변수 때문에 값이 누락됨
▣ 결측치 처리 방법
- 합리적 접근법 : 결측값을 평균, 중앙값, 예상값 등으로 채워 넣는 방식
- 완전제거법 : 결측값이 있는 데이터 전체를 삭제하는 방법
- 다중대체법 : 시뮬레이션을 통해 예측되는 최대한 정확한 값을 채워 넣는 방식
반응형
R 활용하여 결측치 조회 및 처리
▣ 결측치 조회하기
† 결측치 조회함수
함수 | 내용 |
is.na() | NA를 확인하며 결과값은 (TRUE, FALSE) 출력 |
is.null() | Null을 확인하며 결과값은 (TRUE, FALSE) 출력 |
apply, sapply | function에 결측치 조회 함수 활용 |
† 결측치 개수 확인하기
<데이터 예시 :: df>
sex | score |
M | 5 |
F | 4 |
NA | 3 |
M | 4 |
F | NA |
## 데이터 :: df ##
df <- data.frame(sex = c("M", "F", NA, "M", "F"),
score = c(5, 4, 3, 4, NA))
## 결측치 확인하기 ##
is.na(df) # 결측치 확인
table(is.na(df)) # 결측치 빈도 출력
'''
결과 총 NA 2개 확인
FALSE TRUE
8 2
'''
## 결측치 확인하기2 ##
apply(X = df, MARGIN = 2, FUN = function(x){sum(is.na(x))})
sapply(X = df, FUN = function(x){sum(is.na(x))})
'''
결과 각 열별로 1개씩 결측치
sex score
1 1
'''
▣ 결측치 처리
† 결측치 처리함수
함수 | 내용 |
na.omit() | 결측치를 제거하는 함수로 결측값 제거한 객체 출력 |
함수 : na.rm = T | mean, sum 등에 'na.rm = T' 추가시 결측값 제거 후 계산 |
ifelse ~ is.na | 결측값 대체 |
† 결측치 처리하기
## ggplot2 mpg 데이터 ##
mpg <- as.data.frame(ggplot2::mpg) # mpg 데이터 불러오기
mpg[c(65, 124, 131, 153, 212), "hwy"] <- NA # NA 할당하기
# hwy 결측치 빈도표 출력
table(is.na(mpg$hwy))
'''
FALSE TRUE
229 5
'''
# hwy 결측치 평균으로 대체하기
mpg %>%
filter(!is.na(hwy)) %>% # 결측치 제외
group_by(drv) %>% # drv별 분리
summarise(mean_hwy = mean(hwy)) # hwy 평균 구하기
'''
drv mean_hwy
<chr> <dbl>
1 4 19.2
2 f 28.2
3 r 21
'''
# hwy 결측치 제거하기
head(na.omit(mpg),5)
'''
manufacturer model displ year cyl trans drv cty hwy fl class
1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact
3 audi a4 2.0 2008 4 manual(m6) f 20 31 p compact
4 audi a4 2.0 2008 4 auto(av) f 21 30 p compact
5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compact
'''
References
- 쉽게 배우는 Do it R part7 데이터 정제
- R) 결측치 처리 - datadoctor blog
반응형
'Programming > R' 카테고리의 다른 글
[R] 워드 클라우드(WordCloud) 설명 및 예시 (0) | 2023.01.11 |
---|---|
[R] 히스토그램(histogram) 그리기 (2) | 2023.01.08 |
R 연습 사이트 추천 (공부, 예제) (0) | 2022.06.10 |
[R] 데이터 전처리 - dplyr 패키지 (0) | 2022.04.24 |
[R] 반응형 그래프 만들기 plotly, dygraphs (1) | 2021.06.29 |
댓글