인구수 문제 선거구

국회의원 선거구획정 인구수 문제 선거구 상·하한 초과

저자
소속

1 기준정보코드

중앙선거관리위원회 코드정보에서 다음 정보를 API로 불러올 수 있다.

  • getCommonSgCodeList: 선거코드 조회
  • getCommonGusigunCodeList: 구시군코드 조회
  • getCommonSggCodeList: 선거구코드 조회
  • getCommonPartyCodeList: 정당코드 조회
  • getCommonJobCodeList: 직업코드 조회
  • getCommonEduBckgrdCodeList: 학력코드 조회

1.1 선거코드

코드
library(tidyverse)
library(httr2)
library(httr)

##---------------------------------------------------------------- ---
##                      선거코드                                --
##---------------------------------------------------------------- ---

# 1. 선거코드 -------------------------
## 1.1. GET 요청 -------------------------

data_portal_election_code_request <-
  glue::glue("http://apis.data.go.kr/9760000/CommonCodeService/getCommonSgCodeList",
             "?resultType=json",
             "&numOfRows=1000",
             "&serviceKey={Sys.getenv('PORTAL_NEC_KEY')}")


election_code_list <- GET(data_portal_election_code_request) %>%
  content(as = "text") %>%
  jsonlite::fromJSON()

## 1.2. 데이터 정제 -------------------------
code_election <- election_code_list %>%
  pluck('getCommonSgCodeList') %>%
  pluck('item') %>%
  as_tibble() %>%
  janitor::clean_names(ascii = FALSE) %>%
  select(선거코드 = sg_id, 선거명 = sg_name, 선거구분 = sg_typecode)

code_election
#> # A tibble: 101 × 3
#>    선거코드 선거명               선거구분
#>    <chr>    <chr>                <chr>   
#>  1 19971218 제15대 대통령선거    0       
#>  2 19971218 대통령선거           1       
#>  3 20000413 제16대 국회의원선거  0       
#>  4 20000413 국회의원선거         2       
#>  5 20000413 비례대표국회의원선거 7       
#>  6 20021219 제16대 대통령선거    0       
#>  7 20021219 대통령선거           1       
#>  8 20040415 제17대 국회의원선거  0       
#>  9 20040415 국회의원선거         2       
#> 10 20040415 비례대표국회의원선거 7       
#> # ℹ 91 more rows

1.2 선거구

코드

sgg_resp <- GET(url = "http://apis.data.go.kr/9760000/CommonCodeService/getCommonGusigunCodeList", 
           query = list(             
             resultType='json',
             sgId='20220309',
             sdName='서울특별시',
             numOfRows='1000',
             pageNo='1',
             serviceKey=I(Sys.getenv('PORTAL_NEC_KEY'))))


sgg_code_list <- sgg_resp %>%
  content(as = "text") %>%
  jsonlite::fromJSON()

## 1.2. 데이터 정제 -------------------------
sgg_code <- sgg_code_list %>%
  pluck('getCommonGusigunCodeList') %>%
  pluck('item') %>%
  as_tibble() %>%
  janitor::clean_names(ascii=FALSE) |> 
  select(선거코드 = sg_id, 선거구명 = wiw_name, 시도명 = sd_name)

2 나무위키 데이터

코드
electroate20_tbl <- read_csv("data/제20대총선_선거구_획정.csv")
electroate21_tbl <- read_csv("data/제21대총선_선거구_획정.csv")

2.1 제20대

코드
library(ggbeeswarm)

electroate20_tbl |> 
ggplot(aes(x = "", y = 인구수)) + 
  geom_violin(trim=FALSE,fill="gray") + 
  geom_boxplot(width=0.1) + 
  geom_jitter() +
  # geom_beeswarm(method ="compactswarm", priority = "density") +
  theme_minimal() +
  labs(x = "전국 선거구",
       y = "선거구별 인구수") +
  scale_y_continuous(labels = scales::comma) +
  geom_hline(yintercept = 209209) +
  geom_hline(yintercept = 209209*2/3, linetype=2) +
  geom_hline(yintercept = 209209*4/3, linetype=2) 

2.2 제21대

코드
library(ggbeeswarm)

