안녕하세요. Growth Scientist입니다.
오늘은 지난번 데이터 불러오기와 전처리에 이어서
본격적인 분석에 방향성을 잡게해주는 탐색적 데이터 분석을 하려고해요.
탐색적 데이터 분석은 (Exploratory Data Analysis) 주어진 데이터 셋(Data Set)을
포괄적이고 직관적으로 바라보면서 데이터를 이해하는 과정이라고 생각하시면 됩니다.
정해진 목적지를 가기 전, 갈 수있는 경로에 대해서 알아보는 것이 되겠네요.
오늘 보여드릴 EDA는 데이터의 분포 및 이상치 확인, 상관관계 분석을 보여드릴 거에요.
실습 파일은 이전 글에서 소개드렸던 국민건강영양조사 데이터를 사용하도록 할게요.
hn 데이터를 잘 불러오셨다면 먼저 데이터들의 분포를 확인해볼까요?
너무 한쪽으로 치우친 분포는 없는지, 이상치가 있는지를 확인해볼거에요
선택된 변수들은 모두 연속형변수라서 히스토그램으로 분포를 살펴보고
BOXPLOT(상자수염그림)으로도 이상치를 체크해볼거에요
[ 수치형변수 히스토그램 그리기 ]
R에 내장되어있는 함수 hist(변수명)을 써도 되지만,
앞으로 더 다양한 시각화를 할 수 있는 ggplot2패키지를 사용해볼게요!
패키지가 없으신 분들은
install.packages('ggplot2')를 실행하신 후
library('ggplot2')를 불러와주세요!
※ 간혹 패키지 설치 오류가 뜨시는 분들이 계시는데요.
R프로그램을 관리자 권한으로 실행하면 대부분 해결될 겁니다!
기본 명령은 ggplot(df,aes(x=변수명))+geom_그래프명() 인데요
ggplot(df,aes(x=변수명)) 이 부분은 데이터가 들어갈 도화지를 만들어주는 부분이고
geom_그래프명() 이 부분은 그림을 그리는 부분이라고 생각하시면 편합니다!
저는 ggplot(hn,aes(x=Y))+geom_histogram(bins=60)으로 Y(BMI)에 대한 변수의 분포를 그리고
histogram의 bins를 60으로 설정해주었는데요. bins는 X축의 구간의 수입니다.
60이면 60개의 구간으로 나눠지겠네요!
만약 bins를 100으로 설정하면 아래와같은 그림이 나오는데 구간을 어떻게 설정하느냐에 따라
정규분포의 형태가 나올수도 있고 나오지 않을수가 있답니다. 그래서 여러 번 조절 해보셔야 해요.
그래프를 해석해보면 BMI지수가 높은 몇몇 사람에 의해 오른쪽으로 긴 꼬리가 형성되었네요.
오른쪽이 긴 꼬리는 skewness(왜도)가 양의 값을 가진답니다.
library(moments)를 이용해 skewness(hn) 함수를 사용하면
데이터셋에 있는 변수들의 왜도를 한 눈에 볼 수 있어요.
보통 왜도와 첨도 값이 -2~2사이에 있다면 왜도와 첨도가 크지 않다고 해석해요.
X9(체내 인슐린 수치)는 왜도가 양의값으로 오른쪽 부분에 극단값들이 있는 것으로 추측되네요.
실제로 히스토그램을 그려보면 150을 넘어서도 데이터가 몇몇 존재하는 게 보이시죠??
저 데이터들이 인슐린 수치의 평균을 높이는 이상치임을 간주하고 상자그림을 그려볼게요
[ BOXPLOT ] 그리기
상자그림을 그리는 법은 굉장히 쉬워요.
boxplot(변수명)만 해주시면 돼요
그림을 보시면 200이 넘어가는 수치가 보이기도 하죠. 인슐린 수치의 정상적 범위는 15~40인데
저러한 과도한 이상치는 회귀분석 모델의 예측력을 떨어뜨리기 때문에, 결측치로 제거를 해줄게요
결측치로 제거하는 방법은 데이터 필터링을 쓸건데요.
기본적인 문법은 df <- df[df$series>=조건] 이에요.
즉, 조건에 맞는 열의 값들을 남기고 df에 저장하는 것이죠.
이를 활용해 결측치로 처리하는 방법은
df$series[df$series>조건] <- NA 를 사용하면 됩니다.
본 데이터에 적용해보면
hn$X9[hn$X9 > 200] <- NA로 인슐린 수치가 200이 넘는 값들은 모두 결측치(NA)로 처리해주는 거에요.
이처럼 개별적으로 변수들의 분포, 왜도, 첨도, 평균, 중앙값 등 기술통계량을 살펴보고
BOX-PLOT을 이용해 이상치를 파악하여 데이터까지 처리를 할 수 있습니다.
다음에는 탐색적 데이터분석 2단계로 상관관계 분석을 포스팅 하겠습니다.
그럼 BYE~
'Data Analysis > [Project] Regression With R' 카테고리의 다른 글
[R 프로그래밍 회귀분석] ANOVA 함수와 해석 (0) | 2022.06.28 |
---|---|
[R 프로그래밍 회귀분석] Summary 분석 해석 (0) | 2022.06.26 |
[R 프로그래밍 회귀분석] 변수선택 - 동시/단계별 변수입력 (0) | 2022.06.25 |
[R 프로그래밍 회귀분석] 탐색적데이터 분석(EDA) - 2 상관관계 분석 (0) | 2022.06.22 |
[R 프로그래밍 실습] 데이터 불러오기 및 전처리 (0) | 2022.06.18 |