안녕하세요. Growth Scientist입니다.
오늘은 전통적인 통계 패키지죠. R 프로그램을 이용하여 데이터를 다루는 법을 소개하겠습니다.
실습에 사용할 데이터는 공공데이터인 국민건강영양조사<2019> 자료입니다.
자 그럼 시작해볼까요?
1. 데이터 불러오기
먼저 R STUDIO를 켜줍니다.
그리고 데이터가 있는 폴더에 가서 폴더 경로를 복사해줍니다.
그런 다음 R STUDIO에서 setwd('파일경로')를 넣어줍니다.
그런데 여기서 주의할 점은 저기있는 '역슬래시'를 '슬래시'로 바꿔야합니다. 그렇지 않으면 오류가나요ㅠㅠ
데이터가 있는 폴더에 도착했으면, read.csv('파일명.csv')를 입력해줍니다. 그리고 변수에 저장해줍니다.
hn_dat <- read.csv('Hn19_all.csv')
참고로 ALT + -(마이너스기호)를 같이 누르시면 <- 가 만들어지는데,
다른 프로그래밍 언어에서 변수를 저장해주는 =(등호)와 똑같은 역할을 한답니다!
데이터를 불러왔으면 한 번 쭉 훑어봐야겠죠?
그런데 이렇게 보기 어렵게 나오니 어떤 변수를 선택해서 분석을 해야할 지 감이 잡히지 않으실 거에요.
그래서 저는 코딩북(변수들의 정보가 담겨있는 파일)과 표본 데이터를 수집할 때 사용한 설문조사 데이터를 사용했습니다.
제가 이번 분석에서 사용할 변수들은 아래와 같답니다.
Y <- hn_dat$HE_BMI #비만율
X1 <- hn_dat$age #나이
X2 <- hn_dat$BO1;X2 #주관적 체형인식
X3 <- hn_dat$ainc #소득
X4 <- hn_dat$BP1 #스트레스 인지율
X5 <- hn_dat$LQ_8HT #행복감
X6 <- hn_dat$educ #학력
X7 <- hn_dat$LQ_3HT #우울감
X8 <- hn_dat$BO2_1 #체중조절여부
X9 <- hn_dat$HE_insulin #인슐린 수치
X10 <- hn_dat$sex;X10 #성별
dataframe$series 에서 '$'는 꼭 알아두세요! 데이터프레임에서 어떤 열을 선택할 건지 정할 수 있어요.
이번엔 이 변수들을 이용해서 다중회귀분석을 할건데
식습관의 영향이 없이 비만에 미칠 수 있는 변수들을 보려고해요.
그래서 반응변수 Y와 10개의 설명변수 X에 데이터(Series)를 삽입해 새로운 데이터 프레임을 만들 것입니다.
전체 데이터에서 새로운 데이터를 만드는 명령은
hn <- data.frame(cbind(Y,X1,X2,X3,X4,X5,X6,X7,X8,X9,X10)) 이렇게 됩니다.
cbind는 columns bind인데 열을 묶어주는 역할을 하죠! 문서를 모아주는 바인더처럼용
이 후에 head(hn)을 찍어보면 이런 식으로 데이터프레임이 생성될 거예요.
그런데 저기 5번 행에 NA라는 결측치가 보이죠? 여기에 보이는 결측치는 데이터가 입력이 안되었거나,
누락이 되었을 가능성이 커요. 보통은 결측치가 전체 데이터의 몇 %를 차지하냐에 따라 다른데
이번 분석에선 삭제하고 진행할게요! 그리고 설문지를 보면 8번(비해당) 9번(모름) 등의 결측치 후보들이 있어요.
이러한 값들은 연구자의 주관대로 대체하거나 결측치로 처리하는 등의 과정을 거치면 됩니다.
2. 데이터 전처리
hn_dat$BO2_1[hn_dat$BO2_1==8|hn_dat$BO2_1==9] <- NA #체중 조절 여부 전처리
쉽게 설명하면 hn_dat$BO2_1 열 안에 8(비해당) |(OR) 9(모름)이 있다면 NA(결측치)로 처리하라는 명령입니다!
R 연산자설명은 아래를 보시면 되겠어요
-,+,*,/ | 사칙연산 |
%% | Modulus(나머지연산) |
%/% | Integer division(정수나누기의 몫) |
< | 작다(논리값) |
> | 크다(논리값) |
== | 같다(논리값) |
>= | 크거나 같다(논리값) |
<= | 작거나 같다(논리값) |
! | 부정 |
^ | 지수 |
& | And, vectorized |
&& | And |
| | Or, vectorized |
|| | Or |
vectorized : 벡터화 처리 | |
-> cpu사용율을 높이고 동시연산이 가능함 | |
이렇게 설문에서 만들어진 결측치와 원본데이터에 있던 결측치들이 생겨났어요.
결측치를 대체하는 방법은 중앙값, 평균값, 최빈값 등을 많이 사용하는데,
자세한 방법은 다음에 다루도록하고 오늘은 결측치를 삭제하는 법을 알려드릴게요.
2.1 결측치 삭제하기
hn <- na.omit(hn)
데이터프레임에 처리할 결측치를 모아주고 na.omit(df)의 명령을 주게되면
결측치들이 모두 삭제가 돼요
dim(df)를 통해 차원(shape)를 보면 2400여개의 데이터가 지워진 것을 알 수 있죠?
지금은 실습 차원이기 때문에 데이터를 막 삭제해도 됐지만,
실제 프로젝트에서 데이터는 하나하나 소중한 자원이기 때문에, 무차별적으로 삭제하면 안된답니다.
이후에 다시 head(hn)을 보면 5번 행이 사라진 것을 볼 수가 있어요.
na.omit은 해당 행에 결측치가 하나라도 있으면 모두 삭제하고 남은 행을 반환하기 때문이에요.
결측치가 잘 제거되었나 확인하는 방법은
sum(is.na(hn))를 통해서 확인할 수 있어요.
만약 hn라는 데이터프레임안에 결측치가 있다면 그 셀의 값은 is.na()함수로 인해 TRUE가 될것이고
TRUE는 곧 1이기 때문에 sum함수에 의해서 1이 가산이 돼요. 곧 저 함수는 결측치의 개수를 세어줄 수 있다는 것이죠!
이렇게되면 데이터분석을 위한 기본적인 전처리는 끝났습니다.
데이터 전처리는 분석 단계보다도 더 중요한 비중을 차지하고 있기때문에,
결측치와 이상치(Outlier)를 처리하는 방법에 대해서 많은 연구가 이루어지고 있어요.
이에 대한 포스팅은 차후에 하도록 하겠습니다.
감사합니다!
'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 프로그래밍 회귀분석] 탐색적데이터 분석(EDA) - 1 데이터 분포 살펴보기 (0) | 2022.06.21 |