본문 바로가기

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

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

반응형

이번에는 종교가 있는 사람들이 종교가 없는 사람들보다 이혼을 덜 하는지 분석해 보겠습니다. 먼저 종교, 혼인 상태 두 변수를 검토하고 전처리한 후 변수 간 관계를 분석하겠습니다.

 

분석 절차

1. 변수 검토 및 전처리

-종교, 혼인상태

 

2. 변수 간 관계 분석

-종교 유무에 따른 이혼율 표 만들기, 그래프 만들기

 

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

1. 변수 검토하기

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

table(welfare$religion)

   1    2 
8047 8617 

 

2. 전처리

코드북의 종교 변수에 대한 정보를 바탕으로 전처리를 하겠습니다. 앞의 출력 결과를 보면 1과 2외에 다른 값이 존재하지 않습니다. 이상치를 결측 처리하는 작업은 생략하고 값의 의미를 이해할 수 있도록 종교 유무에 따라 문자를 부여하겠습니다. 출력 결과를 보면 종교가 있는 사람이 8047명, 종교가 없는 사람이 8617명이라는 것을 알 수 있습니다.

 

# 종교 유무 이름 부여
welfare$religion <- ifelse(welfare$religion == 1, "yes", "no")
table(welfare$religion)

  no  yes 
8617 8047 

qplot(welfare$religion)

 

혼인 상태 변수 검토 및 전처리하기

1. 변수 검토하기

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

table(welfare$marriage)

   0    1    2    3    4    5    6 
2861 8431 2117  712   84 2433   26 

 

2. 파생변수 만들기 - 이혼 여부

코드북의 혼인 상태 변수에 대한 정보를 보면 배우자가 있을 경우1, 이혼했을 경우 3으로 코딩되어 있습니다. 이 값을 이용해 이혼 여부를 나타내는 변수를 만들겠습니다.

 

# 이혼 여부 변수 만들기
welfare$group_marriage <- ifelse(welfare$marriage == 1, "marriage",
                                 ifelse(welfare$marriage == 3, "divorce", NA))

table(welfare$group_marriage)

 divorce marriage 
    712     8431 

table(is.na(welfare$group_marriage))

FALSE  TRUE 
 9143  7521 

qplot(welfare$group_marriage)

 

출력 결과를 보면 결혼 상태인 사람은 8431명, 이혼한 사람은 712명이라는 것을 알 수 있습니다. 둘 중 어디에도 속하지 않아 결측치로 분류된 경우가 7521명 있습니다. 이들은 이후 분석에서 제외하겠습니다.

 

종교 유무에 따른 이혼율 분석하기

1. 종교 유무에 따른 이혼율 표 만들기

종교 유무에 따른 이혼율 표를 만들겠습니다. 먼저 종교 유무 및 결혼상태별로 나눠 빈도를 구한 뒤 각 종교 유무 집단의 전체 빈도로 나눠 비율을 구합니다. 비율은 round()를 이용해 소수점 첫째 자리까지 표현되도록 합니다. 

 

religion_marriage <- welfare %>% 
  filter(!is.na(group_marriage)) %>%
  group_by(religion, group_marriage) %>% 
  summarise(n = n()) %>% 
  mutate(tot_group = sum(n)) %>% 
  mutate(pct = round(n/tot_group*100, 1))

religion_marriage
# A tibble: 4 x 5
# Groups:   religion [2]
  religion group_marriage     n top_group   pct
  <chr>    <chr>          <int>     <int> <dbl>
1 no       divorce          384      4602   8.3
2 no       marriage        4218      4602  91.7
3 yes      divorce          328      4541   7.2
4 yes      marriage        4213      4541  92.8

 

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

 

religion_marriage <- welfare %>% 
  filter(!is.na(group_marriage)) %>% 
  count(religion, group_marriage) %>% 
  group_by(religion) %>% 
  mutate(pct = round(n/sum(n)*100, 1))

