krvotes
팩키지에서 준비된 총선, 대선, 지선 데이터를 바탕으로 분당구 득표 데이터를 비교가능하도록 정당별로 준비시킨다.
library(tidyverse)
library(krvotes)
# 총선 2016 -----
`총선_df` <- congress_2018 %>%
filter(str_detect(`precinct`, "분당")) %>%
unnest(data_clean) %>%
group_by(`읍면동명`) %>%
summarise(`민주당` = sum(`더불어민주당 김병관`, `더불어민주당 김병욱`, na.rm=TRUE),
`자한당` = sum(`새누리당 권혁세`, `새누리당 전하진`, `무소속 임태희`, na.rm=TRUE),
`바미당` = sum(`국민의당 염오봉`, `국민의당 윤은숙`, na.rm=TRUE)) %>%
mutate(`선거` = "2016총선")
# 대선 2017 -----
`대선_df` <- president %>%
tbl_df %>%
filter(str_detect(`구시군명`, "분당")) %>%
group_by(`읍면동명`) %>%
summarise(`민주당` = sum(`문재인`),
`자한당` = sum(`홍준표`),
`바미당` = sum(`안철수`, `유승민`),
`정의당` = sum(`심상정`)) %>%
mutate(`선거` = "2017대선")
# 지선 2018 -----
`지선_df` <- local_2018 %>%
filter(str_detect(`시도명`, "경기")) %>%
select(-`시도명`) %>%
unnest(data_clean) %>%
filter(str_detect(`구시군명`, "분당")) %>%
group_by(`읍면동명`) %>%
summarise(`민주당` = sum(`더불어민주당 이재명`),
`자한당` = sum(`자유한국당 남경필`),
`바미당` = sum(`바른미래당 김영환`),
`정의당` = sum(`정의당 이홍우`)) %>%
mutate(`선거` = "2018지선")
`분당_df` <- bind_rows(`총선_df`, `대선_df`) %>%
bind_rows(`지선_df`) %>%
filter(!str_detect(`읍면동명`, "잘못")) %>%
mutate(`정의당` = ifelse(is.na(`정의당`), 0, `정의당`)) %>%
select(`선거`, everything())
2016년 총선부터 2018년 지선까지 연도별 분당구 민주당, 자한당, 바른미래당, 정의당 정당별 득표율을 다음과 같은 표로 정리한다.
`분당_df` %>%
gather(`정당`, `득표수`, -`선거`, -`읍면동명`) %>%
mutate(`정당` = factor(`정당`, levels = c("민주당", "자한당", "바미당", "정의당"))) %>%
group_by(`선거`, `정당`) %>%
summarise(`득표수` = sum(`득표수`)) %>%
spread(`정당`, `득표수`) %>%
DT::datatable() %>%
DT::formatRound(2:5, digits = 0)
앞서 정리한 표를 시각화하여 추세를 파악한다.
library(extrafont)
loadfonts()
`분당득표` <- `분당_df` %>%
gather(`정당`, `득표수`, -`선거`, -`읍면동명`) %>%
mutate(`정당` = factor(`정당`, levels = c("민주당", "자한당", "바미당", "정의당"))) %>%
group_by(`선거`, `정당`) %>%
summarise(`득표수` = sum(`득표수`)) %>%
filter(`선거` == "2018지선") %>%
pull(`득표수`)
`분당_df` %>%
gather(`정당`, `득표수`, -`선거`, -`읍면동명`) %>%
mutate(`정당` = factor(`정당`, levels = c("민주당", "자한당", "바미당", "정의당"))) %>%
group_by(`선거`, `정당`) %>%
summarise(`득표수` = sum(`득표수`)) %>%
ggplot(aes(x=`선거`, y=`득표수`, group=`정당`, color=`정당`)) +
geom_line(size=1) +
geom_point(size=3) +
scale_color_manual(values = c("blue", "red", "cyan", "yellow")) +
scale_y_continuous(expand = c(0, 0), labels = scales::comma, sec.axis = sec_axis(~ ., breaks = `분당득표`), limits=c(0, 150000)) +
theme_minimal(base_family = "NanumGothic") +
labs(x="", y="득표수", title="성남시 분당구 주요선거 정당별 득표수",
subtitle="총선, 대선, 지선")
library(highcharter)
`분당_df` %>%
gather(`정당`, `득표수`, -`선거`, -`읍면동명`) %>%
mutate(`정당` = factor(`정당`, levels = c("민주당", "자한당", "바미당", "정의당"))) %>%
group_by(`선거`, `정당`, `읍면동명`) %>%
summarise(`득표수` = sum(`득표수`)) %>%
spread(`정당`, `득표수`) %>%
DT::datatable() %>%
DT::formatRound(3:6, digits=0)
`분당_df` %>%
gather(`정당`, `득표수`, -`선거`, -`읍면동명`) %>%
filter(!str_detect(`읍면동명`, "거소|국외|재외")) %>%
mutate(`정당` = factor(`정당`, levels = c("민주당", "자한당", "바미당", "정의당"))) %>%
group_by(`선거`, `정당`, `읍면동명`) %>%
summarise(`득표수` = sum(`득표수`)) %>%
ggplot(aes(x=`선거`, y=`득표수`, group=`정당`, color=`정당`)) +
geom_line(size=1.3) +
geom_point(size=2.5) +
scale_y_continuous(labels = scales::comma) +
facet_wrap(~ `읍면동명`) +
scale_color_manual(values = c("blue", "red", "cyan", "yellow")) +
theme_bw(base_family = "NanumGothic") +
theme(legend.position = "none") +
labs(x="", y="득표수")
library(highcharter)
# 2. 지리정보 시각화 -----