R studios

R통계 : Theme#5. 데이터 정제 (결측치와 이상치) 다루기

Frisbeen 2024. 5. 27. 17:00

결측치 정제

is.na(df) 하면 df에 들어있는 녀석들 중 골라서 boolean type으로 리턴해줌.
table(is.na(df)) — 몇개 있는지 파악.

결측지 제거

  1. 결측치가 있는 행만 추출 — filter()

na값이 존재하면 평균과 같은 수학계산하는데 상당한 무리가 있다. 따라서 필터링으로 먼저 없앤다.

df %>% filter(!is.na(score))

df %>% filter(!is.na(Score) & !is.na(gender))
## 이렇게 필터링 조건문을 두개 이상 넣어서 다 없애도 됌
  1. 결측치가 하나라도 있으면 제거 - na.omit()

소위 말하는 데이터의 na을 통으로 날리는거다.

na.omit(df) . 해버리고 수학계산하면 아주 예쁘게 계산 가능

결측치 제외

함수내부에서 제거를 해주는 것.

df %>% summarise(mean_score = mean(score,na.rm=TRUE)

결측치 대체

조건문을 활용한다.

Ifelse를 활용해서 na가 맞으면 mean을 활용해서 대체해준다. na.rm=t 같이써주고

여기서 포인트는 조건문에서 다 파생변수를 활용했다는 것.

df $ score = ifelse(is.na(df$score),mean(df$score,na.rm=TRUE),df$score)

이상치 제거

이상치는 갑자기 튀는 값이라 생각하면 편하다.

data frame에서 이상치를 검사하고 싶다고 가정할때

table(outlier $ score)

각 빈도값이 나오는데 이때 튀는 값이 존재한다면?

  1. 결측치로변환
  2. 분석에서 제외

이 단계로 이상치를 제거한다.

제거할때는 결측지 제거랑 마찬가지로 ifelse문을 활용

##1.
outlier$score = ifelse(outlier$ score>5, NA,outlier$score)
이런 느낌으로 제거해준다.

##2.
outlier %>% filter(!is.na(gender) & !is.na(score) ...
그 다음 분석에서 선 필터링으로 결측치 제거해주면끝