electroate21_tbl |> 
ggplot(aes(x = "", y = 인구수)) + 
  geom_violin(trim=FALSE,fill="gray") + 
  geom_boxplot(width=0.1) + 
  geom_jitter() +
  # geom_beeswarm(method ="compactswarm", priority = "density") +
  theme_minimal() +
  labs(x = "전국 선거구",
       y = "선거구별 인구수") +
  scale_y_continuous(labels = scales::comma) +
  geom_hline(yintercept = 204847) +
  geom_hline(yintercept = 204847*2/3, linetype=2) +
  geom_hline(yintercept = 204847*4/3, linetype=2) 

3 선관위

3.1 강원도 인구수

코드
library(rvest)

url <- "http://info.nec.go.kr/electioninfo/electionInfo_report.xhtml"

params <- list(
              "electionId"= "0000000000",
              "requestURI"= "/electioninfo/0000000000/cd/cdpb02.jsp",
              "topMenuId"= "CD",
              "secondMenuId"= "CDPB02",
              "menuId"= "CDPB02",
              "statementId"= "CDPB02_#3_2_1",
              "oldElectionType"= "1",
              "electionType"= "2",
              "electionName"= "20200415",
              "searchType"= "3",
              "electionCode"= "2",
              "cityCode"= "4900",
              "townCode"= "-1",
              "sggCityCode"= "-1",
              "x"= "48",
              "y"= "22")

electorate <- GET(url = url,
    query = params)

electorate_tables <- electorate |> 
  read_html() |> 
  html_nodes('.table01') |> 
  html_table()

electorate_tbl <- electorate_tables[[2]] |> 
  janitor::clean_names(ascii = FALSE) |> 
  filter(선거구명 != "합계",
         선거구명 != "")  |> 
  select(선거구명, 인구수 = 인구수_선거인명부작성기준일_현재,
         성별 = 확정선거인수, 선거인수 = 확정선거인수_2) |> 
  filter(성별 == "계") |> 
  ## 인구수 --------------------------
  separate(인구수, into = c("인구수", "재외및외국"), sep = "\\(") |> 
  separate(재외및외국, into = c("재외국민", "외국인"), sep = ",") |> 
  mutate(인구수   = parse_number(인구수),
         재외국민 = parse_number(재외국민),
         외국인 = parse_number(외국인)) |> 
  ## 선거인수 --------------------------
  separate(선거인수, into = c("선거인수", "선거인_재외및외국"), sep = "\\(") |> 
  separate(선거인_재외및외국, into = c("선거재외국민", "선거외국인"), sep = ",") |> 
  mutate(선거인수   = parse_number(선거인수),
         선거재외국민 = parse_number(선거재외국민),
         선거외국인 = parse_number(선거외국인))  |> 
  select(-성별)
  
electorate_tbl
#> # A tibble: 3 × 7
#>   선거구명 인구수 재외국민 외국인 선거인수 선거재외국민 선거외국인
#>   <chr>     <dbl>    <dbl>  <dbl>    <dbl>        <dbl>      <dbl>
#> 1 제주시갑 253218      617      0   208660          578          0
#> 2 제주시을 236224      517      0   191862          471          0
#> 3 서귀포시 181386      371      0   152676          330          0

3.2 함수

코드

get_electorate <- function(cityCode = "4900") { # 제주도
  
  url <- "http://info.nec.go.kr/electioninfo/electionInfo_report.xhtml"

  params <- list(
                "electionId"= "0000000000",
                "requestURI"= "/electioninfo/0000000000/cd/cdpb02.jsp",
                "topMenuId"= "CD",
                "secondMenuId"= "CDPB02",
                "menuId"= "CDPB02",
                "statementId"= "CDPB02_#3_2_1",
                "oldElectionType"= "1",
                "electionType"= "2",
                "electionName"= "20200415",
                "searchType"= "3",
                "electionCode"= "2",
                "cityCode"= cityCode,
                "townCode"= "-1",
                "sggCityCode"= "-1",
                "x"= "48",
                "y"= "22")
  
  electorate <- GET(url = url,
      query = params)
  
  electorate_tables <- electorate |> 
    read_html() |> 
    html_nodes('.table01') |> 
    html_table()
  
  electorate_tbl <- electorate_tables[[2]] |> 
    janitor::clean_names(ascii = FALSE) |> 
    filter(선거구명 != "합계",
           선거구명 != "")  |> 
    select(선거구명, 인구수 = 인구수_선거인명부작성기준일_현재,
           성별 = 확정선거인수, 선거인수 = 확정선거인수_2) |> 
    filter(성별 == "계") |> 
    ## 인구수 --------------------------
    separate(인구수, into = c("인구수", "재외및외국"), sep = "\\(") |> 
    separate(재외및외국, into = c("재외국민", "외국인"), sep = ",") |> 
    mutate(인구수   = parse_number(인구수),
           재외국민 = parse_number(재외국민),
           외국인 = parse_number(외국인)) |> 
    ## 선거인수 --------------------------
    separate(선거인수, into = c("선거인수", "선거인_재외및외국"), sep = "\\(") |> 
    separate(선거인_재외및외국, into = c("선거재외국민", "선거외국인"), sep = ",") |> 
    mutate(선거인수   = parse_number(선거인수),
           선거재외국민 = parse_number(선거재외국민),
           선거외국인 = parse_number(선거외국인))  |> 
    select(-성별)
    
  return(electorate_tbl)
}

