결혼 출산에 대한 인식 변화: 누적막대그래프로 데이터 분석하기

“결혼하면 자녀를 가져야 한다고 생각하시나요?”
이 질문, 예전에는 아마 대부분이 “당연히 그렇다”고 대답했겠죠. 하지만 이제는 조금 다릅니다. 결혼 출산은 더 이상 당연한 것이 아니라 선택의 영역이 되었고, 이런 변화는 데이터로도 확인할 수 있습니다.

이번 글에서는 결혼 출산에 대한 인식 변화 데이터를 바탕으로 R 코딩을 활용해 누적막대그래프를 만들어 보고, 이 변화가 무엇을 의미하는지 살펴보려 합니다. 데이터를 통해 우리 사회의 흐름을 이해하고, 미래를 준비하는 데 필요한 통찰을 함께 얻어봅시다.

결혼과 출산에 대한 설문 조사 데이터

다음은 통계청 사회조사에서 제공한, 13세 이상 인구를 대상으로 “결혼하면 자녀를 가져야 한다”는 질문에 대한 2개 연도별 응답 데이터입니다. 단위는 %입니다.

연도전적으로 동의약간 동의약간 반대전적으로 반대
201825.444.121.98.6
202025.542.622.19.8
202221.643.823.910.8
202423.444.922.79.0

결혼 출산 인식 변화의 의미

결혼 출산 인식 변화 요약 그림
( 결혼 출산 인식 변화 요약 그림 )

이 데이터를 살펴보면 몇 가지 중요한 흐름을 발견할 수 있습니다.

  1. 전적으로 동의 비율 감소
    • 2018년 25.4%에서 2024년 23.4%로 감소.
    • 이는 결혼과 출산에 대한 전통적인 가치관이 점차 약화되고 있음을 보여줍니다.
  2. 반대 응답 증가
    • 약간 반대와 전적으로 반대의 비율이 모두 증가하고 있습니다.
    • 특히 전적으로 반대는 2018년 8.6%에서 2024년 9.0%로 소폭 상승했지만, 꾸준히 증가하는 추세입니다.
  3. 약간 동의의 유지
    • 약간 동의 비율은 2018년 44.1%에서 2024년 44.9%로 거의 변하지 않았습니다.
    • 이는 여전히 다수의 사람들이 “자녀를 갖는 것이 필요하다”고 느끼지만, 강한 확신을 가지지 않는다는 것을 보여줍니다.

R 코딩으로 누적막대그래프 만들기

이제 위 데이터를 활용해 R로 누적막대그래프를 만들어 볼게요! 이 그래프를 통해 이런 변화가 얼마나 뚜렷한지 한눈에 확인할 수 있습니다.

# Load required libraries
library(ggplot2)
library(dplyr)

# Create the dataset
data <- data.frame(
  Year = c(2018, 2020, 2022, 2024),
  Strongly_Agree = c(25.4, 25.5, 21.6, 23.4),
  Somewhat_Agree = c(44.1, 42.6, 43.8, 44.9),
  Somewhat_Disagree = c(21.9, 22.1, 23.9, 22.7),
  Strongly_Disagree = c(8.6, 9.8, 10.8, 9.0)
)

# Transform data to long format
data_long <- data %>%
  tidyr::pivot_longer(
    cols = starts_with("Strongly_") | starts_with("Somewhat_"),
    names_to = "Response",
    values_to = "Percentage"
  )

# Set response order
data_long$Response <- factor(
  data_long$Response,
  levels = c("Strongly_Agree", "Somewhat_Agree", "Somewhat_Disagree", "Strongly_Disagree")
)

# Create stacked bar graph
ggplot(data_long, aes(x = factor(Year), y = Percentage, fill = Response)) +
  geom_bar(stat = "identity", position = position_stack(reverse = TRUE), color = "black") +
  geom_text(aes(label = round(Percentage, 1)), 
            position = position_stack(vjust = 0.5, reverse = TRUE), size = 3.5, color = "white") +
  scale_fill_manual(
    values = c(
      "Strongly_Agree" = "#74C476", 
      "Somewhat_Agree" = "#31A354", 
      "Somewhat_Disagree" = "#FD8D3C", 
      "Strongly_Disagree" = "#E31A1C"
    ),
    labels = c("Strongly Agree", "Somewhat Agree", "Somewhat Disagree", "Strongly Disagree")
  ) +
  labs(
    title = "Changes in Opinions About Having Children After Marriage",
    x = "Year",
    y = "Percentage (%)",
    fill = "Response"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
    axis.title = element_text(size = 12),
    axis.text = element_text(size = 10),
    legend.title = element_text(size = 12),
    legend.text = element_text(size = 10)
  ) +
  coord_flip()
결혼 출산 인식 변화 - R 시각화 누적막대그래프
( 결혼 출산 인식 변화 – R 시각화 누적막대그래프)

마무리하며

