https://ko.wikipedia.org/wiki/대한민국_제20대_대통령_선거_더불어민주당_후보_경선 정보를 바탕으로 민주당 본경선 6명에 대한 기호를 새로 생성할 수 있다.
library(tidyverse)
library(rvest)
<- read_html("https://ko.wikipedia.org/wiki/대한민국_제20대_대통령_선거_더불어민주당_후보_경선") %>%
candidate_raw html_node(xpath = '//*[@id="mw-content-text"]/div[1]/table[2]') %>%
html_table()
%>%
candidate_raw ::clean_names(ascii = FALSE) %>%
janitorslice(2:n()) %>%
set_names(c("기호", "후보", "생년", "경력", "비고")) %>%
filter(str_detect(비고, "진출")) %>%
mutate(기호 = 1:n())
기호 후보 생년 경력
1 1 추미애 1958년 제2대 더불어민주당 대표제67대 법무부 장관
2 2 이재명 1964년 제19·20대 성남시장제35대 경기도지사
3 3 정세균 1950년 대한민국 제20대 국회 전반기 국회의장제46대 국무총리
4 4 이낙연 1952년 제45대 국무총리제4대 더불어민주당 대표
5 5 박용진 1971년 더불어민주당 대변인제20·21대 국회의원
6 6 김두관 1958년 제34대 경상남도지사제5대 행정자치부 장관
비고
1 본경선 진출
2 본경선 진출
3 본경선 진출
4 본경선 진출
5 본경선 진출
6 본경선 진출
<- read_html("https://ko.wikipedia.org/wiki/추미애") %>%
추미애 html_node(xpath = '//*[@id="mw-content-text"]/div[1]/table[4]') %>%
html_table(fill = TRUE)
<- 추미애 %>%
추미애 ::clean_names(ascii = FALSE) %>%
janitorfilter(실시년도 !="") %>%
select(실시년도, 선거, 대수, 직책, 선거구, 정당, 득표수, 득표율, 비고, na_2) %>%
rename(순위 = 비고, 비고 = na_2)
%>%
추미애 ::datatable() DT
<- read_html("https://ko.wikipedia.org/wiki/이재명") %>%
이재명 html_node(xpath = '//*[@id="mw-content-text"]/div[1]/table[2]') %>%
html_table(fill = TRUE)
<- 이재명 %>%
이재명 ::clean_names(ascii = FALSE) %>%
janitorfilter(실시년도 !="") %>%
select(실시년도, 선거, 대수, 직책, 선거구, 정당, 득표수, 득표율, 비고, na_2) %>%
rename(순위 = 비고, 비고 = na_2)
%>%
이재명 ::datatable() DT
<- read_html("https://ko.wikipedia.org/wiki/정세균") %>%
정세균 html_node(xpath = '//*[@id="mw-content-text"]/div[1]/table[2]') %>%
html_table(fill = TRUE)
<- 정세균 %>%
정세균 ::clean_names(ascii = FALSE) %>%
janitorfilter(실시년도 !="") %>%
select(실시년도, 선거, 대수, 직책, 선거구, 정당, 득표수, 득표율, 비고, na_2) %>%
rename(순위 = 비고, 비고 = na_2)
%>%
정세균 ::datatable() DT
<- read_html("https://ko.wikipedia.org/wiki/이낙연") %>%
이낙연 html_node(xpath = '//*[@id="mw-content-text"]/div[1]/table[3]') %>%
html_table(fill = TRUE)
<- 이낙연 %>%
이낙연 ::clean_names(ascii = FALSE) %>%
janitorfilter(실시년도 !="") %>%
select(실시년도, 선거, 대수, 직책, 선거구, 정당, 득표수, 득표율, 비고, na_2) %>%
rename(순위 = 비고, 비고 = na_2)
%>%
이낙연 ::datatable() DT
<- read_html("https://ko.wikipedia.org/wiki/박용진_(1971년)") %>%
박용진 html_node(xpath = '//*[@id="mw-content-text"]/div[1]/table[3]') %>%
html_table(fill = TRUE)
<- 박용진 %>%
박용진 ::clean_names(ascii = FALSE) %>%
janitorfilter(실시년도 !="") %>%
select(실시년도, 선거, 대수, 직책, 선거구, 정당, 득표수, 득표율, 비고, na_2) %>%
rename(순위 = 비고, 비고 = na_2)
%>%
박용진 ::datatable() DT
<- read_html("https://ko.wikipedia.org/wiki/김두관") %>%
김두관 html_node(xpath = '//*[@id="mw-content-text"]/div[1]/table[2]') %>%
html_table(fill = TRUE)
<- 김두관 %>%
김두관 ::clean_names(ascii = FALSE) %>%
janitorfilter(실시년도 !="") %>%
select(실시년도, 선거, 대수, 직책, 선거구, 정당, 득표수, 득표율, 비고, na_2) %>%
rename(순위 = 비고, 비고 = na_2)
%>%
김두관 ::datatable() DT
KOSIS https://kosis.kr/statHtml/statHtml.do?orgId=101&tblId=DT_1B04006&conn_path=I2 행정구역별 주민등록인구를 통해 현재 출생연도별 생존한 인구를 추산한다.
library(extrafont)
loadfonts()
# population_raw <- read_html("https://ko.wikipedia.org/wiki/대한민국의_인구") %>%
# html_node(xpath ='//*[@id="mw-content-text"]/div[1]/table[2]') %>%
# html_table()
#
# population_tbl <- population_raw %>%
# janitor::clean_names(ascii = FALSE) %>%
# as_tibble() %>%
# select(연도 = 연도_년, 출생자 = 출생자수_명) %>%
# mutate(출생자수 = parse_number(출생자))
<- readxl::read_excel("data/행정구역_시군구_별_1세별_주민등록인구_20210718223814.xlsx")
population_raw
<- population_raw %>%
population_tbl slice(3:n()) %>%
::clean_names(ascii = FALSE) %>%
janitorset_names(c("행정구역", "연령", "인구수", "남", "녀")) %>%
select(-행정구역) %>%
mutate(연령 = parse_number(연령)) %>%
mutate(출생년도 = 2020 - 연령,
= parse_number(인구수)) %>%
인구수 select(출생년도, 인구수)
<- population_tbl %>%
population_bod_g ggplot(aes(x = 출생년도, y=인구수)) +
geom_col(fill = "darkgray") +
theme_bw(base_family = "NanumGothic") +
scale_y_continuous(label = scales::comma, limits = c(0, 1200000)) +
labs(x = "",
title = "연도별 출생자수와 민주당 경선 후보 출생년도") +
geom_segment(aes(x = 1958, yend = 950000, y = 0, xend = 1958, colour = "segment"), color = "blue") +
annotate("text", x = 1958, y = 1050000, label = "추미애", family = "NanumGothic") +
geom_segment(aes(x = 1964, yend = 1100000, y = 0, xend = 1964, colour = "segment"), color = "blue") +
annotate("text", x = 1964, y = 1150000, label = "이재명", family = "NanumGothic") +
geom_segment(aes(x = 1950, yend = 500000, y = 0, xend = 1950, colour = "segment"), color = "blue") +
annotate("text", x = 1948, y = 530000, label = "정세균", family = "NanumGothic") +
geom_segment(aes(x = 1952, yend = 600000, y = 0, xend = 1952, colour = "segment"), color = "blue") +
annotate("text", x = 1951, y = 630000, label = "이낙연", family = "NanumGothic") +
geom_segment(aes(x = 1971, yend = 950000, y = 0, xend = 1971, colour = "segment"), color = "blue") +
annotate("text", x = 1971, y = 970000, label = "박용진", family = "NanumGothic") +
geom_segment(aes(x = 1958, yend = 950000, y = 0, xend = 1958, colour = "segment"), color = "blue") +
annotate("text", x = 1958, y = 1000000, label = "김두관", family = "NanumGothic")
population_bod_g
# ggplot2::ggsave("fig/population_bod.png")
선거에서 얼마나 이기고 졌는지 역경지수를 만들어보자.
library(reactable)
<-
election_tbl bind_rows(추미애 %>% mutate(후보 = "추미애"),
%>% mutate(후보 = "이재명")) %>%
이재명 bind_rows(정세균 %>% mutate(후보 = "정세균")) %>%
bind_rows(이낙연 %>% mutate(후보 = "이낙연")) %>%
bind_rows(박용진 %>% mutate(후보 = "박용진")) %>%
bind_rows(김두관 %>% mutate(후보 = "김두관")) %>%
as_tibble()
%>%
election_tbl mutate(당락 = if_else(str_detect(순위, "1\\s?위"), "당선", "낙선")) %>%
group_by(후보) %>%
count(당락) %>%
ungroup() %>%
pivot_wider(names_from = 당락, values_from = n, values_fill = 0) %>%
mutate(역경지수 = 낙선 / (낙선 + 당선) ) %>%
arrange(-역경지수) %>%
::reactable( columns = list(
reactable= colDef(format = colFormat(percent = TRUE, digits = 1))
역경지수 ))
데이터 과학자 이광춘 저작
kwangchun.lee.7@gmail.com