비례국회의원

비례국회의원에 대해서 살펴보자.

저자
소속

1 데이터셋

코드
library(tidyverse)
library(rvest)
library(httr)
library(sf)
library(geogrid)

mp_raw <- read_rds("data/total_elected_tbl.rds")

prop_tbl <- mp_raw |> 
  filter(sgTypecode == "7") |> 
  select(result) |> 
  unnest(result) |> 
  mutate(정당 = case_when(jdName %in% c("한나라당", "새누리당", "자유한국당",
                                        "미래통합당", "국민의힘", "미래한국당") ~ "국민의힘",
                            jdName %in% c("새정치국민회의", "열린우리당", "통합민주당",
                                        "민주통합당", "더불어민주당", "더불어시민당") ~ "민주당",
                            TRUE ~ "그외정당")) |> 
  
  count(sgId, 정당)

2 분석

2.1

코드
library(gt)

prop_tbl |> 
  pivot_wider(names_from = 정당, values_from = n) |> 
  mutate(소계 = 국민의힘 + 그외정당 + 민주당) |> 
  select(선거=sgId, 민주당, 국민의힘, 그외정당, 소계) |> 
  gt() |> 
  grand_summary_rows(
    columns = c(민주당, 국민의힘, 그외정당),
    fns =  list(
      최소 ~ min(.),
      최대 ~ max(.),
      평균 ~ mean(.)
    ),
    fmt = ~ fmt_integer(.),
    side = "top"
  ) |> 
  cols_align(columns = everything(), "center")
선거 민주당 국민의힘 그외정당 소계
최소 13 17 8
최대 23 25 17
평균 18 21 13
20040415 23 21 12 56
20080409 15 22 17 54
20120411 21 25 8 54
20160413 13 17 17 47
20200415 17 19 11 47

2.2 그래프

코드
percent_tbl <- prop_tbl |> 
  group_by(sgId) |> 
  summarise(비율 = n / sum(n)) |> 
  ungroup()

prop_tbl |> 
  bind_cols(percent_tbl |> select(비율)) |> 
  ggplot(aes(x = sgId, y = 비율, color = 정당, group = 정당)) +
    geom_line() +
    geom_point() +
    scale_color_manual(values = c("국민의힘" = "red",
                                  "민주당"   = "blue",
                                  "그외정당" = "gray30")) +
    scale_y_continuous(labels = scales::percent) +
    theme_minimal() +
    theme(legend.position = "top")