시도별 역대 국회의원

역대 시도별 국회의원

저자
소속

1 데이터셋

1.1 시도 정당

코드
library(tidyverse)
library(rvest)

## 2020년 제21대 ----------------------------------
election_21_url <- "https://ko.wikipedia.org/wiki/대한민국_제21대_국회의원_선거"

sido_21_2020 <- read_html(election_21_url) |> 
  html_elements("table") |> 
  html_table() %>%
  .[[15]]

sido_21_2020_tbl <- sido_21_2020 |> 
  filter(지역 != "전국") |> 
  select(-합계) |> 
  pivot_longer(-지역, names_to = "정당", values_to = "의석수") |> 
  mutate(의석수 = ifelse(is.na(의석수), 0, 의석수)) |> 
  mutate(선거 = "2020_21대")


## 2016년 제20대 ----------------------------------
election_20_url <- "https://ko.wikipedia.org/wiki/대한민국_제20대_국회의원_선거"

sido_20_2016 <- read_html(election_20_url) |> 
  html_elements("table") |> 
  html_table() %>%
  .[[15]]

sido_20_2016_tbl <- sido_20_2016 |> 
  filter(지역 != "전국") |> 
  select(-합계) |> 
  pivot_longer(-지역, names_to = "정당", values_to = "의석수") |> 
  mutate(의석수 = ifelse(is.na(의석수), 0, 의석수)) |> 
  mutate(선거 = "2016_20대")

## 2012년 제19대 ----------------------------------
election_19_url <- "https://ko.wikipedia.org/wiki/대한민국_제19대_국회의원_선거"

sido_19_2012 <- read_html(election_19_url) |> 
  html_elements("table") |> 
  html_table() %>%
  .[[13]]

sido_19_2012_tbl <- sido_19_2012 |> 
  set_names(c("지역", "새누리", "민주통합", "통합진보", "자유선진", 
"무소속", "합 계")) |> 
  select(-`합 계`) |> 
  pivot_longer(-지역, names_to = "정당", values_to = "의석수") |> 
  mutate(의석수 = ifelse(is.na(의석수), 0, 의석수)) |> 
  mutate(선거 = "2012_19대")

## 2008년 제18대 ----------------------------------
election_18_url <- "https://ko.wikipedia.org/wiki/대한민국_제18대_국회의원_선거"

sido_18_2008 <- read_html(election_18_url) |> 
  html_elements("table") |> 
  html_table() %>%
  .[[12]]

sido_18_2008_tbl <- sido_18_2008 |> 
  set_names(c("지역", "민주", "한나라", "자유선진", "민노", "창조한국", 
"친박연대", "무소속", "합 계")) |> 
  select(-`합 계`) |> 
  pivot_longer(-지역, names_to = "정당", values_to = "의석수") |> 
  mutate(의석수 = ifelse(is.na(의석수), 0, 의석수)) |> 
  mutate(선거 = "2008_18대")

## 2004년 제17대 ----------------------------------
election_17_url <- "https://ko.wikipedia.org/wiki/대한민국_제17대_국회의원_선거"

sido_17_2004 <- read_html(election_17_url) |> 
  html_elements("table") |> 
  html_table() %>%
  .[[9]]

sido_17_2004_tbl <- sido_17_2004 |> 
  select(-합계) |> 
  pivot_longer(-지역, names_to = "정당", values_to = "의석수") |> 
  mutate(의석수 = parse_number(의석수)) |> 
  mutate(의석수 = ifelse(is.na(의석수), 0, 의석수)) |> 
  mutate(선거 = "2004_17대")

## 2000년 제16대 ----------------------------------
election_16_url <- "https://ko.wikipedia.org/wiki/대한민국_제16대_국회의원_선거"

sido_16_2000 <- read_html(election_16_url) |> 
  html_elements("table") |> 
  html_table() %>%
  .[[8]]

sido_16_2000_tbl <- sido_16_2000 |> 
  select(-합계) |> 
  pivot_longer(-지역, names_to = "정당", values_to = "의석수") |> 
  mutate(의석수 = parse_number(의석수)) |> 
  mutate(의석수 = ifelse(is.na(의석수), 0, 의석수)) |> 
  mutate(선거 = "2000_16대")

## 1996년 제15대 ----------------------------------
election_15_url <- "https://ko.wikipedia.org/wiki/대한민국_제15대_국회의원_선거"

