1 기초 데이터

1.1 분당 득표 및 지도 데이터

앞서 작업한 분당지역 득표 데이터와 지도 데이터를 함께 가져와서 후속 작업을 준비한다.

library(tidyverse)
library(sf)

`분당을` <- c("구미동", "구미1동", "금곡동", "분당동", "수내1동", "수내2동", "수내3동", 
              "정자동", "정자1동", "정자2동", "정자3동")

## 분당 득표 데이터
`분당_df` <- read_rds("data/분당_df.rds")
## 분당 지도 데이터
hjd_sf <- st_read("data/shapefile/HangJeongDong_ver2018xxxx_for_update.geojson")
Reading layer `HangJeongDong_ver2018xxxx_for_update' from data source `C:\work\election\data\shapefile\HangJeongDong_ver2018xxxx_for_update.geojson' using driver `GeoJSON'
Simple feature collection with 3504 features and 3 fields
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: 124.6097 ymin: 33.11187 xmax: 131.8713 ymax: 38.61695
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs
bundang_sf <- hjd_sf %>% 
  filter(str_detect(adm_nm, "분당구")) %>% 
  mutate(`읍면동명` = str_extract(adm_nm, "(\\w+)$")) %>% 
  filter(`읍면동명` %in% `분당을`)

1.2 득표 지도 데이터 병합

앞서 작업한 분당지역 득표 데이터와 지도 데이터를 함께 가져와서 후속 작업을 준비한다.

## 데이터 병합
`분당_2018_df` <- `분당_df` %>% 
  filter(str_detect(`선거`, "2018")) %>% 
  select(-`선거`)

bundang_map_sf <- left_join(bundang_sf, `분당_df`, by="읍면동명") %>% 
  filter(!is.na(`민주당`))

2 득표 시각화

2.1 분당을 - 11개동 (단계구분도)

bundang_map_sf %>% 
  ggplot(aes(fill=`민주당`)) +
    geom_sf() +
    facet_wrap(~`선거`)

2.2 분당을 - 11개동 (마커)

## 주민자치단체 위경도 : 성남시 - 분당구와 행정동, election_sigungu_sungnam_dong.html
bundang_lonlat_df <- read_rds("data/shapefile/bundang_lonlat_df.rds") %>% 
  rename(`읍면동명` = `주민센터명`) %>% 
  filter(`읍면동명` %in% `분당을`) %>% 
  select(`읍면동명`, lon, lat)

bundang_map_sf <- left_join(bundang_map_sf, bundang_lonlat_df)

## 마커 시각화
library(leaflet)

bundang_map_sf %>% 
  filter(str_detect(`선거`, "2018")) %>% 
leaflet() %>%
  addTiles() %>% 
  addProviderTiles(providers$OpenStreetMap) %>% 
  addMarkers(lng=~lon, lat=~lat, clusterOptions = markerClusterOptions(),
                   popup = ~ as.character(paste0("<strong>", paste0("읍면동명: ", `읍면동명`), "</strong><br>",
                                                 "-----------------------------------------------------------<br>",
                                                 "&middot; 민주당: ", scales::comma(`민주당`), "<br>",
                                                 "&middot; 자한당: ", scales::comma(`자한당`), "<br>",
                                                 "&middot; 바미당: ", scales::comma(`바미당`), "<br>",
                                                 "&middot; 정의당: ", scales::comma(`정의당`), "<br>")))

3 분당을 - 11개동

bundang_map_2018_sf <- bundang_map_sf %>% 
  filter(str_detect(`선거`, "2018"))


## 팔레트
vote_bins <- c(0, 2000, 4000, 6000, 8000, 10000)
vote_pal  <- colorBin("PuBu", domain = bundang_map_2018_sf$`민주당`, bins = vote_bins)

## 라벨
dong_labels <- sprintf(
  "<strong>%s</strong><br/>",
  bundang_map_2018_sf$`읍면동명`) %>% lapply(htmltools::HTML)


bundang_map_2018_sf %>% 
  leaflet() %>%
  addTiles() %>% 
  addProviderTiles(providers$OpenStreetMap) %>% 
  addMarkers(lng=~lon, lat=~lat, clusterOptions = markerClusterOptions(),
                   popup = ~ as.character(paste0("<strong>", paste0("읍면동명: ", `읍면동명`), "</strong><br>",
                                                 "-----------------------------------------------------------<br>",
                                                 "&middot; 민주당: ", scales::comma(`민주당`), "<br>",
                                                 "&middot; 자한당: ", scales::comma(`자한당`), "<br>",
                                                 "&middot; 바미당: ", scales::comma(`바미당`), "<br>",
                                                 "&middot; 정의당: ", scales::comma(`정의당`), "<br>"))) %>% 
  addPolygons(opacity = 1.0, fillOpacity = 0.9,
            weight = 1,
            highlightOptions = highlightOptions(color = "black", weight = 3,  bringToFront = TRUE),
            label = dong_labels,
            fillColor = ~vote_pal(`민주당`),
            labelOptions = labelOptions(
            style = list("font-weight" = "normal", padding = "3px 8px"),
            textsize = "15px",
            direction = "auto")) %>% 
    addLegend("bottomright", pal = vote_pal, values = ~`민주당`,
    title = "민주당 득표",
    labFormat = labelFormat(suffix = "명"),
    opacity = 1)