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"))
그래프를 통해 중년의 월급이 가장 많고 다음으로 초년이 많으며 노년의 월급이 가장 작은 것을 알 수 있다. 또한 중년과 다른 초년, 노년 간 차이가 큰 것을 알 수 있다.
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대 후반이 되면 비슷해 진다는 것을 알 수 있다.
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.
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만원을 번다.
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만원을 번다. 앞에서 나온 월급을 가장 많이 받는 직업과 비교하자면 월급이 열 배 넘게 차이가 난다.
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>
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()
여성도 작물재배 종사자가 가장 많다는 것을 알 수 있다.
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)