본문 바로가기

R/쉽게 배우는 R 데이터분석

한국인의 삶을 파악하라! -06

반응형

이번에는 직업별 월급을 분석해 보겠습니다. 먼저 직업 변수를 검토하고 전처리하겠습니다.

월급 변수 전처리 작업은 앞에서 완료했으니 생략하고 변수 간 관계를 분석하겠습니다.

 

분석 절차

1. 변수 검토 및 전처리

-직업, 월급

 

2. 변수 간 관계 분석

-직업별 월급 평균표 만들기, 그래프 만들기

 

직업 변수 검토 및 전처리하기

1. 변수 검토하기

먼저 직업을 나타낸 code_job 변수를 살펴보겠습니다.

 

class(welfare$code_job)
[1] "numeric"

table(welfare$code_job)

 111  120  131  132  133  134  135  139  141  149  151  152  153  159  211  212  213 
   2   16   10   11    9    3    7   10   35   20   26   18   15   16    8    4    3 
 221  222  223  224  231  232  233  234  235  236  237  239  241  242  243  244  245 
  17   31   12    4   41    5    3    6   48   14    2   29   12    4   63    4   33 
  ...

 

code_job 변수는 직업 코드를 의미합니다. 복지패널데이터에서 직업은 이름이 아니라 직업분류코드로 입력되어 있습니다. 지금 상태로는 분석을 하더라도 코드가 어떤 직업을 의미하는지 알 수 없습니다. 따라서 직업 분류코드를 이용해 직업 명칭 변수를 만들어야 합니다.

 

2. 전처리

직업분류코드 목록을 이용해 직업의 명칭으로 된 변수를 만들겠습니다. 먼저 직업분류코드 목록 데이터 프레임을 만들겠습니다., 깃허브(bit.ly/doit_rc)에서 Koweps_Codebook.xlsx를 다운로드해 프로젝트 폴더에 삽입한 후 불러오겠습니다. 이 파일의 '직종 코드' 시트에 직업분류코드가 정리되어 있습니다.

엑셀 파일을 불러오기 readxl 패키지를 로드합니다. 첫 행을 변수명으로 가져오도록 설정하고, 엑셀 파일의 두 번째 시트에 있는 직업분류코드 목록을 불러오도록 sheet 파라미터에 2를 지정합니다.

 

library(readxl)
list_job <- read_excel("Koweps_Codebook.xlsx", col_names = T, sheet = 2)

head(list_job)
# A tibble: 6 x 2
  code_job job                                
     <dbl> <chr>                              
1      111 의회의원 고위공무원 및 공공단체임원
2      112 기업고위임원                       
3      120 행정 및 경영지원 관리자            
4      131 연구 교육 및 법률 관련 관리자      
5      132 보험 및 금융 관리자                
6      133 보건 및 사회복지 관련 관리자       

dim(list_job)
[1] 149   2

 

출력 결과를 보면 직업분류코드 목록이 코드와 직업명 두 변수로 구성되고, 직업이 149개로 분류된다는 것을 알 수 있습니다.

 

3. left_join()으로 job 변수를 welfare에 결합합니다. welfare와 list_job에 공통으로 들어 있는 code_job 변수를 기준으로 결합하면 됩니다. 결합이 완료되면 welfare의 code_job, job 변수 일부를 출력해 잘 결합됐는지 확인하겠습니다.

 

welfare <- left_join(welfare, list_job, id = "code_job")

Joining, by = "code_job"

welfare %>% 
  filter(!is.na(code_job)) %>% 
  select(code_job, job) %>% 
  head(10)
  
   code_job                                job
1       942                   경비원 및 검표원
2       762                             전기공
3       530 방문 노점 및 통신 판매 관련 종사자
4       999        기타 서비스관련 단순 종사원
5       312                    경영관련 사무원
6       254             문리 기술 및 예능 강사
...

 

welfare에 직업 명칭으로 된 job 변수가 결합된 것을 확인할 수 있습니다. 이제 이 변수를 이용해 직업별 월급 차이를 분석하면 됩니다.

 