get_electorate("4900")
#> # A tibble: 3 × 7
#>   선거구명 인구수 재외국민 외국인 선거인수 선거재외국민 선거외국인
#>   <chr>     <dbl>    <dbl>  <dbl>    <dbl>        <dbl>      <dbl>
#> 1 제주시갑 253218      617      0   208660          578          0
#> 2 제주시을 236224      517      0   191862          471          0
#> 3 서귀포시 181386      371      0   152676          330          0

3.3 제21대 총선

코드
sido_tbl <- tribble(~"sido_cd", ~"sido_nm",
                    '1100', "서울특별시", 
                    '2600', "부산광역시", 
                    '2700', "대구광역시", 
                    '2800', "인천광역시", 
                    '2900', "광주광역시", 
                    '3000', "대전광역시", 
                    '3100', "울산광역시", 
                    '5100', "세종특별자치시", 
                    '4100', "경기도", 
                    '4200', "강원도", 
                    '4300', "충청북도", 
                    '4400', "충청남도", 
                    '4500', "전라북도", 
                    '4600', "전라남도", 
                    '4700', "경상북도", 
                    '4800', "경상남도", 
                    '4900', "제주특별자치도")

electorate_raw <- sido_tbl |> 
  mutate(data = map(sido_cd, get_electorate))

electorate_2020_tbl <- electorate_raw |> 
  rename(시도코드 = sido_cd, 시도명 = sido_nm) |> 
  unnest(data)

electorate_2020_tbl |> 
  write_rds("data/electorate_2020_tbl.rds")

4 분석 시각화

4.1 선거구획정 표

코드
library(gt)
library(gtExtras)

electorate_2020_tbl <- 
  read_rds("data/electorate_2020_tbl.rds")

get_percentage <- function(dataframe) {
  pcnt_number <- dataframe |> 
    select(-비적정비율) |> 
    summarise_if(is.numeric, sum) |> 
    mutate(비적정비율 = (상한초과 + 하한미달) / (적정 + 상한초과 + 하한미달)) |> 
    pull(비적정비율)
  
  return(pcnt_number)
}

electorate_2020_gt_tbl <- electorate_2020_tbl |> 
  mutate(획정구 = case_when(인구수 > 204847*4/3 ~ "상한초과",
                         인구수 < 204847*2/3 ~ "하한미달",
                         TRUE ~ "적정")) |> 
  count(시도명, 획정구) |> 
  pivot_wider(names_from = 획정구, values_from = n, values_fill = 0)  |> 
  arrange(desc(상한초과)) |> 
  mutate(비적정비율 = (상한초과 + 하한미달) / (적정+상한초과 + 하한미달)) |> 
  arrange(desc(비적정비율))

