본문 바로가기

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

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

반응형

고령 사회가 되면서 노인들을 위한 시설을 마련하는 일이 점점 더 중요해지고 있습니다. 노인들을 위한 시설을 마련하려면 우선 어느 지역에 노인들이 많이 살고 있는지 알아야 합니다. 지역별 연령대 비율을 분석해 노년층이 많은 지역이 어디인지 알아보겠습니다.

 

분석절차

1. 변수 검토 및 전처리

- 지역, 연령대

 

2. 변수 간 관계 분석

- 지역별 연령대 비율표 만들기, 그래프 만들기

 

지역 변수 검토 및 전처리하기

1. 변수 검토하기

 

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

table(welfare$code_region)

   1    2    3    4    5    6    7 
2486 3711 2785 2036 1467 1257 2922 

 

2. 전처리

code_region 변수의 값은 7개 권역을 의미하는 지역 코드입니다. 먼저 코드북의 내용을 참조해 지역 코드 목록을 만들겠습니다. 그런 다음 지역 코드 목록과 welfare에 동시에 들어 있는 code_region 변수를 이용해 welfare에 지역명 변수를 추가하겠습니다.

 

# 지역 코드 목록 만들기
list_region <- data.frame(code_region = c(1:7),
                          region = c("서울",
                                     "수도권(인천/경기",
                                     "부산/경남/울산",
                                     "대구/경북",
                                     "대전/충남",
                                     "강원/충북",
                                     "광주/전남/전북/제주도"))

list_region
  code_region                region
