09-4 연령대에 따른 월급 차이

분석 요건 갖추기

options(repos = c(CRAN = "https://cran.rstudio.com"))
install.packages("foreign") 
## 'C:/Users/user/AppData/Local/R/win-library/4.3'의 위치에 패키지(들)을 설치합니다.
## (왜냐하면 'lib'가 지정되지 않았기 때문입니다)
## 패키지 'foreign'를 성공적으로 압축해제하였고 MD5 sums 이 확인되었습니다
## 
## 다운로드된 바이너리 패키지들은 다음의 위치에 있습니다
##  C:\Users\user\AppData\Local\Temp\RtmpyCjcOt\downloaded_packages
library(foreign)  
getwd()
## [1] "C:/Users/user/OneDrive/바탕 화면/R"
setwd("C:\\Users\\user\\OneDrive\\바탕 화면\\R")
raw_welfare <- read.spss(file = "Koweps_hpc10_2015_beta1.sav",
 to.data.frame = T)
## Warning in read.spss(file = "Koweps_hpc10_2015_beta1.sav", to.data.frame = T):
## Koweps_hpc10_2015_beta1.sav: Compression bias (0) is not the usual value of 100
welfare <- raw_welfare
library(dplyr)
## 
## 다음의 패키지를 부착합니다: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
welfare <- rename(welfare,
 sex = h10_g3, 
 birth = h10_g4, 
 marriage = h10_g10, 
 religion = h10_g11, 
 income = p1002_8aq1, 
 code_job = h10_eco9, 
 code_region = h10_reg7)
welfare$age <- 2015 - welfare$birth + 1

연령대 변수 검토 및 전처리하기

welfare <- welfare %>%
 mutate(ageg = ifelse(age < 30, "young",
 ifelse(age <= 59, "middle", "old")))
table(welfare$ageg)
## 
## middle    old  young 
##   6049   6281   4334
library(ggplot2)
qplot(welfare$ageg)
## Warning: `qplot()` was deprecated in ggplot2 3.4.0.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

연령대에 따른 월급 차이 분석하기

연령대별로 월급 평균표 만들기

ageg_income <- welfare %>%
 filter(!is.na(income)) %>%
 group_by(ageg) %>%
 summarise(mean_income = mean(income))
ageg_income
## # A tibble: 3 × 2
##   ageg   mean_income
##   <chr>        <dbl>
## 1 middle        281.
## 2 old           125.
## 3 young         164.

월급 평균이 초년 163만원, 중년 281만원, 노년 125만원인 것을 알 수 있다.

그래프 그리기

ggplot(data = ageg_income, aes(x = ageg, y = mean_income)) + geom_col()

초년, 중년, 노년 나이 순으로 막대 정렬하기

ggplot(data = ageg_income, aes(x = ageg, y = mean_income)) +
 geom_col() +
 scale_x_discrete(limits = c("young", "middle", "old"))

그래프를 통해 중년의 월급이 가장 많고 다음으로 초년이 많으며 노년의 월급이 가장 작은 것을 알 수 있다. 또한 중년과 다른 초년, 노년 간 차이가 큰 것을 알 수 있다.

09-5 연령대 및 성별 월급 차이

연령대 및 성별 월급 차이 분석하기

연령대 및 성별 월급 평균표 만들기

sex_income <- welfare %>%
 filter(!is.na(income)) %>%
 group_by(ageg, sex) %>%
 summarise(mean_income = mean(income))
## `summarise()` has grouped output by 'ageg'. You can override using the
## `.groups` argument.
sex_income
## # A tibble: 6 × 3
## # Groups:   ageg [3]
##   ageg     sex mean_income
##   <chr>  <dbl>       <dbl>
## 1 middle     1       353. 
## 2 middle     2       186. 
## 3 old        1       174. 
## 4 old        2        81.5
## 5 young      1       171. 
## 6 young      2       160.

그래프 만들기