electorate_2020_gt <- electorate_2020_gt_tbl |> 
  gt::gt() |> 
  gt_theme_538() |> 
  tab_options(
    heading.title.font.size = px(16L),
    column_labels.font.size = px(14L),
    table.font.size = px(12L)
  ) |>   
  cols_align(align = "center") |> 
  tab_header(
    title = md("제21대 국회의원 선거구획정 현황"),
    subtitle = md("중앙선거관리위원회 선거인수현황 통계")
  ) |> 
  fmt_percent(columns = 비적정비율, decimals = 1) |> 
  tab_spanner(
    label = "선거구 현황",
    columns = c(
      적정, 상한초과, 하한미달
    )
  )  |> 
  tab_footnote(
    footnote = md("선거구별 **271,716** 명 초과시"),
    locations = cells_column_labels(columns = 상한초과)
  )  |> 
  tab_footnote(
    footnote = md("선거구별 **136,565** 명 미달시"),
    locations = cells_column_labels(columns = 하한미달)
  ) |> 
  tab_style(
    style = cell_text(color = "red", size = px(13L), weight = "bold"),
    locations = cells_body(
      rows  = 상한초과 > 0,
      columns = 상한초과
    )
  ) |> 
  tab_style(
    style = cell_text(color = "blue", size = px(13L), weight = "bold"),
    locations = cells_body(
      rows  = 하한미달 > 0,
      columns = 하한미달
    )
  ) |> 
  ## 표 전체 합계 -------------------------------------
  grand_summary_rows(
    columns = c(적정, 상한초과, 하한미달),
    fns =  list(label = "선거구수", fn = "sum"),
    fmt = ~ fmt_integer(.),
    side = "top"
  ) |> 
  grand_summary_rows(
    columns = 비적정비율,
    fns =  list("선거구비율" = ~ get_percentage(electorate_2020_gt_tbl)),
    fmt = ~ fmt_percent(., decimals = 1),
    side = "top"
  )    

electorate_2020_gt
제21대 국회의원 선거구획정 현황
중앙선거관리위원회 선거인수현황 통계
시도명 선거구 현황 비적정비율
적정 상한초과1 하한미달2
선거구수 236 12 5
선거구비율 6.7%
전라북도 7 1 2 30.0%
경기도 51 8 0 13.6%
부산광역시 16 0 2 11.1%
전라남도 9 0 1 10.0%
충청남도 10 1 0 9.1%
인천광역시 12 1 0 7.7%
경상남도 15 1 0 6.2%
강원도 8 0 0 0.0%
경상북도 13 0 0 0.0%
광주광역시 8 0 0 0.0%
대구광역시 12 0 0 0.0%
대전광역시 7 0 0 0.0%
서울특별시 49 0 0 0.0%
세종특별자치시 2 0 0 0.0%
울산광역시 6 0 0 0.0%
제주특별자치도 3 0 0 0.0%
충청북도 8 0 0 0.0%
1 선거구별 271,716 명 초과시
2 선거구별 136,565 명 미달시
코드

# electorate_2020_gt |> 
#   gtsave("images/electorate_2020_gt.png")

4.2 조정 필요 선거구

코드
library(ggrepel)
extrafont::loadfonts()

electorate_2020_region <- electorate_2020_tbl |> 
  mutate(시도권역 = case_when(str_detect(시도명, "자치|강원") ~ "강원/제주/세종",
                              str_detect(시도명, "경상") ~ "경상남북",
                              str_detect(시도명, "전라") ~ "전라남북",
                              str_detect(시도명, "충청") ~ "충청남북",
                              TRUE ~ 시도명)) |>
  mutate(시도권역 = factor(시도권역, levels = c("서울특별시", "경기도", "광주광역시", "대구광역시", 
                                        "대전광역시", "부산광역시", "울산광역시", "인천광역시", 
                                        "경상남북", "전라남북", "충청남북", "강원/제주/세종"))) 

electorate_2020_region_issue <- electorate_2020_region |> 
  mutate(획정구 = case_when(인구수 > 204847*4/3 ~ "상한초과",
                         인구수 < 204847*2/3 ~ "하한미달",
                         TRUE ~ "적정")) |> 
  filter(획정구 != "적정")

electorate_2020_region_gg <-  electorate_2020_region |> 
  ggplot(aes(x = 인구수, y = 선거인수, color = 시도권역)) +
    geom_point(size = 0.7) +
    geom_smooth(method = "lm", se=FALSE, size=0.4) +
    geom_vline(xintercept = 204847) +
    geom_vline(xintercept = 204847*2/3, linetype=2) +
    geom_vline(xintercept = 204847*4/3, linetype=2)  +
    facet_wrap(~시도권역) +
    theme_minimal(base_family="MaruBrui") +
    theme(legend.position = "none") +
    labs(title = "제21대 국회의원 선거 시도별 인구 상·하한 초과·미달 선거구",
         x = "선거구 인구수",
         y = "선거구 선거인수") +
    scale_x_continuous(labels = scales::unit_format(unit = "만", scale = 1e-4, sep = "")) +
    scale_y_continuous(labels = scales::unit_format(unit = "만", scale = 1e-4, sep = "")) +
    geom_text_repel(data = electorate_2020_region_issue, aes(label = 선거구명),
                    size = 1.5, min.segment.length = 0, force = 0.5, max.overlaps=Inf,
                    color = "black") +
    geom_point(data = electorate_2020_region_issue, 
                    size = 1)

