Eduskuntavaalit 2019: Helsingin äänestysalueiden top 3

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

15. huhtikuuta 2019

Äänestysaluekohtaiset mitalisijat Helsingissä 2019 eduskuntavaaleissa. Alueen väri kertoo voittajan, siirrä osoitin alueen päälle nähdäksesi kolme parasta. Lähdekoodi kartan alla!

Reading layer `Aanestysaluejako_PKS_2019' from data source 
  `/home/aurelius/btsync/web/markuskainu22/posts/2019-04-15-helsingin_aanestysalueet-top3/SHP/Aanestysaluejako_PKS_2019.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 303 features and 14 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: 25472300 ymin: 6659096 xmax: 25514070 ymax: 6698783
Projected CRS: ETRS89_ETRS_GK25FIN_2010

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_hel <- dat %>% 
  # valitaan vaan Helsingin äänet JA 
  filter(X6 == "HEL", 
         # ainoastaan äänestyspaikkakohtaiset tiedot
         !grepl("\\*", X5),
         nchar(X5) == 4) %>% 
  select(X5,X6,X15,X16,X18,X19,X35) %>%
  # 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"),
         # äänimäärä ja ehdokasnumero kokonaisluvuiksi
         X35 = as.integer(X35),
         X15 = as.integer(X15)) 

dat_alue <- dat_hel %>%   
  # lasketaan uurnakohtaiset summat
  group_by(X5) %>% 
  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(X5,X16) %>% 
  arrange(desc(osuus)) %>% 
  slice(1:3) %>% 
  mutate(rank = 1:n()) %>% 
  ungroup() %>% 
  mutate(nimi = paste(X18,X19)) %>% 
  select(X5,X16,nimi,X35,rank,osuus) %>% 
  arrange(X5,rank)

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

# äänestysalueet
hel_aanestysalueet <- readRDS(url("https://gitlab.com/muuankarski/kelagis_data/raw/master/rds/sf17_hel_aanestysalue.RDS"))

dat_kartta_top3 <- left_join(hel_aanestysalueet, dat_alue_top3, by = c("tunnus" = "X5"))
dat_kartta_voittaja <- left_join(hel_aanestysalueet, dat_alue_voittaja, by = c("tunnus" = "X5"))

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

labels <- sprintf(
  "<italic>%s</italic><br/><strong>1. %s</strong><br/>2. %s<br/>3. %s<br/>",
  dat_kartta_top3$nimi_fi, 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(nimi)),
              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 = ~nimi, opacity = 0.7, title = "Äänestysalueen suosituin ehdokas",
            position = "bottomright")

Uudelleenkäyttö

Viittaus

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