1           1                  서울
2           2      수도권(인천/경기
3           3        부산/경남/울산
4           4             대구/경북
5           5             대전/충남
6           6             강원/충북
7           7 광주/전남/전북/제주도
# 지역명 변수 추가
welfare <- left_join(welfare, list_region, id = "code_region")
Joining, by = "code_region"

welfare %>% 
  select(code_region, region) %>% 
  head

code_region region
1           1   서울
2           1   서울
3           1   서울
4           1   서울
5           1   서울
6           1   서울

 

지역별 연령대 비율 분석하기

연령대 변수 전처리는 앞에서 완료했으니 생략하고 변수 간 관계를 분석하겠습니다.

 

1. 지역별 연령대 비율표 만들기

지역별 연령대 비율표를 만들겠습니다. 지역 및 연령대별로 나눠 빈도를 구한 뒤, 각 지역의 전체 빈도로 나눠 비율을 구합니다.

 

region_ageg <- welfare %>% 
  group_by(region, ageg) %>% 
  summarise(n = n()) %>% 
  mutate(tot_group = sum(n)) %>% 
  mutate(pct = round(n/tot_group*100, 2))

head(region_ageg)
# A tibble: 6 x 5
# Groups:   region [2]
  region                ageg       n tot_group   pct
  <fct>                 <chr>  <int>     <int> <dbl>
1 강원/충북             middle   417      1257  33.2
2 강원/충북             old      555      1257  44.2
3 강원/충북             young    285      1257  22.7
4 광주/전남/전북/제주도 middle   947      2922  32.4
5 광주/전남/전북/제주도 old     1233      2922  42.2
6 광주/전남/전북/제주도 young    742      2922  25.4

 

count()를 이용하고, 비율을 구하는 mutate()를 하나로 합쳐서 아래와 같은 방식으로도 비율표를 만들 수 있습니다.

 

region_ageg <- welfare %>% 
  count(region, ageg) %>% 
  group_by(region) %>% 
  mutate(pct = round(n/sum(n)*100, 2))

head(region_ageg)
# A tibble: 6 x 4
# Groups:   region [2]
  region                ageg       n   pct
  <fct>                 <chr>  <int> <dbl>
1 강원/충북             middle   417  33.2
2 강원/충북             old      555  44.2
3 강원/충북             young    285  22.7
4 광주/전남/전북/제주도 middle   947  32.4
5 광주/전남/전북/제주도 old     1233  42.2
6 광주/전남/전북/제주도 young    742  25.4

 

2. 그래프 만들기

앞에서 만든 표를 이용해 그래프를 만들겠습니다. 연령대 비율 막대를 서로 다른 색으로 표현하도록 aes의 fill 파라미터에 ageg를 지정합니다. 지역별로 비교하기 쉽도록 coord_flip()을 추가해서 그래프를 오른쪽으로 회전합니다.

 

ggplot(data = region_ageg, aes(x = region, y = pct, fill = ageg)) +
  geom_col() +
  coord_flip()

 

3. 노년층 비율 높은 순으로 막대 정렬하기

앞에서 만든 그래프는 막대가 밑에서부터 지역명 가나다 순으로 정렬되어 있습니다. 막대를 노년층 비율이 높은 순으로 정렬하겠습니다. 먼저 노년층 비율 순으로 지역명이 정렬된 변수를 만들어야 합니다. 앞에서 만든 표를 노년층 비율 순으로 정렬한 후 지역명만 추출해 변수를 만듭니다.

 

# 노년층 비율 내림차순 정렬
list_order_old <- region_ageg %>% 
  filter(ageg == "old") %>% 
  arrange(pct)

list_order_old
# A tibble: 7 x 4
# Groups:   region [7]
  region                ageg      n   pct
  <fct>                 <chr> <int> <dbl>
1 수도권(인천/경기      old    1109  29.9
2 서울                  old     805  32.4
3 대전/충남             old     527  35.9
4 부산/경남/울산        old    1124  40.4
5 광주/전남/전북/제주도 old    1233  42.2
6 강원/충북             old     555  44.2
7 대구/경북             old     928  45.6
# 지역명 순서 변수 만들기
order <- list_order_old$region

order
[1] 수도권(인천/경기      서울                  대전/충남            
[4] 부산/경남/울산        광주/전남/전북/제주도 강원/충북            
[7] 대구/경북            
7 Levels: 강원/충북 광주/전남/전북/제주도 대구/경북 ... 수도권(인천/경기

 

지역명이 노년층 비율 순으로 정렬된 order 변수를 활용해 그래프를 만들겠습니다. 앞에서 사용한 그래프 생성 코드에 scale_x_discrete()를 추가하고 limits 파라미터에 order 변수를 지정하면 됩니다. 출력된 그래프를 보면 막대가 노년층 비율이 높은 순으로 정렬된 것을 볼 수 있습니다.

 

ggplot(data = region_ageg, aes(x = region, y = pct, fill = ageg)) +
  geom_col() +
  coord_flip()+
  scale_x_discrete(limits = order)

 

4. 연령대 순으로 막대 색깔 나열하기

앞에서 만든 그래프는 막대 색깔이 young(초년), old(노년), middle(중년) 순으로 나열되어 있습니다. 이를 초년, 중년, 노년의 순으로 나열되도록 설정하겠습니다. 막대 색깔을 순서대로 나열하려면 fill 파라미터에 지정할 변수의 범주(levels) 순서를 지정하면 됩니다. 현재 ageg 변수는 character 타입이기 때문에 levels가 없습니다.

 

class(region_ageg$ageg)
[1] "character"

levels(region_ageg$ageg)
NULL

 

factor()를 이용해 ageg 변수를 factor 타입으로 변환하고, level 파라미터를 이용해 순서를 지정합니다.

 

region_ageg$ageg <- factor(region_ageg$ageg,
                           level = c("old", "middle", "young"))

class(region_ageg$ageg)
[1] "factor"

levels(region_ageg$ageg)
[1] "old"    "middle" "young" 

 

그래프 생성 코드를 다시 실행하면 막대 색깔이 연령대 순으로 나열되어 지역별 연령대 비율 구성을 쉽게 파악할 수 있습니다. 출력된 그래프를 보면 노년층 비율이 대구/경북, 강원/충북, 광주/전남/제주도 순으로 높다는 것을 알 수 있습니다.

 

ggplot(data = region_ageg, aes(x = region, y = pct, fill = ageg)) +
  geom_col() +
  coord_flip()+
  scale_x_discrete(limits = order)
반응형