electorate_2020_region_gg

코드

# ragg::agg_jpeg("images/제21대_국회의원선거_인구수_조정선거구.png",
#               width = 10, height = 7, units = "in", res = 600)
# electorate_2020_region_gg
# dev.off()

5 시도별 선거구수

5.1 데이터

5.1.1 시도별 인구수

코드
library(tidyverse)
library(rvest)

namu_url <- "https://namu.wiki/w/%EB%8C%80%ED%95%9C%EB%AF%BC%EA%B5%AD/%EC%9D%B8%EA%B5%AC"

namu_html <- read_html(namu_url)

namu_lst <- namu_html |> 
  html_nodes("table") |> 
  html_table(header = TRUE)

avg_electorate <- 51392745 / 253

electorate_tbl <- namu_lst[[13]] |> 
  mutate(인구 = parse_number(인구),
         비율 = parse_number(비율)/100) |> 
  mutate(선거구수 = 인구/ avg_electorate)

electorate_tbl
#> # A tibble: 18 × 5
#>    순위  광역자치단체       인구   비율 선거구수
#>    <chr> <chr>             <dbl>  <dbl>    <dbl>
#>  1 1위   경기도         13618969 0.265     67.0 
#>  2 2위   서울특별시      9414093 0.183     46.3 
#>  3 3위   부산광역시      3306993 0.0643    16.3 
#>  4 4위   경상남도        3263251 0.0635    16.1 
#>  5 5위   인천광역시      2978749 0.058     14.7 
#>  6 6위   경상북도        2565674 0.0499    12.6 
#>  7 7위   대구광역시      2379602 0.0463    11.7 
#>  8 8위   충청남도        2126374 0.0414    10.5 
#>  9 9위   전라남도        1811554 0.0352     8.92
#> 10 10위  전라북도        1762021 0.0343     8.67
#> 11 11위  충청북도        1593931 0.031      7.85
#> 12 12위  강원특별자치도  1532617 0.0298     7.54
#> 13 13위  대전광역시      1445126 0.0281     7.11
#> 14 14위  광주광역시      1424818 0.0277     7.01
#> 15 15위  울산광역시      1106015 0.0215     5.44
#> 16 16위  제주특별자치도   676832 0.0132     3.33
#> 17 17위  세종특별자치시   386126 0.0075     1.90
#> 18 총합  총합           51392745 1        253

5.1.2 선거구

코드
library(readxl)

nec_raw <- read_excel("data/선거구수_및_정수현황.xlsx", skip = 5)

nec_tbl <- nec_raw |> 
  janitor::clean_names(ascii = FALSE) |> 
  select(1:2) |> 
  set_names(c("광역자치단체", "현선거구수"))

nec_tbl
#> # A tibble: 19 × 2
#>    광역자치단체   현선거구수
#>    <chr>          <chr>     
#>  1 합계           254       
#>  2 전국(비례대표) 1         
#>  3 서울특별시     49        
#>  4 부산광역시     18        
#>  5 대구광역시     12        
#>  6 인천광역시     13        
#>  7 광주광역시     8         
#>  8 대전광역시     7         
#>  9 울산광역시     6         
#> 10 세종특별자치시 2         
#> 11 경기도         59        
#> 12 강원도         8         
#> 13 충청북도       8         
#> 14 충청남도       11        
#> 15 전라북도       10        
#> 16 전라남도       10        
#> 17 경상북도       13        
#> 18 경상남도       16        
#> 19 제주특별자치도 3

5.1.3 결합

코드
electorate_table <- electorate_tbl |> 
  filter(순위 != "총합") |> 
  left_join(nec_tbl |> mutate(광역자치단체 = ifelse(str_detect(광역자치단체, "강원"), 
                                              "강원특별자치도", 광역자치단체))) |> 
  mutate(현선거구수 = parse_integer(현선거구수)) |> 
  mutate(차이 = round(현선거구수 - 선거구수, 1)) |> 
  janitor::adorn_totals(name = "합계")

