(통계분석) R

10.02(금) 데이터 분석 실전 (성별에 따른 월급 차이, 나이에 따른 월급 차이)

KSY98 2020. 10. 3. 00:54

📚해당 게시글은 '이지스 퍼블리싱' 출판, 데이터 분석가 '김영우'님이 지은 도서 "Do it! 쉽게 배우는 R 데이터 분석" 을 기반으로 작성된 게시글입니다. 저작권 문제 시 게시글을 삭제 하겠습니다 :) 

 

앞서 배웠던 함수들을 총 동원해 오늘부터 실전 데이터 분석을 하는 단원에 들어왔다.

나중에 학교 중간고사 끝나면 함수들만 정리해놓은 게시글을 하나 작성해야겠다. 분석할 때 쉽게..

분석 실전이라 하지만 아직은 기본적인 분석을 배우는 단계이다. 이제 이 책 1회독 끝나면 보건통계 자료로 데이터 분석 해봐야지

 

우선 오늘은, '한국 복지패널 데이터' 분석을 준비하는 과정과, 이 데이터를 통해 성별에 따른 월급 차이, 나이에 따른 월급 차이에 대해 분석해 볼것이다.

 

-데이터 분석을 위한 준비단계

데이터는 깃허브에서 다운받았다. 이 방법뿐만 아니라, 한국 복지 패널 사이트에 가입하면 데이터를  무료로 다운 받을 수 있다.

패키지 설치 및 로드, 코드북을 참고한 변수명 변경

 데이터를 활용하기 위해 필요한 패키지를 설치하고 로드했다. 새로 설치한 패키지는 "foreign"이라는 패키지다. 해당 패키지는 SPSS, SAS,STATA 등 다양한 통계분석 소프트웨어의 파일을 불러오는 역할을 한다. 참고로 한국 복지패널 사이트에서 제공하는 데이터는 SPSS,SAS,STATA 전용 파일로 제공되기 때문에, 해당 패키지를 설치한 것.

설치후에 library()함수를 이용해 필요한 패키지들을 불러왔다. ggplot2, readxl, dplyr 등의 패키지는 이전에 실습단계에서 설치 해놨던 패키지라 따로 설치 필요없이 로드만 해온 것.

 패키지 로드 후, 데이터를 불러왔다. foreign 패키지 내의 read.spss를 이용해 깃허브에서 다운받은 복지패널 데이터를 불러왔다. 원본은 복구해야 할 상황에 대비해 그대로 두고 welfare라는 복사본 만들었다.

 데이터를 불러 온 후, 변수명을 확인하고 변경했다. 초반에 변수명에 대해 설명할 때, 변수명은 알아보기 쉽고 이해하기 쉬워야 한다고 언급한 적이 있다. 한국 복지 패널 사이트에서 코드북 또한 제공해주는데, 코드북을 열어보니 도저히 알수없는 문자들로 변수를 지정해놨다. 이에, rename()함수를 이용해 복사본 welfare 내의 변수명을 알기 쉽게 변수명을 변경했다.

 

- 성별에 따른 월급 차이 (성별에 따라 월급이 다를까?)

과거에 비해 여성들의 활발한 사회 진출이 가능해졌다고는 하지만, 여전히 여성 대우에 대한 차별은 존재한다고 한다.

실제 데이터 분석을 통해, 성별에 따른 월급 차이가 있는지 확인해보았다.

참고로, 데이터는 2016년에 작성된 데이터로, 2015년 자료를 담고있다.

성별에 따른 월급 차이 분석 과정

우선 성별에 따른 월급의 차이를 분석하기 위해 필요한 변수는? sex, income

summary()함수를 이용해 해당 변수들의 특성을 파악했다.

성별(sex)변수를 보니, 데이터가 1과 2로 나뉘어져있었고, 코드북에 의하면 1은 남성, 2는 여성, 9는 무응답이라고 한다. 

답변이 9인 데이터는 없었기에, 이상치 처리 과정은 생략하고, ifelse() 함수를 이용해 1인 경우는 male, 2인 경우는 female을 부여했다.

