728x90
07 데이터 정제 - 빠진 데이터, 이상한 데이터 제거하기
07-1 빠진 데이터를 찾아라! - 결측치 정제하기
- 결측치(Missing Value) : 누락된 값, 비어 있는 값을 의미
- 결측치가 있으면 함수가 적용되지 않거나 분석 결과가 왜곡되는 문제가 발생
- 실제 데이터에서는 결측치가 있는지 확인해 제거하는 정제 과정을 거친 후에 분석
df <- data.frame(sex = c("M", "F", NA, "M", "F"), score = c(5, 4, 3, 4, NA)) df ## sex score ## 1 M 5 ## 2 F 4 ## 3 <NA> 3 ## 4 M 4 ## 5 F NA is.na(df) # 결측치 확인 ## sex score ## [1,] FALSE FALSE ## [2,] FALSE FALSE ## [3,] TRUE FALSE ## [4,] FALSE FALSE ## [5,] FALSE TRUE table(is.na(df)) # 결측치 빈도 출력 ## FALSE TRUE ## 8 2 library(dplyr) # dplyr 패키지 로드 df_nomiss <- df %>% filter(!is.na(score) & !is.na(sex)) # score, sex 결측치 제거 df_nomiss ## sex score ## 1 M 5 ## 2 F 4 ## 3 M 4 df_nomiss2 <- na.omit(df) # 모든 변수에 결측치 없는 데이터 추출 df_nomiss2 ## sex score ## 1 M 5 ## 2 F 4 ## 4 M 4 mean(df$score, na.rm = T) # 결측치 제외하고 평균 산출 ## [1] 4
07-2 이상한 데이터를 찾아라! - 이상치 정제하기
- 이상치(Outlier) : 정상 범주에서 크게 벗어난 값
- 오류는 아니지만 굉장히 드물게 발생하는 극단적인 값이 있을 수도 있음
- 이상치가 포함되어 있으면 분석 결과가 왜곡되기 때문에 분석에 앞서 이상치를 제거하는 작업을 해야 함
- 이상치 제거하기 - 존재할 수 없는 값
outlier <- data.frame(sex = c(1, 2, 1, 3, 2, 1), score = c(5, 4, 3, 4, 2, 6)) outlier ## sex score ## 1 1 5 ## 2 2 4 ## 3 1 3 ## 4 3 4 ## 5 2 2 ## 6 1 6 table(outlier$sex) ## 1 2 3 ## 3 2 1 table(outlier$score) ## 2 3 4 5 6 ## 1 1 2 1 1 # sex가 3이면 NA 할당 outlier$sex <- ifelse(outlier$sex == 3, NA, outlier$sex) outlier ## sex score ## 1 1 5 ## 2 2 4 ## 3 1 3 ## 4 NA 4 ## 5 2 2 ## 6 1 6 # score가 5보다 크면 NA 할당 outlier$score <- ifelse(outlier$score > 5, NA, outlier$score) outlier ## sex score ## 1 1 5 ## 2 2 4 ## 3 1 3 ## 4 NA 4 ## 5 2 2 ## 6 1 NA outlier %>% filter(!is.na(sex) & !is.na(score)) %>% group_by(sex) %>% summarise(mean_score = mean(score)) ## # A tibble: 2 x 2 ## sex mean_score ## * <dbl> <dbl> ## 1 1 4 ## 2 2 3
- 이상치 제거하기 - 극단적인 값
boxplot(mpg$hwy) boxplot(mpg$hwy)$stats # 상자 그림 통계치 출력 ## [,1] ## [1,] 12 # 아래쪽 극단치 경계 ## [2,] 18 # 1사분위수 ## [3,] 25 # 중앙값 ## [4,] 27 # 3사분위수 ## [5,] 37 # 위쪽 극단치 경계 ## attr(,"class") ## 1 ## "integer" # 12~37 벗어나면 NA 할당 mpg$hwy <- ifelse(mpg$hwy < 12 | mpg$hwy > 37, NA, mpg$hwy) table(is.na(mpg$hwy)) ## FALSE TRUE ## 226 8 mpg %>% group_by(drv) %>% summarise(mean_hwy = mean(hwy, na.rm = T)) ## # A tibble: 3 x 2 ## drv mean_hwy ## * <chr> <dbl> ## 1 4 19.2 ## 2 f 27.8 ## 3 r 21
출처 : Do it! 쉽게 배우는 R 데이터 분석
728x90
'Do it! > R' 카테고리의 다른 글
Do it! 쉽게 배우는 R 데이터 분석 - 그래프 만들기 (0) | 2021.02.27 |
---|---|
Do it! 쉽게 배우는 R 데이터 분석 - 데이터 가공 (0) | 2021.02.24 |
Do it! 쉽게 배우는 R 데이터 분석 - 데이터 프레임, 데이터 파악 (0) | 2021.02.23 |