ggplot(data = sex_income, aes(x = ageg, y = mean_income, fill = sex)) +
 geom_col() +
 scale_x_discrete(limits = c("young", "middle", "old"))

성별 막대 분리하기

ggplot(data = sex_income, aes(x = ageg, y = mean_income, fill = sex)) +
 geom_col(position = "dodge") +
 scale_x_discrete(limits = c("young", "middle", "old"))

그래프를 통해 비교적 남성이 여성보다 더 많은 월급을 받는다. 남성은 초년과 노년 간 월급 차이가 작지만 중년때 압도적으로 많은 월급을 받아 격차가 크다. 여성은 초년과 중년 간 차이가 크지 않지만 중년과 노년 간 격차가 크다.

나이 및 성별 월급 차이 분석하기

성별 연령별 월급 평균표 만들기

sex_age <- welfare %>%
 filter(!is.na(income)) %>%
 group_by(age, sex) %>%
 summarise(mean_income = mean(income))
## `summarise()` has grouped output by 'age'. You can override using the `.groups`
## argument.
head(sex_age)
## # A tibble: 6 × 3
## # Groups:   age [3]
##     age   sex mean_income
##   <dbl> <dbl>       <dbl>
## 1    20     1         69 
## 2    20     2        147.
## 3    21     1        102.
## 4    21     2        107.
## 5    22     1        118.
## 6    22     2        140.

그래프 만들기

ggplot(data = sex_age, aes(x = age, y = mean_income, col = sex)) + geom_line()

그래프를 보면 성별 월급 격차는 30세부터 지속적으로 벌어져 50대 초반에 가장 크게 벌어지고, 그 이후로 점차 줄어들어 70대 후반이 되면 비슷해 진다는 것을 알 수 있다.

