---
editor:
markdown:
wrap: 72
editor_options:
chunk_output_type: console
---
# 제8대 지선 - 구시군의 장
## 구시군의 장
<!-- ```{r} -->
<!-- #| eval: false -->
<!-- library(krvote2) -->
<!-- library(httr) -->
<!-- library(jsonlite) -->
<!-- # 서비스 키 설정 -->
<!-- service_key <- Sys.getenv("DATA_GO_DECODE_KEY") -->
<!-- set_krvote2_key(service_key) -->
<!-- elections <- get_all_elections() -->
<!-- local_sgg_8 <- elections |> -->
<!-- as_tibble() |> -->
<!-- arrange(desc(sgId)) |> -->
<!-- select(sgId, sgName, sgTypecode) |> -->
<!-- filter(sgId == "20220601" & sgTypecode == "4") # & sgTypecode == "3" 시도지사 -->
<!-- local_sgg_8 -->
<!-- ``` -->
<!-- ## 선거구 -->
<!-- ```{r} -->
<!-- #| eval: false -->
<!-- precint_sgg <- krvote2::get_all_constituencies(sgId="20220601", sgTypecode="4") -->
<!-- precint_sgg |> -->
<!-- as_tibble() -->
<!-- ``` -->
<!-- ## 투개표수 -->
<!-- ### 스크립트 -->
<!-- ```{r} -->
<!-- #| eval: false -->
<!-- sgg_raw <- krvote2::get_count_info(sgId = "20220601", -->
<!-- sgTypecode = "4", -->
<!-- sdName = "서울특별시", -->
<!-- sggName = "종로구") |> -->
<!-- as_tibble() -->
<!-- sgg_tbl <- sgg_raw |> -->
<!-- pivot_longer(cols = starts_with(c("jd", "hbj", "dugsu")), -->
<!-- names_to = c(".value", "cand_num"), -->
<!-- names_pattern = "([a-z]+)(\\d+)", -->
<!-- values_drop_na = TRUE, -->
<!-- values_transform = list(dugsu = as.numeric)) |> -->
<!-- filter(jd != "") |> -->
<!-- filter(wiwName == "합계") |> -->
<!-- mutate(across(sunsu:gigwonsu, as.numeric)) |> -->
<!-- mutate(득표율 = dugsu / yutusu, -->
<!-- 투표율 = tusu / sunsu) |> -->
<!-- select(sdName, sggName, jd, hbj, sunsu, tusu, 투표율, yutusu, dugsu, 득표율) -->
<!-- ``` -->
<!-- ### 함수 -->
<!-- ```{r} -->
<!-- #| eval: false -->
<!-- calculate_winner <- function(sdName = "서울특별시", sggName = "종로구") { -->
<!-- cat("\n======================================\n") -->
<!-- cat(sdName, " : ", sggName, "\n") -->
<!-- tryCatch({ -->
<!-- sgg_raw <- krvote2::get_count_info(sgId = "20220601", -->
<!-- sgTypecode = "4", -->
<!-- sdName = sdName, -->
<!-- sggName = sggName) |> -->
<!-- as_tibble() -->
<!-- sgg_tbl <- sgg_raw |> -->
<!-- pivot_longer(cols = starts_with(c("jd", "hbj", "dugsu")), -->
<!-- names_to = c(".value", "cand_num"), -->
<!-- names_pattern = "([a-z]+)(\\d+)", -->
<!-- values_drop_na = TRUE, -->
<!-- values_transform = list(dugsu = as.numeric)) |> -->
<!-- filter(jd != "") |> -->
<!-- filter(wiwName == "합계") |> -->
<!-- mutate(across(sunsu:gigwonsu, as.numeric)) |> -->
<!-- mutate(득표율 = dugsu / yutusu, -->
<!-- 투표율 = tusu / sunsu) |> -->
<!-- select(sdName, sggName, jd, hbj, sunsu, tusu, 투표율, yutusu, dugsu, 득표율) -->
<!-- return(sgg_tbl) -->
<!-- }, error = function(e) { -->
<!-- if (grepl("데이터 정보가 없습니다", e$message)) { -->
<!-- # 무투표 당선 처리 -->
<!-- cat("무투표 당선 지역입니다.\n") -->
<!-- return(tibble( -->
<!-- sdName = sdName, -->
<!-- sggName = sggName, -->
<!-- jd = "무투표당선", -->
<!-- hbj = NA_character_, -->
<!-- sunsu = NA_real_, -->
<!-- tusu = NA_real_, -->
<!-- 투표율 = 0, -->
<!-- yutusu = NA_real_, -->
<!-- dugsu = NA_real_, -->
<!-- 득표율 = 1 # 무투표 당선이므로 100% 득표율로 처리 -->
<!-- )) -->
<!-- } else { -->
<!-- # 다른 오류 발생 시 -->
<!-- cat("오류 발생:", conditionMessage(e), "\n") -->
<!-- return(NULL) -->
<!-- } -->
<!-- }) -->
<!-- } -->
<!-- # calculate_winner("서울특별시", "종로구") -->
<!-- calculate_winner("대구광역시", "중구") # 무투표 당선 -->
<!-- precint_sgg_tbl <- precint_sgg |> -->
<!-- as_tibble() |> -->
<!-- mutate(data = map2(sdName, sggName, calculate_winner)) -->
<!-- precint_sgg_tbl |> -->
<!-- write_rds("data/지선_8회_구시군의장.rds") -->
<!-- ``` -->
<!-- ```{r} -->
<!-- #| eval: false -->
<!-- precint_sgg_tbl <- read_rds("data/지선_8회_구시군의장.rds") -->
<!-- precint_sgg_viz <- precint_sgg_tbl |> -->
<!-- select(data) |> -->
<!-- unnest(data) |> -->
<!-- group_by(sdName, sggName, jd, hbj) |> -->
<!-- summarise(sunsu = sum(sunsu), -->
<!-- tusu = sum(tusu), -->
<!-- yutusu = sum(yutusu), -->
<!-- dugsu = sum(dugsu)) |> -->
<!-- mutate(득표율 = dugsu / yutusu, -->
<!-- 투표율 = tusu / sunsu) |> -->
<!-- ungroup() |> -->
<!-- group_by(sdName, sggName) |> -->
<!-- mutate(순위 = rank(desc(득표율))) |> -->
<!-- filter(순위 %in% c(1,2)) |> -->
<!-- arrange(순위) |> -->
<!-- mutate(차이 = abs(lead(득표율) - 득표율)) |> -->
<!-- set_names(c("시도", "선거구", "정당", "후보", "선거인수", "투표수", "유효투표수", "득표수", "득표율", "투표율", "순위", "차이")) -->
<!-- ``` -->
<!-- ## 결과 -->
<!-- ```{r} -->
<!-- #| eval: false -->
<!-- library(reactable) -->
<!-- precint_sgg_viz |> -->
<!-- filter(!is.na(차이)) |> -->
<!-- select(-유효투표수, -순위) |> -->
<!-- reactable( -->
<!-- searchable = TRUE, -->
<!-- filterable = TRUE, -->
<!-- defaultColDef = colDef( -->
<!-- header = function(value) gsub(".", " ", value, fixed = TRUE), -->
<!-- align = "center", -->
<!-- minWidth = 80, -->
<!-- headerStyle = list(background = "#f7f7f8") -->
<!-- ), -->
<!-- columns = list( -->
<!-- 시도 = colDef(minWidth = 60), -->
<!-- 선거구 = colDef(minWidth = 90), -->
<!-- 정당 = colDef(minWidth = 100), -->
<!-- 후보 = colDef(minWidth = 80), -->
<!-- 선거인수 = colDef(format = colFormat(separators = TRUE, digits = 0)), -->
<!-- 투표수 = colDef(format = colFormat(separators = TRUE, digits = 0)), -->
<!-- 득표수 = colDef(format = colFormat(separators = TRUE, digits = 0)), -->
<!-- 득표율 = colDef(format = colFormat(percent = TRUE, digits = 1)), -->
<!-- 투표율 = colDef(format = colFormat(percent = TRUE, digits = 1)), -->
<!-- 차이 = colDef(format = colFormat(percent = TRUE, digits = 2)) -->
<!-- ), -->
<!-- bordered = TRUE, -->
<!-- highlight = TRUE, -->
<!-- striped = TRUE, -->
<!-- compact = TRUE, -->
<!-- wrap = FALSE, -->
<!-- resizable = TRUE, -->
<!-- showPageSizeOptions = TRUE, -->
<!-- pageSizeOptions = c(10, 20, 50, 100), -->
<!-- defaultPageSize = 20, -->
<!-- showPagination = TRUE, -->
<!-- paginationType = "numbers" -->
<!-- ) -->
<!-- ``` -->
<!-- ## 구시군의 장 -->
<!-- ### 선거구지도 -->
<!-- ```{r} -->
<!-- admin_sf <- st_read("data/maps/HangJeongDong_ver20220401.geojson") -->
<!-- # 행정동지도와 선거구 매핑 -->
<!-- admin_election_data <- tribble( -->
<!-- ~sidonm, ~sggnm, ~precinct, -->
<!-- "강원도", "강릉시", "강릉시", -->
<!-- "강원도", "고성군", "고성군", -->
<!-- "강원도", "동해시", "동해시", -->
<!-- "강원도", "삼척시", "삼척시", -->
<!-- "강원도", "속초시", "속초시", -->
<!-- "강원도", "양구군", "양구군", -->
<!-- "강원도", "양양군", "양양군", -->
<!-- "강원도", "영월군", "영월군", -->
<!-- "강원도", "원주시", "원주시", -->
<!-- "강원도", "인제군", "인제군", -->
<!-- "강원도", "정선군", "정선군", -->
<!-- "강원도", "철원군", "철원군", -->
<!-- "강원도", "춘천시", "춘천시", -->
<!-- "강원도", "태백시", "태백시", -->
<!-- "강원도", "평창군", "평창군", -->
<!-- "강원도", "홍천군", "홍천군", -->
<!-- "강원도", "화천군", "화천군", -->
<!-- "강원도", "횡성군", "횡성군", -->
<!-- "경기도", "가평군", "가평군", -->
<!-- "경기도", "고양시덕양구", "고양시", -->
<!-- "경기도", "고양시일산동구", "고양시", -->
<!-- "경기도", "고양시일산서구", "고양시", -->
<!-- "경기도", "과천시", "과천시", -->
<!-- "경기도", "광명시", "광명시", -->
<!-- "경기도", "광주시", "광주시", -->
<!-- "경기도", "구리시", "구리시", -->
<!-- "경기도", "군포시", "군포시", -->
<!-- "경기도", "김포시", "김포시", -->
<!-- "경기도", "남양주시", "남양주시", -->
<!-- "경기도", "동두천시", "동두천시", -->
<!-- "경기도", "부천시", "부천시", -->
<!-- "경기도", "성남시분당구", "성남시", -->
<!-- "경기도", "성남시수정구", "성남시", -->
<!-- "경기도", "성남시중원구", "성남시", -->
<!-- "경기도", "수원시권선구", "수원시", -->
<!-- "경기도", "수원시영통구", "수원시", -->
<!-- "경기도", "수원시장안구", "수원시", -->
<!-- "경기도", "수원시팔달구", "수원시", -->
<!-- "경기도", "시흥시", "시흥시", -->
<!-- "경기도", "안산시단원구", "안산시", -->
<!-- "경기도", "안산시상록구", "안산시", -->
<!-- "경기도", "안성시", "안성시", -->
<!-- "경기도", "안양시동안구", "안양시", -->
<!-- "경기도", "안양시만안구", "안양시", -->
<!-- "경기도", "양주시", "양주시", -->
<!-- "경기도", "양평군", "양평군", -->
<!-- "경기도", "여주시", "여주시", -->
<!-- "경기도", "연천군", "연천군", -->
<!-- "경기도", "오산시", "오산시", -->
<!-- "경기도", "용인시기흥구", "용인시", -->
<!-- "경기도", "용인시수지구", "용인시", -->
<!-- "경기도", "용인시처인구", "용인시", -->
<!-- "경기도", "의왕시", "의왕시", -->
<!-- "경기도", "의정부시", "의정부시", -->
<!-- "경기도", "이천시", "이천시", -->
<!-- "경기도", "파주시", "파주시", -->
<!-- "경기도", "평택시", "평택시", -->
<!-- "경기도", "포천시", "포천시", -->
<!-- "경기도", "하남시", "하남시", -->
<!-- "경기도", "화성시", "화성시", -->
<!-- "경상남도", "거제시", "거제시", -->
<!-- "경상남도", "거창군", "거창군", -->
<!-- "경상남도", "고성군", "고성군", -->
<!-- "경상남도", "김해시", "김해시", -->
<!-- "경상남도", "남해군", "남해군", -->
<!-- "경상남도", "밀양시", "밀양시", -->
<!-- "경상남도", "사천시", "사천시", -->
<!-- "경상남도", "산청군", "산청군", -->
<!-- "경상남도", "양산시", "양산시", -->
<!-- "경상남도", "의령군", "의령군", -->
<!-- "경상남도", "진주시", "진주시", -->
<!-- "경상남도", "창녕군", "창녕군", -->
<!-- "경상남도", "창원시마산합포구", "창원시", -->
<!-- "경상남도", "창원시마산회원구", "창원시", -->
<!-- "경상남도", "창원시성산구", "창원시", -->
<!-- "경상남도", "창원시의창구", "창원시", -->
<!-- "경상남도", "창원시진해구", "창원시", -->
<!-- "경상남도", "통영시", "통영시", -->
<!-- "경상남도", "하동군", "하동군", -->
<!-- "경상남도", "함안군", "함안군", -->
<!-- "경상남도", "함양군", "함양군", -->
<!-- "경상남도", "합천군", "합천군", -->
<!-- "경상북도", "경산시", "경산시", -->
<!-- "경상북도", "경주시", "경주시", -->
<!-- "경상북도", "고령군", "고령군", -->
<!-- "경상북도", "구미시", "구미시", -->
<!-- "경상북도", "군위군", "군위군", -->
<!-- "경상북도", "김천시", "김천시", -->
<!-- "경상북도", "문경시", "문경시", -->
<!-- "경상북도", "봉화군", "봉화군", -->
<!-- "경상북도", "상주시", "상주시", -->
<!-- "경상북도", "성주군", "성주군", -->
<!-- "경상북도", "안동시", "안동시", -->
<!-- "경상북도", "영덕군", "영덕군", -->
<!-- "경상북도", "영양군", "영양군", -->
<!-- "경상북도", "영주시", "영주시", -->
<!-- "경상북도", "영천시", "영천시", -->
<!-- "경상북도", "예천군", "예천군", -->
<!-- "경상북도", "울릉군", "울릉군", -->
<!-- "경상북도", "울진군", "울진군", -->
<!-- "경상북도", "의성군", "의성군", -->
<!-- "경상북도", "청도군", "청도군", -->
<!-- "경상북도", "청송군", "청송군", -->
<!-- "경상북도", "칠곡군", "칠곡군", -->
<!-- "경상북도", "포항시남구", "포항시", -->
<!-- "경상북도", "포항시북구", "포항시", -->
<!-- "광주광역시", "광산구", "광산구", -->
<!-- "광주광역시", "남구", "남구", -->
<!-- "광주광역시", "동구", "동구", -->
<!-- "광주광역시", "북구", "북구", -->
<!-- "광주광역시", "서구", "서구", -->
<!-- "대구광역시", "남구", "남구", -->
<!-- "대구광역시", "달서구", "달서구", -->
<!-- "대구광역시", "달성군", "달성군", -->
<!-- "대구광역시", "동구", "동구", -->
<!-- "대구광역시", "북구", "북구", -->
<!-- "대구광역시", "서구", "서구", -->
<!-- "대구광역시", "수성구", "수성구", -->
<!-- "대구광역시", "중구", "중구", -->
<!-- "대전광역시", "대덕구", "대덕구", -->
<!-- "대전광역시", "동구", "동구", -->
<!-- "대전광역시", "서구", "서구", -->
<!-- "대전광역시", "유성구", "유성구", -->
<!-- "대전광역시", "중구", "중구", -->
<!-- "부산광역시", "강서구", "강서구", -->
<!-- "부산광역시", "금정구", "금정구", -->
<!-- "부산광역시", "기장군", "기장군", -->
<!-- "부산광역시", "남구", "남구", -->
<!-- "부산광역시", "동구", "동구", -->
<!-- "부산광역시", "동래구", "동래구", -->
<!-- "부산광역시", "부산진구", "부산진구", -->
<!-- "부산광역시", "북구", "북구", -->
<!-- "부산광역시", "사상구", "사상구", -->
<!-- "부산광역시", "사하구", "사하구", -->
<!-- "부산광역시", "서구", "서구", -->
<!-- "부산광역시", "수영구", "수영구", -->
<!-- "부산광역시", "연제구", "연제구", -->
<!-- "부산광역시", "영도구", "영도구", -->
<!-- "부산광역시", "중구", "중구", -->
<!-- "부산광역시", "해운대구", "해운대구", -->
<!-- "서울특별시", "강남구", "강남구", -->
<!-- "서울특별시", "강동구", "강동구", -->
<!-- "서울특별시", "강북구", "강북구", -->
<!-- "서울특별시", "강서구", "강서구", -->
<!-- "서울특별시", "관악구", "관악구", -->
<!-- "서울특별시", "광진구", "광진구", -->
<!-- "서울특별시", "구로구", "구로구", -->
<!-- "서울특별시", "금천구", "금천구", -->
<!-- "서울특별시", "노원구", "노원구", -->
<!-- "서울특별시", "도봉구", "도봉구", -->
<!-- "서울특별시", "동대문구", "동대문구", -->
<!-- "서울특별시", "동작구", "동작구", -->
<!-- "서울특별시", "마포구", "마포구", -->
<!-- "서울특별시", "서대문구", "서대문구", -->
<!-- "서울특별시", "서초구", "서초구", -->
<!-- "서울특별시", "성동구", "성동구", -->
<!-- "서울특별시", "성북구", "성북구", -->
<!-- "서울특별시", "송파구", "송파구", -->
<!-- "서울특별시", "양천구", "양천구", -->
<!-- "서울특별시", "영등포구", "영등포구", -->
<!-- "서울특별시", "용산구", "용산구", -->
<!-- "서울특별시", "은평구", "은평구", -->
<!-- "서울특별시", "종로구", "종로구", -->
<!-- "서울특별시", "중구", "중구", -->
<!-- "서울특별시", "중랑구", "중랑구", -->
<!-- "세종특별자치시", "세종시", NA_character_, -->
<!-- "울산광역시", "남구", "남구", -->
<!-- "울산광역시", "동구", "동구", -->
<!-- "울산광역시", "북구", "북구", -->
<!-- "울산광역시", "울주군", "울주군", -->
<!-- "울산광역시", "중구", "중구", -->
<!-- "인천광역시", "강화군", "강화군", -->
<!-- "인천광역시", "계양구", "계양구", -->
<!-- "인천광역시", "남동구", "남동구", -->
<!-- "인천광역시", "동구", "동구", -->
<!-- "인천광역시", "미추홀구", "미추홀구", -->
<!-- "인천광역시", "부평구", "부평구", -->
<!-- "인천광역시", "서구", "서구", -->
<!-- "인천광역시", "연수구", "연수구", -->
<!-- "인천광역시", "옹진군", "옹진군", -->
<!-- "인천광역시", "중구", "중구", -->
<!-- "전라남도", "강진군", "강진군", -->
<!-- "전라남도", "고흥군", "고흥군", -->
<!-- "전라남도", "곡성군", "곡성군", -->
<!-- "전라남도", "광양시", "광양시", -->
<!-- "전라남도", "구례군", "구례군", -->
<!-- "전라남도", "나주시", "나주시", -->
<!-- "전라남도", "담양군", "담양군", -->
<!-- "전라남도", "목포시", "목포시", -->
<!-- "전라남도", "무안군", "무안군", -->
<!-- "전라남도", "보성군", "보성군", -->
<!-- "전라남도", "순천시", "순천시", -->
<!-- "전라남도", "신안군", "신안군", -->
<!-- "전라남도", "여수시", "여수시", -->
<!-- "전라남도", "영광군", "영광군", -->
<!-- "전라남도", "영암군", "영암군", -->
<!-- "전라남도", "완도군", "완도군", -->
<!-- "전라남도", "장성군", "장성군", -->
<!-- "전라남도", "장흥군", "장흥군", -->
<!-- "전라남도", "진도군", "진도군", -->
<!-- "전라남도", "함평군", "함평군", -->
<!-- "전라남도", "해남군", "해남군", -->
<!-- "전라남도", "화순군", "화순군", -->
<!-- "전라북도", "고창군", "고창군", -->
<!-- "전라북도", "군산시", "군산시", -->
<!-- "전라북도", "김제시", "김제시", -->
<!-- "전라북도", "남원시", "남원시", -->
<!-- "전라북도", "무주군", "무주군", -->
<!-- "전라북도", "부안군", "부안군", -->
<!-- "전라북도", "순창군", "순창군", -->
<!-- "전라북도", "완주군", "완주군", -->
<!-- "전라북도", "익산시", "익산시", -->
<!-- "전라북도", "임실군", "임실군", -->
<!-- "전라북도", "장수군", "장수군", -->
<!-- "전라북도", "전주시덕진구", "전주시", -->
<!-- "전라북도", "전주시완산구", "전주시", -->
<!-- "전라북도", "정읍시", "정읍시", -->
<!-- "전라북도", "진안군", "진안군", -->
<!-- "제주특별자치도", "서귀포시", NA_character_, -->
<!-- "제주특별자치도", "제주시", NA_character_, -->
<!-- "충청남도", "계룡시", "계룡시", -->
<!-- "충청남도", "공주시", "공주시", -->
<!-- "충청남도", "금산군", "금산군", -->
<!-- "충청남도", "논산시", "논산시", -->
<!-- "충청남도", "당진시", "당진시", -->
<!-- "충청남도", "보령시", "보령시", -->
<!-- "충청남도", "부여군", "부여군", -->
<!-- "충청남도", "서산시", "서산시", -->
<!-- "충청남도", "서천군", "서천군", -->
<!-- "충청남도", "아산시", "아산시", -->
<!-- "충청남도", "예산군", "예산군", -->
<!-- "충청남도", "천안시동남구", "천안시", -->
<!-- "충청남도", "천안시서북구", "천안시", -->
<!-- "충청남도", "청양군", "청양군", -->
<!-- "충청남도", "태안군", "태안군", -->
<!-- "충청남도", "홍성군", "홍성군", -->
<!-- "충청북도", "괴산군", "괴산군", -->
<!-- "충청북도", "단양군", "단양군", -->
<!-- "충청북도", "보은군", "보은군", -->
<!-- "충청북도", "영동군", "영동군", -->
<!-- "충청북도", "옥천군", "옥천군", -->
<!-- "충청북도", "음성군", "음성군", -->
<!-- "충청북도", "제천시", "제천시", -->
<!-- "충청북도", "증평군", "증평군", -->
<!-- "충청북도", "진천군", "진천군", -->
<!-- "충청북도", "청주시상당구", "청주시", -->
<!-- "충청북도", "청주시서원구", "청주시", -->
<!-- "충청북도", "청주시청원구", "청주시", -->
<!-- "충청북도", "청주시흥덕구", "청주시", -->
<!-- "충청북도", "충주시", "충주시" -->
<!-- ) -->
<!-- admin_precinct_sf <- admin_sf |> -->
<!-- group_by(sidonm, sggnm) |> -->
<!-- summarise(geometry = st_union(geometry)) |> -->
<!-- arrange(sidonm, sggnm) |> -->
<!-- left_join(admin_election_data, by = c("sidonm", "sggnm")) |> -->
<!-- group_by(sidonm, precinct) |> -->
<!-- summarise(geometry = st_union(geometry)) -->
<!-- admin_precinct_sf -->
<!-- ``` -->
<!-- ## 시각화 -->
```{r}
#| message: false
#| warning: false
#| results: "hide"
#| eval: false
library(leaflet)
library(sf)
library(tidyverse)
sf_use_s2(FALSE)
# 시도별 폴리곤 데이터 준비
sido_sf <- bitSpatial::admi %>%
group_by(mega_nm) %>%
summarise(geometry = st_union(geometry))
sgg_viz_winner <- precint_sgg_viz |>
filter(순위 == 1) |>
select(시도 , 선거구, 당선정당=정당, 당선후보=후보, 차이) |>
arrange(시도, 선거구) |>
ungroup()
sgg_viz_loser <- precint_sgg_viz |>
filter(순위 != 1) |>
select(시도, 선거구, 낙선정당=정당, 낙선후보=후보) |>
arrange(시도, 선거구) |>
ungroup() |>
# 무투표 당선 등 226개 맞추기 위함.
right_join(sgg_viz_winner |> select(시도, 선거구), by = c("시도", "선거구"))
sgg_viz_sf <- admin_precinct_sf |>
arrange(sidonm, precinct) |>
filter(!str_detect(sidonm, "제주|세종")) |>
ungroup() |>
bind_cols(sgg_viz_winner |> select(당선정당, 당선후보, 차이)) |>
bind_cols(sgg_viz_loser |> select(낙선정당, 낙선후보)) |>
mutate(차이 = ifelse(당선정당 == "더불어민주당", 차이, -차이)) |>
# 무투표 당선 처리
mutate(당선후보 = case_when(
sidonm == "경상북도" & precinct == "예천군" ~ "국힘 김학동",
sidonm == "광주광역시" & precinct == "광산구" ~ "민주 박병규",
sidonm == "대구광역시" & precinct == "달서구" ~ "국힘 이태훈",
sidonm == "대구광역시" & precinct == "중구" ~ "국힘 류규하",
sidonm == "전라남도" & precinct == "보성군" ~ "민주 김철우",
sidonm == "전라남도" & precinct == "해남군" ~ "민주 명현관",
TRUE ~ 당선후보
)) |>
mutate(낙선정당 = case_when(
sidonm == "경상북도" & precinct == "예천군" ~ "",
sidonm == "광주광역시" & precinct == "광산구" ~ "",
sidonm == "대구광역시" & precinct == "달서구" ~ "",
sidonm == "대구광역시" & precinct == "중구" ~ "",
sidonm == "전라남도" & precinct == "보성군" ~ "",
sidonm == "전라남도" & precinct == "해남군" ~ "",
TRUE ~ 낙선정당
)) |>
mutate(낙선후보 = case_when(
sidonm == "경상북도" & precinct == "예천군" ~ "",
sidonm == "광주광역시" & precinct == "광산구" ~ "",
sidonm == "대구광역시" & precinct == "달서구" ~ "",
sidonm == "대구광역시" & precinct == "중구" ~ "",
sidonm == "전라남도" & precinct == "보성군" ~ "",
sidonm == "전라남도" & precinct == "해남군" ~ "",
TRUE ~ 낙선후보
))
summary(sido_viz_sf$차이)
# 지도 그리기
colors <- c("#8B0000", "#FF0000", "#FFA07A", "white", "#ADD8E6", "#0000FF", "#00008B")
bins <- c(-Inf, -0.2, -0.1, -0.05, 0.05, 0.1, 0.2, Inf)
color_function <- colorBin(colors, sgg_viz_sf$차이, bins = bins)
sgg_local_8_m <- sgg_viz_sf |>
mutate(precinct = str_glue("{sidonm} {precinct}")) |>
leaflet() %>%
addTiles() %>%
addPolygons(
fillColor = ~colorBin(colors, 차이, bins = bins)(차이),
weight = 1.5,
opacity = 0.5,
color = "white",
dashArray = "3",
fillOpacity = 0.7,
highlight = highlightOptions(
weight = 1.5,
color = "#666",
dashArray = "",
fillOpacity = 0.7,
bringToFront = TRUE),
label = lapply(
sprintf(
"<b>%s</b><br/>득표차: %2.1f%%<br/>당선정당: %s<br/>당선후보: %s<br/>낙선정당: %s<br/>낙선후보: %s",
sgg_viz_sf$precinct, 100*sgg_viz_sf$차이,
sgg_viz_sf$당선정당, sgg_viz_sf$당선후보,
sgg_viz_sf$낙선정당, sgg_viz_sf$낙선후보
),
htmltools::HTML
),
labelOptions = labelOptions(
style = list(
"font-weight" = "normal",
padding = "3px 8px"
),
textsize = "15px",
direction = "auto",
sticky = TRUE
),
popup = ~precinct) %>%
addPolylines(
data = sido_sf,
weight = 5,
opacity = 1,
color = "black"
) %>%
addLegend(
pal = color_function,
values = ~차이,
labFormat = labelFormat(
prefix = "",
suffix = "%",
transform = function(x) 100 * x
),
opacity = 0.7,
title = "득표율 차이",
position = "bottomright"
)
library(htmlwidgets)
saveWidget(sgg_local_8_m, file="data/sgg_local_8_m.html", selfcontained = TRUE)
```
:::{.column-body-outset}
<iframe src="data/sgg_local_8_m.html" width="120%" height="800px"></iframe>
:::