Eduskuntavaalit 2019: ehdokkaiden top 3 kuntatasolla

Luokat: data analysis

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")

Katso myös

',