데이터는 우리가 변화의 흐름을 이해하고, 더 나은 결정을 내리는 데 큰 힘을 줍니다. 이번에 살펴본 결혼 출산에 대한 인식 변화는 단순한 숫자 이상으로, 우리 사회가 어떻게 변해가고 있는지를 명확히 보여줍니다. 특히, 결혼과 출산을 바라보는 관점이 과거와는 많이 달라지고 있다는 점에서, 정책 입안자와 개인 모두가 이 변화를 깊이 이해할 필요가 있어요.

누적막대그래프는 이렇게 복잡한 데이터를 시각적으로 쉽게 풀어주는 훌륭한 도구입니다. 이번 글에서 소개한 R 코드를 활용하면, 여러분도 자신의 데이터를 시각화하고 분석할 수 있습니다. 데이터를 통해 문제의 본질을 이해하고, 나아가 새로운 해결책을 모색할 수 있을 거예요.

결혼 출산은 각 개인의 선택이지만, 이 선택이 지속 가능한 사회로 나아가는 데 중요한 역할을 한다는 점은 분명합니다. 이 데이터를 통해 여러분이 어떤 인사이트를 얻었든, 그것이 더 나은 미래를 그리는 데 작은 씨앗이 되길 바랍니다.

참고로, 결혼 이후 출산에 대한 인식변화가 과연 합계출산율에서는 어떻게 나타났을까요? 합계출산율 뜻과 계산법: R로 트렌디한 시각화까지 포스트를 통해서 확인해보세요.

#코드 세부해설

1. 라이브러리 로드

library(ggplot2)
library(dplyr)
  • ggplot2: 데이터 시각화를 위한 강력한 그래픽 라이브러리
  • dplyr: 데이터 조작을 위한 효율적인 도구 제공

2. 데이터셋 생성

data <- data.frame(
  Year = c(2018, 2020, 2022, 2024),
  Strongly_Agree = c(25.4, 25.5, 21.6, 23.4),
  Somewhat_Agree = c(44.1, 42.6, 43.8, 44.9),
  Somewhat_Disagree = c(21.9, 22.1, 23.9, 22.7),
  Strongly_Disagree = c(8.6, 9.8, 10.8, 9.0)
)
  • 연도별 응답 비율을 포함하는 데이터프레임 생성
  • 각 열은 연도와 응답 유형별 비율을 나타냄

3. 데이터 변환

data_long <- data %>%
  tidyr::pivot_longer(
    cols = starts_with("Strongly_") | starts_with("Somewhat_"),
    names_to = "Response",
    values_to = "Percentage"
  )
  • tidyr::pivot_longer() 함수를 사용하여 데이터를 long 형식으로 변환
  • ‘Strongly_’ 또는 ‘Somewhat_’로 시작하는 열들을 ‘Response’ 열로 변환
  • 해당 값들은 ‘Percentage’ 열로 이동

4. 응답 순서 설정

data_long$Response <- factor(
  data_long$Response,
  levels = c("Strongly_Agree", "Somewhat_Agree", "Somewhat_Disagree", "Strongly_Disagree")
)
  • Response 열을 factor로 변환하여 특정 순서로 정렬
  • 이는 그래프에서 막대의 순서를 결정함

5. 그래프 생성

ggplot(data_long, aes(x = factor(Year), y = Percentage, fill = Response)) +
  geom_bar(stat = "identity", position = position_stack(reverse = TRUE), color = "black") +
  geom_text(aes(label = round(Percentage, 1)), 
            position = position_stack(vjust = 0.5, reverse = TRUE), size = 3.5, color = "white") +
  • ggplot()으로 기본 그래프 객체 생성
  • geom_bar()로 막대 그래프 생성, position_stack()으로 막대를 쌓음
  • geom_text()로 각 막대 안에 퍼센티지 값 표시

6. 색상 및 라벨 설정

  scale_fill_manual(
    values = c(
      "Strongly_Agree" = "#74C476", 
      "Somewhat_Agree" = "#31A354", 
      "Somewhat_Disagree" = "#FD8D3C", 
      "Strongly_Disagree" = "#E31A1C"
    ),
    labels = c("Strongly Agree", "Somewhat Agree", "Somewhat Disagree", "Strongly Disagree")
  ) +
  • scale_fill_manual()로 각 응답 유형에 대한 색상 지정
  • labels 파라미터로 범례의 라벨 텍스트 설정

7. 그래프 제목 및 축 라벨 설정

  labs(
    title = "Changes in Opinions About Having Children After Marriage",
    x = "Year",
    y = "Percentage (%)",
    fill = "Response"
  ) +
  • labs() 함수로 그래프 제목, x축 라벨, y축 라벨, 범례 제목 설정

8. 테마 및 스타일 설정

  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold"),
    axis.title = element_text(size = 12),
    axis.text = element_text(size = 10),
    legend.title = element_text(size = 12),
    legend.text = element_text(size = 10)
  ) +
  • theme_minimal()로 기본 미니멀 테마 적용
  • theme() 함수로 제목, 축 라벨, 범례 등의 세부 스타일 조정

9. 축 뒤집기

  coord_flip()
  • coord_flip()으로 x축과 y축을 뒤집어 수평 막대 그래프로 변환

유사한 게시물