위키백과사전 대한민국_제21대_국회의원_선거 웹사이트에서 제21대 총선 결과 데이터를 가져온다.
library(tidyverse)
library(rvest)
library(gt)
wiki_url <- "https://ko.wikipedia.org/wiki/대한민국_제21대_국회의원_선거"
wiki_dat <- wiki_url %>%
read_html() %>%
html_nodes(xpath = '//*[@id="mw-content-text"]/div/table[9]') %>%
html_table(fill = TRUE) %>%
.[[1]]
wiki_df <- wiki_dat %>%
set_names(wiki_dat[1,]) %>%
janitor::clean_names() %>%
slice(3:n()) %>%
select(정당_2, 지역구_3, 비례대표_3) %>%
filter(정당_2 != "") %>%
mutate(정당 = case_when(row_number() == 1 ~ "더불어민주당",
row_number() == 2 ~ "미래한국당",
TRUE ~ 정당_2)) %>%
mutate(지역구_3 = if_else(지역구_3 == "-", 0, as.numeric(지역구_3)),
비례대표_3 = if_else(비례대표_3 == "-", 0, as.numeric(비례대표_3))) %>%
transmute(정당, 의원수 = 지역구_3 + 비례대표_3) %>%
filter(의원수 >0, 정당 != "총계")
wiki_df %>%
mutate(비율 = 의원수/ sum(의원수)) %>%
gt() %>%
fmt_percent(columns = "비율", decimals = 1)
정당 | 의원수 | 비율 |
---|---|---|
더불어민주당 | 180 | 60.0% |
미래한국당 | 103 | 34.3% |
정의당 | 6 | 2.0% |
국민의당 | 3 | 1.0% |
열린민주당 | 3 | 1.0% |
무소속 | 5 | 1.7% |
ggparliament
팩키지를 파악해서 자료구조에 맞춰 채워넣고 시각화한다.
library(ggparliament)
library(extrafont)
loadfonts()
kor_house <- tribble(~"index", ~"key", ~"value",
1, "year", "2020",
2, "year", "2020",
3, "year", "2020",
4, "year", "2020",
5, "year", "2020",
6, "year", "2020",
1, "country", "Korea",
2, "country", "Korea",
3, "country", "Korea",
4, "country", "Korea",
5, "country", "Korea",
6, "country", "Korea",
1, "party_long", "더불어민주당",
2, "party_long", "미래통합당",
3, "party_long", "정의당",
4, "party_long", "국민의당",
5, "party_long", "연린민주",
6, "party_long", "무소속",
1, "party_short", "더민당",
2, "party_short", "미통당",
3, "party_short", "정의당",
4, "party_short", "국민의당",
5, "party_short", "열린민주",
6, "party_short", "무소속",
1, "seats", "180",
2, "seats", "103",
3, "seats", "6",
4, "seats", "3",
5, "seats", "3",
6, "seats", "5",
1, "government", "1",
2, "government", "0",
3, "government", "0",
4, "government", "0",
5, "government", "0",
6, "government", "0",
1, "colour", "#184EA1",
2, "colour", "#EF426F",
3, "colour", "#FBCA08",
4, "colour", "#EA5504",
5, "colour", "#143E9B",
6, "colour", "#828282"
) %>%
spread(key, value, convert = TRUE)
kor_house <- kor_house %>%
mutate(index = case_when(index == 3 ~ 1,
index == 1 ~ 2,
index == 5 ~ 3,
index == 6 ~ 4,
index == 4 ~ 5,
index == 2 ~6)) %>%
arrange(index)
# 정당 진보-보수 스펙트럼에 따른 재배열
kor_house <- parliament_data(election_data = kor_house,
type = "semicircle",
parl_rows = 9,
party_seats = kor_house$seats)
ggplot(kor_house, aes(x, y, colour = party_short)) +
geom_parliament_seats() +
#highlight the party in control of the House with a black line
# geom_highlight_government(government == 1) +
#draw majority threshold
draw_majoritythreshold(n = 150, label = FALSE, type = 'semicircle')+
#set theme_ggparliament
theme_void(base_family="AppleGothic") +
#other aesthetics
labs(colour = NULL,
title = "제21대 대한민국 국회",
subtitle = "집권당은 굵은 윤곽선으로 표기") +
scale_colour_manual(values = kor_house$colour,
limits = kor_house$party_short)