Notes
# 연령대별(age gap) 평균급여
# 연령대를 30세 미만(young), 60세 미만(middle), 60세 이상(old) 구간으로 나눔.
welfare = welfare %>%
mutate(ageg = ifelse(age<30,'young',ifelse(age<60,'middle','old')))
table(welfare$ageg)
ggplot(data = welfare, mapping = aes(x=ageg))+geom_bar()
# 연령대별 평균 급여 테이블
income_by_ageg = welfare %>%
filter(!is.na(income)) %>%
group_by(ageg) %>%
summarise(mean= mean(income))
> income_by_ageg
# A tibble: 3 x 2
ageg mean
<chr> <dbl>
1 middle 282.
2 old 113.
3 young 174.
ggplot(data=income_by_ageg, mapping = aes(x=ageg, y = mean)) + geom_col()
# 연령대 + 성별 평균 급여 그래프
income_by_ageg_gender = welfare %>%
filter(!is.na(income)) %>%
group_by(ageg,gender) %>%
summarise(mean= mean(income))
> income_by_ageg_gender
# A tibble: 6 x 3
# Groups: ageg [3]
ageg gender mean
<chr> <fct> <dbl>
1 middle 남자 355.
2 middle 여자 186.
3 old 남자 157.
4 old 여자 75.7
5 young 남자 184.
6 young 여자 168.
ggplot(data=income_by_ageg_gender, mapping = aes(x=ageg, y = mean, fill = gender)) + geom_col()
# ageg 변수를 질적 변수(순서형 변수, ordinal)로 만듦.
> welfare$ageg <- factor(welfare$ageg,
+ levels = c('young','middle','old'),
+ ordered = T )
> ggplot(data = welfare, mapping = aes(x=ageg))+geom_bar()
factor(변수,
levels = (1,2 ..),
labels = ( 문자형 라벨 ),
ordered = T or F )
ggplot(data=income_by_ageg_gender, mapping = aes(x=ageg, y = mean, fill = gender)) + geom_col(position = 'dodge')
position의 기본값 : 'stack'
연습문제
# welfare 데이터 프레임에 age_range 변수를 추가.
# age <20 : 'age10', age<30 : 'age20', age<40 : 'age30', ... age<80이면 age70, 그 이외에는 'age80'
welfare = welfare %>% mutate(age_range = ifelse(age<20,'age10',
ifelse(age<30,'age20',
ifelse(age<40,'age30',
ifelse(age<50,'age40',
ifelse(age<60,'age50',
ifelse(age<70,'age60',
ifelse(age<80,'age70','age80' ))))))))
#age_range별 인구수 - 테이블, 그래프
table(welfare$age_range)
age10 age20 age30 age40 age50 age60 age70 age80
3050 1414 1720 2295 2113 2050 2704 1318
ggplot(data=welfare, mapping = aes(x = age_range))+ geom_bar()
#age_range별 평균급여 - 테이블, 그래프
income_by_avgrange= welfare %>% group_by(age_range) %>%
filter(!is.na(income)) %>%
summarise(avg_income=mean(income))
ggplot(data= income_by_avgrange, mapping = aes(x = age_range, y = avg_income) )+ geom_col()
#age_range별 성별 평균 급여 - 테이블, 그래프
income_by_avgrange_gender = welfare %>% group_by(age_range, gender) %>%
filter(!is.na(income)) %>%
summarise(avg_income=mean(income))
ggplot(data=income_by_avgrange_gender,
mapping = aes(x = age_range, y = avg_income, fill = gender))+
geom_col(position = 'dodge')
#그래프 컬러 설정
ggplot(data=income_by_avgrange_gender,
mapping = aes(x = age_range, y = avg_income, fill = gender))+
geom_col(position = 'dodge') +
scale_fill_manual(values = c('skyblue','pink'))
# 직업별 급여의 차이
class(welfare$code_job)
summary(welfare$code_job)
# 엑셀 파일에 정리된 code_job, job을 새로운 데이터 프레임으로 생성
df_jobs <- read_excel('data/Koweps_Codebook.xlsx',sheet=2)
head(df_jobs)
# A tibble: 6 x 2
code_job job
<dbl> <chr>
1 111 의회의원 고위공무원 및 공공단체임원
2 112 기업고위임원
3 120 행정 및 경영지원 관리자
4 131 연구 교육 및 법률 관련 관리자
5 132 보험 및 금융 관리자
6 133 보건 및 사회복지 관련 관리자
#welfare, df_jobs 데이터 프레임을 join
welfare <- left_join(welfare, df_jobs, by = 'code_job')
welfare %>%
select(code_job,job) %>%
head(n=10)
code_job job
1 NA <NA>
2 NA <NA>
3 942 경비원 및 검표원
4 762 전기공
5 NA <NA>
6 530 방문 노점 및 통신 판매 관련 종사자
7 NA <NA>
8 NA <NA>
9 NA <NA>
10 NA <NA>
# 직업별 종사자수 출력
> welfare %>%
+ filter(!is.na(code_job)) %>%
+ group_by(job) %>%
+ summarise(count = n())
+ arrange(desc(count))
# A tibble: 145 x 2
job count
<chr> <int>
1 작물재배 종사자 1320
2 매장 판매 종사자 353
3 청소원 및 환경 미화원 325
4 제조관련 단순 종사원 289
5 경영관련 사무원 260
6 자동차 운전원 257
7 회계 및 경리 사무원 220
8 음식서비스 종사자 197
9 영업 종사자 192
10 주방장 및 조리사 154
# ... with 135 more rows
job_top10<-
welfare %>%
filter(!is.na(code_job)) %>%
group_by(job) %>%
summarise(count = n()) %>%
arrange(desc(count)) %>%
head(10)
job_top10
ggplot(job_top10,mapping = aes(x = reorder( job, count), y = count)) + geom_col()
+ coord_flip( ) : x, y축 변환
#가장 많이 종사하는 직종 10개 남/녀 구별해 출력
job_top10_gender<-
welfare %>%
filter(!is.na(code_job)) %>%
group_by(job,gender) %>%
summarise(count = n( )) %>%
arrange(desc(count)) %>%
head(10)
ggplot(job_top10_gender, mapping = aes(x = reorder ( job, count), y = count, fill = gender )) +
geom_col(position = 'dodge') + coord_flip() + xlab('직종') + ylab('인구수')
#데이터 가공을 해왔던 welfare 데이터 프레임을
#R에서 사용하는 데이터 파일 형식(rda)으로 저장
#save?
save(welfare, file = 'data/welfare.rda')
load('data/welfare.rda')