월급(income)변수의 경우, NA가 존재하는 것으로 보아, 이상치가 있는 데이터로 판단되었다. 코드북에 의해면 무응답은 9999이고, 월급은 1~9998의 값을 가지기 때문에, ifelse()함수를 이용해 답변이 0이거나 9999인 데이터는 NA(결측치)로 처리하였고, table(!is.na())함수를 이용해 결측치 확인 과정을 거쳤다.

이제, 본격적으로 성별에 따른 월급의 차이를 분석해보는 것! 사실 별거 없더라ㅋㅋ 다 배운 함수라 그런가요...? 

%>% 이용해서, welfare 내의 income 변수에 결측치는 제외하고[filter(!is.na())], 성별로 묶어(group_by), 월급의 평균을 뜻하는 mean_income이라는 변수를 만들어 sex_income 데이터를 생성했다.

그리고, ggplot(data= 데이터명, aes(x=x축 변수명, y=y축 변수명) + geom_col()을 이용해 막대그래프를 생성했다.

결과: 여성은 평균 400만원이 약간 넘고, 남성은 평균 700만원에 이르는 월급을 받고있다!

 

- 나이와 월급의 관계(몇 살 때 월급을 가장 많이 받을까?)

이제 성별과 월급이 아닌, 나이와 월급의 관계를 파악해보자.

패키지는 앞서 설치하고 로드한 그대로 이용했으므로, 바로 분석단계!

나이에 따른 월급의 차이 분석 과정

다시 처음으로..

나이에 따른 월급의 차이를 분석 할 때 필요한 변수는? birth, income

앞의 과정과 동일하게 summary()함수를 이용해 변수들의 특성을 파악했다. 

우선 birth 변수의 경우, summary()함수와 결측치를 확인하는 table(is.na())함수를 사용했을 때 결측치가 없다고 뜨기 때문에 패스.

income 변수는 앞서 해봤 듯, 결측치가 있었다. 그래서 다시 0과 9999 값을 가진 이상치 데이터들은 NA (결측치)로 처리했다.

이제 나이 변수를 제대로 만들어 줘야한다. birth 변수는 '태어난 년도'로 되어있다. 따라서, '나이'를 나타내는 파생변수를 만들어줘야한다. 자료는 2015년이지만, 현재에 맞춰.. 2020년 기준으로 태어난 년도를 빼고 1을 더해 우리나라 나이 계산법을 이용한 '나이'변수를 생성했다.

나이와 월급의 관계 분석을 위해, welfare 데이터에서 income 변수의 결측치를 제외[filter(!is.na())]하고, 나이에 따른(group_by) 월급의 평균(mean_income)을 나타내는 age_income 프롬프트를 작성했다.

작성한 프롬프트는 ggplot(data=데이터명, aes(x=x축 변수명, y=y축 변수명)) + geom_line() 을 이용해 선 그래프를 생성했다. 

결과: 20대 초반에는 100만원 가량의 월급을 받고, 이후 지속적으로 증가한다. 50대에 300만원을 초과하는, 가장 많은 월급을 받게되고 그 이후에는 지속적으로 감소한다.

 

요로코롬 오늘은 나이/성별에 따른 월급의 차이를 분석해보았다.

단계를 정리하자면, 

1. 패키지 설치 및 로드

2. 데이터 다운 및 불러오기, 코드북 참고해서 변수명 바꿔주기

3. 분석에 필요한 변수 지정

4. 각 변수의 이상치 확인 (이상치 존재 > 결측치로 전환, 이상치 미존재 > 결측치로 전환 과정 스킵)

 4-1. 필요한 경우, 변수 내 데이터 항목에 이름 부여 (ex. sex 변수> 1=male, 2=female)

5. 결측치를 제외하고 '변수'별로 '~~'를 나타내는 프롬프트를 %>%를 이용해 작성

6. 다양한 형태의 그래프로 출력 후 결과 확인

내일은 또 다른 분석들을 해보자!