sido_15_1996 <- read_html(election_15_url) |> 
  html_elements("table") |> 
  html_table() %>%
  .[[12]]

sido_15_1996_tbl <- sido_15_1996 |> 
  janitor::clean_names(ascii = FALSE) |> 
  select(지역:무소속) |> 
  filter(!str_detect(지역, "^\\d|^지역|^자료|^합계")) |> 
  pivot_longer(-지역, names_to = "정당", values_to = "의석수") |> 
  mutate(의석수 = parse_number(의석수)) |> 
  mutate(의석수 = ifelse(is.na(의석수), 0, 의석수)) |> 
  mutate(선거 = "1996_15대")

## 1992년 제14대 ----------------------------------
election_14_url <- "https://ko.wikipedia.org/wiki/대한민국_제14대_국회의원_선거"

sido_14_1992 <- read_html(election_14_url) |> 
  html_elements("table") |> 
  html_table() %>%
  .[[8]]

sido_14_1992_tbl <- sido_14_1992 |> 
  janitor::clean_names(ascii = FALSE) |> 
  select(-합계) |> 
  filter(!str_detect(지역, "^합계")) |> 
  pivot_longer(-지역, names_to = "정당", values_to = "의석수") |> 
  mutate(의석수 = parse_number(의석수)) |> 
  mutate(의석수 = ifelse(is.na(의석수), 0, 의석수)) |> 
  mutate(선거 = "1992_14대")

## 1988년 제13대 ----------------------------------
election_13_url <- "https://ko.wikipedia.org/wiki/대한민국_제13대_국회의원_선거"

sido_13_1988 <- read_html(election_13_url) |> 
  html_elements("table") |> 
  html_table() %>%
  .[[7]]

sido_13_1988_tbl <- sido_13_1988 |> 
  janitor::clean_names(ascii = FALSE) |> 
  select(-합계) |> 
  filter(!str_detect(지역, "^합계")) |> 
  pivot_longer(-지역, names_to = "정당", values_to = "의석수") |> 
  mutate(의석수 = parse_number(의석수)) |> 
  mutate(의석수 = ifelse(is.na(의석수), 0, 의석수)) |> 
  mutate(선거 = "1988_13대")

## 역대선거 결합 ----------------------------------

sido_raw <- map_df(mget(ls(pattern = "*_tbl")), rbind)

sido_tbl <- sido_raw |> 
  separate(선거, into = c("연도", "선수"), sep = "_") 

sido_tbl |> 
  write_csv("data/역대_시도_정당별_의석수.csv")

1.2 정당

코드
party_url <- "https://ko.wikipedia.org/wiki/대한민국의_역대_정당"

party_list <- read_html(party_url) |> 
  html_elements("table") |> 
  html_table()

party_list[[6]] |> 
  janitor::clean_names() |> 
  filter(str_detect(x1, "\\d{4}")) |> 
  select(정부=x1, 여당=x4, 야당1=x6, 야당2=x8, 야당3=x10, 야당4=x12) |> 
  mutate(야당 = str_glue("{야당1}, {야당2}, {야당3}, {야당4}")) |> 
  select(정부, 여당, 야당)  |> 
  mutate(야당 = str_remove_all(야당, "NA,|NA") |> str_trim() |> str_remove(pattern=",$")) |> 
  gt::gt()

2 분석

코드
library(tidyverse)

sido_tbl <- read_csv("data/역대_시도_정당별_의석수.csv")

sido_tbl |> 
  mutate(수도권 = case_when(str_detect(지역, "서울|경기|인천") ~ "수도권",
                            TRUE ~ "비수도권")) |> 
  mutate(현정당 = case_when(정당 %in% c("민주정의당", "민주자유당", "신한국당",
                                        "한나라당", "새누리당", "자유한국당","새로운보수당",
                                        "미래를향한전진4.0", "미래통합당", "국민의힘") ~ "국민의힘",
                            정당 %in% c("평화민주당", "통일민주당", "민주당", "새정치국민회의",
                                        "새천년민주당","열린우리당", "대통합민주신당", 
                                        "민주통합당", "새정치민주연합", "더불어민주당") ~ "더불어민주당",
                            TRUE ~ "그외정당")) |> 
  group_by(연도, 선수, 수도권, 현정당) |> 
  summarise(의석수 = sum(의석수)) |> 
  pivot_wider(names_from = 수도권, values_from = 의석수) |> 
  mutate(총의석수 = 비수도권 + 수도권) |> 
  arrange(연도)