religion_marriage
# A tibble: 4 x 4
# Groups:   religion [2]
  religion group_marriage     n   pct
  <chr>    <chr>          <int> <dbl>
1 no       divorce          384   8.3
2 no       marriage        4218  91.7
3 yes      divorce          328   7.2
4 yes      marriage        4213  92.8

 

2. 앞에서 만든 표에서 이혼에 해당하는 값만 추출해 이혼율 표를 만들겠습니다.

 

# 이혼 추출
divorce <- religion_marriage %>% 
  filter(group_marriage == "divorce") %>% 
  select(religion, pct)

divorce
# A tibble: 2 x 2
# Groups:   religion [2]
  religion   pct
  <chr>    <dbl>
1 no         8.3
2 yes        7.2

 

3. 그래프 만들기

이혼율 표를 이용해 그래프를 만들겠습니다.

 

ggplot(data = divorce, aes(x = religion, y = pct)) + geom_col()

 

이혼율은 종교가 있는 경우 7.2%, 종교가 없는 경우 8.3%로 나타났습니다. 따라서 종교가 있는 사람들이 이혼을 덜 한다고 볼 수 있습니다.

 

연령대 및 종교 유무에 따른 이혼율 분석하기

앞에서는 전체를 대상으로 종교 유무에 따른 이혼율을 분석했습니다. 이번에는 종교 유무에 따른 이혼율이 연령대별로 다른지 알아보겠습니다.

 

1. 연령대별 이혼율 표 만들기

우선 이혼율이 연령대에 따라 다른지 알아보겠습니다. 연령대 및 결혼 상태별 비율표를 만든 다음, 이혼한 경우를 추출해 이혼율 표를 만들겠습니다.

 

ageg_marriage <- welfare %>% 
  filter(!is.na(group_marriage)) %>% 
  group_by(ageg, group_marriage) %>% 
  summarise(n = n()) %>% 
  mutate(tot_group = sum(n)) %>% 
  mutate(pct = round(n/tot_group*100,1))

ageg_marriage
# A tibble: 6 x 5
# Groups:   ageg [3]
  ageg   group_marriage     n tot_group   pct
  <chr>  <chr>          <int>     <int> <dbl>
1 middle divorce          437      4918   8.9
2 middle marriage        4481      4918  91.1
3 old    divorce          273      4165   6.6
4 old    marriage        3892      4165  93.4
5 young  divorce            2        60   3.3
6 young  marriage          58        60  96.7

 

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

 

ageg_marriage <- welfare %>% 
  filter(!is.na(group_marriage)) %>% 
  count(ageg, group_marriage) %>% 
  group_by(ageg) %>% 
  mutate(pct = round(n/sum(n)*100, 1))

ageg_marriage
# A tibble: 6 x 4
# Groups:   ageg [3]
  ageg   group_marriage     n   pct
  <chr>  <chr>          <int> <dbl>
1 middle divorce          437   8.9
2 middle marriage        4481  91.1
3 old    divorce          273   6.6
4 old    marriage        3892  93.4
5 young  divorce            2   3.3
6 young  marriage          58  96.7

 

출력 결과를 보면 이혼율이 연령대별로 다르다는 것을 알 수 있습니다. 또한 초년의 경우 결혼하거나 이혼한 사례가 적다는 것을 알 수 있습니다. 초년은 사례가 부족해 다른 연령대와 비교하기에 적합하지 않으므로 이후 분석 잡업에서 제외하겠습니다.

 

2. 연령대별 이혼율 그래프 만들기

앞에서 만든 표에서 초년을 제외하고, 이혼을 나타내는 값만 추출해 그래프를 만들겠습니다. 출력된 그래프를 보면 노년보다 중년의 이혼율이 더 높다는 것을 알 수 있습니다.

 

# 초년 제외, 이혼 추출
ageg_divorce <- ageg_marriage %>% 
  filter(ageg !="young" & group_marriage == "divorce") %>% 
  select(ageg,pct)