직업별 월급 차이 분석하기

월급 변수에 대한 전처리는 02에서 완료했습니다. 월급, 직업 변수의 전처리가 끝났으니 이제 변수 간 관계를 분석하겠습니다.

 

1. 직업별 월급 평균표 만들기

직업별 월급 평균을 구하겠습니다. 직업이 없거나 월급이 없는 사람은 분석 대상이 아니므로 제외합니다.

 

job_income <- welfare %>% 
  filter(!is.na(job) & !is.na(income)) %>% 
  group_by(job) %>% 
  summarise(mean_income = mean(income))

head(job_income)
# A tibble: 6 x 2
  job                           mean_income
  <chr>                               <dbl>
1 가사 및 육아 도우미                  80.2
2 간호사                              241. 
3 건설 및 광업 단순 종사원            190. 
4 건설 및 채굴 기계운전원             358. 
5 건설 전기 및 생산 관련 관리자       536. 
6 건설관련 기능 종사자                247. 

 

2. 어떤 직업의 월급이 많은지 알아보기 위해 월급을 내림차순으로 정렬하고 상위 10개를 추출합니다.

 

top10 <- job_income %>% 
  arrange(desc(mean_income)) %>% 
  head(10)

top10
# A tibble: 10 x 2
   job                                  mean_income
   <chr>                                      <dbl>
 1 금속 재료 공학 기술자 및 시험원             845.
 2 의료진료 전문가                             844.
 3 의회의원 고위공무원 및 공공단체임원         750 
 4 보험 및 금융 관리자                         726.
 5 제관원 및 판금원                            572.
 6 행정 및 경영지원 관리자                     564.
 7 문화 예술 디자인 및 영상 관련 관리자        557.
 8 연구 교육 및 법률 관련 관리자               550.
 9 건설 전기 및 생산 관련 관리자               536.
10 석유 및 화학물 가공장치 조작원              532.

 

3. 그래프 만들기

이제 앞에서 만든 표를 이용해 그래프를 만들겠습니다. 직업 이름이 길기 때문에 그래프를 기본값으로 만들면 x축이 서로 겹쳐 알아볼 수 없습니다. coord_flip()을 추가해 막대를 오른쪽으로 90도 회전하겠습니다.

 

ggplot(data = top10, aes(x = reorder(job, mean_income), y = mean_income)) +
  geom_col() +
  coord_flip()

 

출력된 표와 그래프를 보면 '금속 재료 공학 기술자 및 시험원'이 평균 845만 원으로 가장 많은 월급을 받고, 그 다음으로는 '의료진료 전문가', 의회의원 고위공무원 및 공공단체임원', '보험 및 금융 관리자'의 월급이 많다는 것을 알 수 있습니다.

 

4.이번에는 어떤 직업들의 월급이 적은지 알아보기 위해 월급이 하위 10위에 해당하는 직업을 추출하겠습니다. 그래프는 앞에서 만든 상위 10위 그래프와 비교할 수 있도록 y축을 0~850까지 표현되게 설정하겠습니다.

 

# 하위 10위 추출
bottom10 <- job_income %>% 
  arrange(mean_income) %>% 
  head(10)

# 그래프 만들기
ggplot(data = bottom10, aes(x = reorder(job, -mean_income),
                            y = mean_income)) +
  geom_col() +
  coord_flip() +
  ylim(0,850)

 

출력된 표와 그래프를 보면 '가사 및 육아 도우미'의 월급이 평균 80만 원으로 가장 적고, 그 뒤로는 '임업관련 종사자', '기타 서비스 관련 단순 종사원', '청소원 및 환경 미화원'의 월급이 적다는 것을 알 수 있습니다.

상,하위 분석 결과를 비교하면 가장 많은 월급을 받는 '금속 재료 공학 기술자 및 시험원'이 '가사 및 육아 도우미'의 열 배가 넘는 월급을 받는다는 것을 알 수 있습니다.

반응형