electorate_table
#>  순위   광역자치단체     인구   비율   선거구수 현선거구수 차이
#>   1위         경기도 13618969 0.2650  67.044466         59 -8.0
#>   2위     서울특별시  9414093 0.1832  46.344392         49  2.7
#>   3위     부산광역시  3306993 0.0643  16.279909         18  1.7
#>   4위       경상남도  3263251 0.0635  16.064573         16 -0.1
#>   5위     인천광역시  2978749 0.0580  14.664006         13 -1.7
#>   6위       경상북도  2565674 0.0499  12.630489         13  0.4
#>   7위     대구광역시  2379602 0.0463  11.714480         12  0.3
#>   8위       충청남도  2126374 0.0414  10.467871         11  0.5
#>   9위       전라남도  1811554 0.0352   8.918052         10  1.1
#>  10위       전라북도  1762021 0.0343   8.674207         10  1.3
#>  11위       충청북도  1593931 0.0310   7.846721          8  0.2
#>  12위 강원특별자치도  1532617 0.0298   7.544880          8  0.5
#>  13위     대전광역시  1445126 0.0281   7.114173          7 -0.1
#>  14위     광주광역시  1424818 0.0277   7.014199          8  1.0
#>  15위     울산광역시  1106015 0.0215   5.444772          6  0.6
#>  16위 제주특별자치도   676832 0.0132   3.331959          3 -0.3
#>  17위 세종특별자치시   386126 0.0075   1.900850          2  0.1
#>  합계              - 51392745 0.9999 253.000000        253  0.2

5.2 시각화

5.2.1

코드
library(gt)
library(gtExtras)

electorate_diff_gt <- electorate_table |> 
  relocate(차이, .before = 현선거구수) |> 
  gt() |> 
  gt_theme_538() |> 
  tab_options(
    heading.title.font.size = px(16L),
    column_labels.font.size = px(14L),
    table.font.size = px(12L)
  ) |>   
  cols_align(align = "center") |> 
  tab_header(
    title = md("국회의원 선거구 시도별 적정 인구수"),
    subtitle = md("중앙선관위 선거구수 및 정수현황과 시도별 인구수")
  )  |> 
  fmt_integer(인구) |>
  fmt_number(선거구수, decimals = 1) |>   
  fmt_percent(비율, decimals = 1) |> 
  cols_align("center") |> 
  tab_spanner(label = "선거구수 비교",
              columns = c(선거구수, 차이, 현선거구수)) |> 
  ## 차이 색상표식 ---------------------
  tab_style(
    style = cell_text(color = "red", size = px(13L), weight = "bold"),
    locations = cells_body(
      rows  = 차이 > 0.5,
      columns = 차이
    )
  )  |> 
  tab_style(
    style = cell_text(color = "blue", size = px(13L), weight = "bold"),
    locations = cells_body(
      rows  = 차이 < -0.5,
      columns = 차이
    )
  )    

electorate_diff_gt
국회의원 선거구 시도별 적정 인구수
중앙선관위 선거구수 및 정수현황과 시도별 인구수
순위 광역자치단체 인구 비율 선거구수 비교
선거구수 차이 현선거구수
1위 경기도 13,618,969 26.5% 67.0 -8.0 59
2위 서울특별시 9,414,093 18.3% 46.3 2.7 49
3위 부산광역시 3,306,993 6.4% 16.3 1.7 18
4위 경상남도 3,263,251 6.3% 16.1 -0.1 16
5위 인천광역시 2,978,749 5.8% 14.7 -1.7 13
6위 경상북도 2,565,674 5.0% 12.6 0.4 13
7위 대구광역시 2,379,602 4.6% 11.7 0.3 12
8위 충청남도 2,126,374 4.1% 10.5 0.5 11
9위 전라남도 1,811,554 3.5% 8.9 1.1 10
10위 전라북도 1,762,021 3.4% 8.7 1.3 10
11위 충청북도 1,593,931 3.1% 7.8 0.2 8
12위 강원특별자치도 1,532,617 3.0% 7.5 0.5 8
13위 대전광역시 1,445,126 2.8% 7.1 -0.1 7
14위 광주광역시 1,424,818 2.8% 7.0 1.0 8
15위 울산광역시 1,106,015 2.1% 5.4 0.6 6
16위 제주특별자치도 676,832 1.3% 3.3 -0.3 3
17위 세종특별자치시 386,126 0.8% 1.9 0.1 2
합계 - 51,392,745 100.0% 253.0 0.2 253
코드

# chromote::default_chromote_object()

# electorate_diff_gt |>
#   gtsave(filename = "images/electorate_diff_gt.png")