ageg_divorce
# A tibble: 2 x 2
# Groups:   ageg [2]
  ageg     pct
  <chr>  <dbl>
1 middle   8.9
2 old      6.6

#그래프 만들기
ggplot(data = ageg_divorce, aes(x = ageg, y = pct)) + geom_col()

 

3. 연령대 및 종교 유무에 따른 이혼율 표 만들기

종교 유무에 따른 이혼율 차이가 연령대별로 다른지 알아보겠습니다. 먼저 연령대, 종교 유무, 결혼 상태별로 집단을 나눠 빈도를 구한 뒤, 각 집단 전체 빈도로 나눠 비율을 구합니다. 그런 다음, 이혼에 해당하는 값만 추출해 연령대 및 종교 유무별 이혼율 표를 만들겠습니다.

 

# 연령대, 종교 유무, 결혼 상태별 비율표 만들기
ageg_religion_marriage <- welfare %>% 
  filter(!is.na(group_marriage)& ageg != "young") %>% 
  group_by(ageg, religion, group_marriage) %>% 
  summarise(n = n()) %>% 
  mutate(tot_group = sum(n)) %>% 
  mutate(pct = round(n/tot_group*100,1))

ageg_religion_marriage
# A tibble: 8 x 6
# Groups:   ageg, religion [4]
  ageg   religion group_marriage     n tot_group   pct
  <chr>  <chr>    <chr>          <int>     <int> <dbl>
1 middle no       divorce          260      2681   9.7
2 middle no       marriage        2421      2681  90.3
3 middle yes      divorce          177      2237   7.9
4 middle yes      marriage        2060      2237  92.1
5 old    no       divorce          123      1884   6.5
6 old    no       marriage        1761      1884  93.5
7 old    yes      divorce          150      2281   6.6
8 old    yes      marriage        2131      2281  93.4

 

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

 

ageg_religion_marriage <- welfare %>% 
  filter(!is.na(group_marriage) & ageg != "young") %>% 
  count(ageg, religion, group_marriage) %>% 
  group_by(ageg, religion) %>% 
  mutate(pct = round(n/sum(n)*100, 1))

ageg_religion_marriage
# A tibble: 8 x 5
# Groups:   ageg, religion [4]
  ageg   religion group_marriage     n   pct
  <chr>  <chr>    <chr>          <int> <dbl>
1 middle no       divorce          260   9.7
2 middle no       marriage        2421  90.3
3 middle yes      divorce          177   7.9
4 middle yes      marriage        2060  92.1
5 old    no       divorce          123   6.5
6 old    no       marriage        1761  93.5
7 old    yes      divorce          150   6.6
8 old    yes      marriage        2131  93.4

 

# 연령대 및 종교 유무별 이혼율 표 만들기
df_divorce <- ageg_religion_marriage %>% 
  filter(group_marriage == "divorce") %>% 
  select(ageg, religion, pct)

df_divorce
# A tibble: 4 x 3
# Groups:   ageg, religion [4]
  ageg   religion   pct
  <chr>  <chr>    <dbl>
1 middle no         9.7
2 middle yes        7.9
3 old    no         6.5
4 old    yes        6.6

 

4. 연령대 및 종교 유무에 따른 이혼율 그래프 만들기

앞에서 만든 이혼율 표를 이용해 그래프를 만들겠습니다. 종교 유무에 따라 막대 색깔을 다르게 표현하기 위해 fill 파라미터에 religion을 지정합니다,. geom_col()의 position 파라미터를 "dodge"로 설정해 막대를 분리합니다.

 

ggplot(data = df_divorce, aes(x = ageg, y = pct, fill = religion)) +
  geom_col(position = "dodge")

 

출력된 표와 그래프를 보면 노년은 종교 유무에 따른 이혼율 차이가 0.1%로 작고, 오히려 종교가 있는 사람들의 이혼율이 더 높다는 것을 알 수 있습니다. 반면, 중년은 종교가 없는 사람들의 이혼율이 1.8% 더 높다는 것을 알 수 있습니다.

반응형