Eduskuntavaalit 2019: ehdokkaiden top 3 kuntatasolla

data analysis
R
election
vaalit2019
eduskuntavaalit2019
avoin data
open data
spatial
dataviz
Tekijä
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

[/kode]
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ö

Viittaus

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