09-6 직업별 월급 차이

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

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 
##    2   16   10   11    9    3    7   10   35   20   26   18   15   16    8    4 
##  213  221  222  223  224  231  232  233  234  235  236  237  239  241  242  243 
##    3   17   31   12    4   41    5    3    6   48   14    2   29   12    4   63 
##  244  245  246  247  248  251  252  253  254  259  261  271  272  273  274  281 
##    4   33   59   77   38   14  111   24   67  109    4   15   11    4   36   17 
##  283  284  285  286  289  311  312  313  314  320  330  391  392  399  411  412 
##    8   10   26   16    5  140  260  220   84   75   15    4   13   87   47   12 
##  421  422  423  429  431  432  441  442  510  521  522  530  611  612  613  620 
##  124   71    5   14   20   33  154  197  192  353    5  106 1320   11   40    2 
##  630  710  721  722  730  741  742  743  751  752  753  761  762  771  772  773 
##   20   29   30   22   16   27    3   34   34    5   49   69   27   11   61   86 
##  774  780  791  792  799  811  812  819  821  822  823  831  832  841  842  843 
##    7   17    5   21   45   16    1    6    9    9   23    5   17   32   10    4 
##  851  852  853  854  855  861  862  863  864  871  873  874  875  876  881  882 
##   19   13    7   33    9    3   14   17   31    2  257   34   37    2    2    3 
##  891  892  899  910  921  922  930  941  942  951  952  953  991  992  999 1011 
##    8   19   16  102   31   74  289  325   99  125  122   73   45   12  141    2 
## 1012 
##   17
library(readxl)
list_job <- read_excel("Koweps_Codebook.xlsx", col_names = T, sheet = 2)
head(list_job)
## # A tibble: 6 × 2
##   code_job job                                
##      <dbl> <chr>                              
## 1      111 의회의원 고위공무원 및 공공단체임원
## 2      112 기업고위임원                       
## 3      120 행정 및 경영지원 관리자            
## 4      131 연구 교육 및 법률 관련 관리자      
## 5      132 보험 및 금융 관리자                
## 6      133 보건 및 사회복지 관련 관리자
dim(list_job)
## [1] 149   2
welfare <- left_join(welfare, list_job, 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             문리 기술 및 예능 강사
## 7       510                        영업 종사자
## 8       530 방문 노점 및 통신 판매 관련 종사자
## 9       286   스포츠 및 레크레이션 관련 전문가
## 10      521                   매장 판매 종사자

직업별 월급 차이 분석하기

직업별 월급 평균표 만들기

job_income <- welfare %>%
 filter(!is.na(job) & !is.na(income)) %>%
 group_by(job) %>%
 summarise(mean_income = mean(income))
head(job_income)
## # A tibble: 6 × 2
##   job                           mean_income
##   <chr>                               <dbl>
## 1 가사 및 육아 도우미                  80.2
## 2 간호사                              241. 
## 3 건설 및 광업 단순 종사원            190. 
## 4 건설 및 채굴 기계운전원             358. 
## 5 건설 전기 및 생산 관련 관리자       536. 
## 6 건설관련 기능 종사자                247.

상위 10개 추출하기

top10 <- job_income %>%
 arrange(desc(mean_income)) %>%
 head(10)
top10
## # A tibble: 10 × 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.

그래프 만들기

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

가장 월급을 많이 버는 직업은 ’금속 재료 공학 기술자 및 시험원’으로 평균 845만원을 번다.

하위 10위 추출

bottom10 <- job_income %>%
 arrange(mean_income) %>%
 head(10)
bottom10
## # A tibble: 10 × 2
##    job                          mean_income
##    <chr>                              <dbl>
##  1 가사 및 육아 도우미                 80.2
##  2 임업관련 종사자                     83.3
##  3 기타 서비스관련 단순 종사원         88.2
##  4 청소원 및 환경 미화원               88.8
##  5 약사 및 한약사                      89  
##  6 작물재배 종사자                     92  
##  7 농립어업관련 단순 종사원           102. 
##  8 의료 복지 관련 서비스 종사자       104. 
##  9 음식관련 단순 종사원               108. 
## 10 판매관련 단순 종사원               117.

그래프 만들기

ggplot(data = bottom10, aes(x = reorder(job, -mean_income),
 y = mean_income)) +
 geom_col() +
 coord_flip() +
 ylim(0, 850)

가장 월급을 적게 버는 직업은 ’가사 및 육아 도우미’로 평균 80만원을 번다. 앞에서 나온 월급을 가장 많이 받는 직업과 비교하자면 월급이 열 배 넘게 차이가 난다.

09-7 성별 직업 빈도

성별 직업 빈도 분석하기

남성 직업 빈도 상위 10개 추출

job_male <- welfare %>%
 filter(!is.na(job) & sex == "male") %>%
 group_by(job) %>%
 summarise(n = n()) %>%
 arrange(desc(n)) %>%
 head(10)
job_male
## # A tibble: 0 × 2
## # ℹ 2 variables: job <chr>, n <int>

여성 직업 빈도 상위 10개 추출

job_female <- welfare %>%
 filter(!is.na(job) & sex == "female") %>%
 group_by(job) %>%
 summarise(n = n()) %>%
 arrange(desc(n)) %>%
 head(10)
job_female
## # A tibble: 0 × 2
## # ℹ 2 variables: job <chr>, n <int>

남성 직업 빈도 그래프

ggplot(data = job_male, aes(x = reorder(job, n), y = n)) +
 geom_col() +
 coord_flip()

남성은 작물재배 종사자가 가장 많다는 것을 알 수 있다.

여성 직업 빈도 그래프

ggplot(data = job_female, aes(x = reorder(job, n), y = n)) +
 geom_col() +
 coord_flip()

여성도 작물재배 종사자가 가장 많다는 것을 알 수 있다.

09-8 종교 유무에 따른 이혼율

종교 변수 검토 및 전처리하기

class(welfare$religion)
## [1] "numeric"
table(welfare$religion)
## 
##    1    2 
## 8047 8617
welfare$religion <- ifelse(welfare$religion == 1, "yes", "no")
table(welfare$religion)
## 
##   no  yes 
## 8617 8047
qplot(welfare$religion)