위키백과 대한민국 정당 지지율 웹사이트에서 대선 직전 정당 지지율 데이터를 가져온다.
19대 대통령 대선일은 2017-05-09 일 이전 조사한 정당지지율 데이터를 가져온다.
library(tidyverse)
library(rvest)
# Sys.setlocale("LC_ALL", "C")
#
# party_html <- read_html("https://ko.wikipedia.org/wiki/대한민국의_정당_지지율")
#
# party_data <- party_html %>%
# html_node(xpath = '//*[@id="mw-content-text"]/div[1]/div[9]/div[2]/table') %>%
# html_table(fill = TRUE)
#
# Sys.setlocale("LC_ALL", "Korean")
#
# party_data %>%
# write_rds("data/party_data.rds")
read_rds("data/party_data.rds")
party_data <-
19_tbl <- party_data %>%
party_ janitor::clean_names(ascii = FALSE) %>%
filter(str_detect(조사_기간, "2017년 5월 2주")) %>%
select(조사_기간, 민주당=더불어민주당, 새누리당, 국민의당, 바른정당=정의당, 정의당=na)
19_tbl party_
조사_기간 민주당 새누리당 국민의당 바른정당 정의당
1 2017년 5월 2주 35.0% 15.0% 14.0% 8.0% 8.0%
제 18대 대통령 선거는 2012-12-19 로 이전 가장 가까운 갤럽 조사결과를 가져온다. Gallup에서 조사결과를 PDF 파일로 다운로드 받아 이를 직접 입력한다. 조사 날짜는 “2012년 12월 3일” 이다.
18_tbl <- tribble(~"조사_기간", ~"새누리당", ~"민주통합당", ~"진보정의당", ~"통합진보당", ~"모름/없음",
party_"2012년 12월 3일", "39%", "30%", "1%", "2%", "27%")
18_tbl party_
# A tibble: 1 x 6
조사_기간 새누리당 민주통합당 진보정의당 통합진보당 `모름/없음`
<chr> <chr> <chr> <chr> <chr> <chr>
1 2012년 12월 3일 39% 30% 1% 2% 27%
제 17대 대통령 선거는 2007-12-19 로 이전 가장 가까운 갤럽 조사결과를 가져온다. Gallup에서 조사결과를 PDF 파일로 다운로드 받아 이를 직접 입력한다. 구글 검색을 통해 정당 지지율에 대한 2007년 데이터를 구할 수 없어 한겨레 신문사에서 민주, 4년8개월만에 한나라에 지지율 앞서으로 갈음한다.
위키백과사전 대한민국의 정당 지지율 웹사이트에서 정당지지율 데이터를 가져온다.
library(tidyverse)
library(rvest)
Sys.setlocale("LC_ALL", "C")
read_html("https://ko.wikipedia.org/wiki/대한민국의_정당_지지율")
wiki_party_html <-
wiki_party_html %>%
party_dat <- html_node(xpath = '//*[@id="mw-content-text"]/div[1]/table') %>%
html_table(header = TRUE, fill = TRUE)
Sys.setlocale("LC_ALL", "Korean")
party_dat %>%
party_tbl <- janitor::clean_names(ascii = FALSE) %>%
slice(2:n()) %>%
as_tibble()
party_tbl %>%
realm_tbl <- select(`조사_기간`, ends_with("2")) %>%
mutate(조사기관 = "리얼미터") %>%
pivot_longer(더불어민주당_2:시대전환_2, names_to = "정당", values_to = "지지율")
party_tbl %>%
gallup_tbl <- select(`조사_기간`, !ends_with("2")) %>%
mutate(조사기관 = "갤럽") %>%
pivot_longer(더불어민주당:시대전환, names_to = "정당", values_to = "지지율")
bind_rows(realm_tbl, gallup_tbl) %>%
party_survey_tbl <- mutate(정당 = str_remove(정당, "_[0-9]")) %>%
mutate(지지율 = str_remove(지지율, pattern = "미조사\\[[0-9]{1,2}\\]")) %>%
mutate(지지율 = parse_number(지지율)) %>%
mutate(조사년 = str_extract(조사_기간, "[0-9]{4}") %>% parse_number,
str_extract(조사_기간, "(?<=년\\s).*?(?=월)") %>% parse_number,
조사월 = str_extract(조사_기간, "(?<=월\\s).*?(?=주)") %>% parse_number) %>%
조사주 = mutate(조사일 = 조사주 * 7 - 6) %>%
mutate(조사기간 = lubridate::make_date(year = 조사년, month = 조사월, day = 조사일)) %>%
filter(! 정당 %in% c("시대전환", "기본소득당")) %>%
group_by(조사기관, 정당) %>%
arrange(조사기간) %>%
mutate(지지율 = imputeTS::na_interpolation(지지율)) %>%
select(조사기간, 조사기관, 정당, 지지율) %>%
ungroup() %>%
mutate(정당 = factor(정당, levels = c("더불어민주당", "국민의힘", "국민의당", "열린민주당", "정의당")))
%>%
party_survey_tbl write_rds("data/party_survey_tbl_20210921.rds")
read_rds("data/party_survey_tbl_20210921.rds")
party_survey_tbl <-
%>%
party_survey_tbl pivot_wider(names_from = 정당, values_from = 지지율) %>%
filter(조사기관 == "갤럽") %>%
arrange(desc(조사기간)) %>%
reactable::reactable()
%>%
party_survey_tbl pivot_wider(names_from = 정당, values_from = 지지율) %>%
filter(조사기관 == "리얼미터") %>%
arrange(desc(조사기간)) %>%
reactable::reactable()
깔끔한 형태 데이터로 정리한 후에 이를 ggplot으로 시각화해보자.
%>%
party_survey_tbl mutate(지지율 = 지지율 / 100) %>%
ggplot(aes(x=조사기간, y= 지지율, color = 정당)) +
geom_line() +
geom_point() +
facet_wrap(~조사기관) +
scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
scale_x_date(date_labels = "%y년%m월") +
theme_bw(base_family = "NanumGothic") +
scale_colour_manual(name="",
values=c(더불어민주당="#065ce8",
"#ff0000",
국민의힘="#EA5508",
국민의당="#FCC800",
열린민주당="#f2ee09")) +
정의당= labs(x = "",
y = "정당지지율(%)",
title = "제20대 대통령선거 전 정당지지율",
subtitle = "2021년 9월 21일 기준",
caption = "자료: 위키백과, https://ko.wikipedia.org/wiki/대한민국의_정당_지지율") +
theme(legend.position = "top",
strip.text.x = element_text(size = 13, colour = "black", family = "NanumMyeongjo", face="bold"),
strip.background=element_rect(fill="gray95"),
plot.title=element_text(size=18, face="bold", family = "NanumBarunpen"),
plot.subtitle=element_text(face="bold", size=13, colour="grey10", family = "NanumBarunpen"))
데이터 과학자 이광춘 저작
kwangchun.lee.7@gmail.com