Eduskuntavaalit 2019: ehdokkaiden top 3 kuntatasolla

data analysis
Author

Markus Kainu

Published

April 16, 2019

Kuntakohtaiset mitalisijat vuoden 2019 eduskuntavaaleissa. Alueen väri kertoo eniten ääniä saaneen puolueen. Siirrä osoitin kunnan päälle nähdäksesi kolme eniten ääniä saanutta! Lähdekoodi kartan alla!

Lähdekoodi

</>
library(tidyverse)
library(leaflet)
library(htmlwidgets)
library(glue)
library(sf)
flie <- tempfile()
download.file("https://tulospalvelu.vaalit.fi/EKV-2019/ekv-2019_ehd_maa.csv.zip", flie)
tmpdir <- tempdir()
unzip(zipfile = flie, exdir = tmpdir)
dat <- read_csv2(glue("{tmpdir}/ekv-2019_aea_maa.csv"), col_names = FALSE)
dat_kunnat <- dat %>% 
  filter(grepl("\\*", X5)) %>%
  # äänimäärä ja ehdokasnumero kokonaisluvuiksi
  mutate(X3 = as.integer(X3),
         X35 = as.integer(X35),
         X15 = as.integer(X15)) %>% 
  # vaalipiirit veks
  filter(!is.na(X3)) %>% 
  # Merkistöenkoodaukset
  mutate(X19 = iconv(x = X19, from = "Windows-1252", to = "UTF-8"),
         X18 = iconv(x = X18, from = "Windows-1252", to = "UTF-8"),
         X16 = iconv(x = X16, from = "Windows-1252", to = "UTF-8"),
         X12 = iconv(x = X12, from = "Windows-1252", to = "UTF-8")) %>%
  # filter(X3 == 924) %>% 
  select(X3,X5,X6,X12,X15,X16,X18,X19,X35)


dat_alue <- dat_kunnat %>%   
  # lasketaan kuntakohtaiset summat
  group_by(X3) %>% 
  mutate(X35_summa = sum(X35, na.rm = TRUE)) %>%
  ungroup() %>% 
  # Lasketaan kullekin uurnalla ja ehdokkaalle ääniosuus
  mutate(osuus = round(X35 / X35_summa*100, 1)) %>% 
  group_by(X3,X16) %>% 
  arrange(desc(osuus)) %>% 
  slice(1:3) %>% 
  mutate(rank = 1:n()) %>% 
  ungroup() %>% 
  mutate(nimi = paste(X18,X19)) %>% 
  select(X3,X16,nimi,X12,X35,rank,osuus) %>% 
  arrange(X3,rank)

# puoluekohtaiset kannatukset

dat_puoluekannatus <- dat_kunnat %>%   
  # lasketaan kuntakohtaiset summat
  group_by(X3) %>% 
  mutate(X35_summa = sum(X35, na.rm = TRUE)) %>%
  ungroup() %>% 
  # lasketaan puoluekohtaiset äänet kussakin kunnassa
  group_by(X3,X12) %>% 
  mutate(puolue_aanet = sum(X35, na.rm = TRUE)) %>%
  ungroup() %>%
  # valitaan yksi rivi per kunta ja puolue
  distinct(X3,X12, .keep_all = TRUE) %>% 
  select(X3,X12,X16,puolue_aanet,X35_summa) %>%
  arrange(desc(puolue_aanet)) %>% 
  # Lasketaan kullekin uurnalla ja ehdokkaalle ääniosuus
  mutate(osuus = round(puolue_aanet / X35_summa*100, 1)) %>% 
  group_by(X3,X16) %>% 
  arrange(desc(osuus)) %>% 
  slice(1) %>% 
  mutate(rank = 1:n()) %>% 
  ungroup() %>% 
  arrange(X16,rank)


dat_alue_voittaja <- dat_alue %>% filter(rank == 1)
dat_alue_top3 <- dat_alue %>% 
  mutate(nimi = glue("{nimi} {X12} {osuus} % {X35} ääntä")) %>%
  select(-osuus,-X35,-X12) %>% 
  spread(key = rank, value = nimi) %>% 
  setNames(c("X3","X16","t1","t2","t3"))


dat_kartta_top3 <- left_join(kunnat19, dat_alue_top3, by = c("NATCODE" = "X3"))
dat_kartta_voittaja <- left_join(kunnat19, dat_alue_voittaja, by = c("NATCODE" = "X3"))
dat_kartta_puolue <- left_join(kunnat19, dat_puoluekannatus, by = c("NATCODE" = "X3"))

pal <- leaflet::colorFactor(palette = "Set3", domain = factor(dat_kartta_puolue$X12))

labels <- sprintf(
  "<italic>%s</italic><br/><strong>1. %s</strong><br/>2. %s<br/>3. %s<br/>",
  dat_kartta_top3$NAMEFIN, dat_kartta_top3$t1, dat_kartta_top3$t2, dat_kartta_top3$t3
) %>% lapply(htmltools::HTML)

leaflet(dat_kartta_voittaja) %>% 
  addProviderTiles(provider = providers$CartoDB.Positron) %>% 
  addPolygons(fillColor = ~pal(factor(X12)),
              color = "white",
              weight = 1,
              opacity = 1,
              dashArray = "3",
              fillOpacity = 0.4,
              highlight = highlightOptions(
                weight = 2,
                color = "#666",
                dashArray = "",
                fillOpacity = 0.4,
                bringToFront = TRUE),
              label = labels,
              labelOptions = labelOptions(opacity = .7,
                                          style = list("font-weight" = "normal",
                                                       padding = "2px 4px"),
                                          textsize = "12px",
                                          direction = "auto")
  ) %>% 
  addLegend(pal = pal, values = ~X12, opacity = 0.7, title = "Kunnan suosituin puolue",
            position = "bottomright")

Reuse

CC BY 4.0

Citation

BibTeX citation:
@online{kainu2019,
  author = {Markus Kainu},
  editor = {},
  title = {Eduskuntavaalit 2019: Ehdokkaiden Top 3 Kuntatasolla},
  date = {2019-04-16},
  url = {https://markuskainu.fi/posts/2019-04-16-kuntien-top3-ehdokkaat},
  langid = {en}
}
For attribution, please cite this work as:
Markus Kainu. 2019. “Eduskuntavaalit 2019: Ehdokkaiden Top 3 Kuntatasolla.” April 16, 2019. https://markuskainu.fi/posts/2019-04-16-kuntien-top3-ehdokkaat.