Eduskuntavaalit 2019: ehdokkaiden top 3 kuntatasolla

data analysis
R
election
vaalit2019
eduskuntavaalit2019
avoin data
open data
spatial
dataviz
Tekijä

Markus Kainu

Julkaistu

16. huhtikuuta 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")

Uudelleenkäyttö

CC BY 4.0

Viittaus

BibTeX-viittaus:
@online{kainu,
  author = {Markus Kainu},
  title = {Eduskuntavaalit 2019: ehdokkaiden top 3 kuntatasolla},
  date = {},
  url = {https://markuskainu.fi/posts/2019-04-16-kuntien-top3-ehdokkaat},
  langid = {fi}
}
Viitatkaa tähän teokseen seuraavasti:
Markus Kainu. n.d. “Eduskuntavaalit 2019: ehdokkaiden top 3 kuntatasolla.” https://markuskainu.fi/posts/2019-04-16-kuntien-top3-ehdokkaat.