Eduskuntavaalit 2019: Suosituimmat puolueet kunnittain 2011, 2015 ja 2019

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

8. toukokuuta 2019

Lounaalla tuli puhetta siitä, miten puolueiden kannatus on kehittynyt kunnissa kolmissa viime eduskuntavaaleissa ja että olisiko sellaista karttaa. Tässä sellainen kartta JA lähdeokoodi sen tekemiseen tuossa alla!

Lähdekoodi

[/kode]
library(tidyverse)
library(leaflet)
library(htmlwidgets)
library(glue)
library(sf)

# 2019
flie <- tempfile()
download.file("https://tulospalvelu.vaalit.fi/EKV-2019/ekv-2019_puo_maa.csv.zip", flie)
tmpdir <- tempdir()
unzip(zipfile = flie, exdir = tmpdir)
dat <- read_csv2(glue("{tmpdir}/ekv-2019_tpat_maa.csv"), col_names = FALSE)
dat19 <- dat %>% 
  filter(grepl("\\*", X5),
         !grepl("\\*", X3)) %>% 
    # äänimäärä ja ehdokasnumero kokonaisluvuiksi
  mutate(X3 = as.integer(X3),
         X35 = as.integer(X35),
         X39 = as.integer(X39),
         X40 = as.integer(X40),
         X41 = as.integer(X41)) %>% 
  # vaalipiirit veks
  filter(!is.na(X3)) %>% 
  # Merkistöenkoodaukset
  mutate(
    X17 = iconv(x = X17, from = "Windows-1252", to = "UTF-8"),
    X11 = iconv(x = X11, from = "Windows-1252", to = "UTF-8"),
    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"),
    X15 = iconv(x = X15, from = "Windows-1252", to = "UTF-8"),
    X14 = iconv(x = X14, from = "Windows-1252", to = "UTF-8"),
    X12 = iconv(x = X12, from = "Windows-1252", to = "UTF-8")
    ) %>% 
  select(X3,X6,X11,X14,X16,X39,X40,X41) %>% 
  # filter(X14 == "Helsinki") %>% 
  group_by(X3,X14) %>% 
  mutate(osuus = round(X41 / sum(X41) * 100,1)) %>% 
  arrange(desc(osuus)) %>% 
  slice(1:3) %>% 
  mutate(rank = 1:n()) %>% 
  ungroup() %>% 
  select(X14,rank,X16,osuus)
  # filter(X14 == "Honkajoki") %>% arrange(desc(osuus))

# 2015
flie <- tempfile()
download.file("https://tulospalvelu.vaalit.fi/E-2015/e-2015_puo_maa.csv.zip", flie)
tmpdir <- tempdir()
unzip(zipfile = flie, exdir = tmpdir)
# list.files(tmpdir)
dat <- read_csv2(glue("{tmpdir}/e-2015_tpat_maa.csv"), col_names = FALSE)
dat15 <- dat %>% 
  filter(grepl("\\*", X5),
         !grepl("\\*", X3)) %>% 
    # äänimäärä ja ehdokasnumero kokonaisluvuiksi
  mutate(X3 = as.integer(X3),
         X35 = as.integer(X35),
         X39 = as.integer(X39),
         X40 = as.integer(X40),
         X41 = as.integer(X41)) %>% 
  # vaalipiirit veks
  filter(!is.na(X3)) %>% 
  # Merkistöenkoodaukset
  mutate(
    X17 = iconv(x = X17, from = "Windows-1252", to = "UTF-8"),
    X11 = iconv(x = X11, from = "Windows-1252", to = "UTF-8"),
    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"),
    X15 = iconv(x = X15, from = "Windows-1252", to = "UTF-8"),
    X14 = iconv(x = X14, from = "Windows-1252", to = "UTF-8"),
    X12 = iconv(x = X12, from = "Windows-1252", to = "UTF-8")
    ) %>% 
  select(X3,X6,X11,X14,X16,X39,X40,X41) %>% 
  # filter(X14 == "Helsinki") %>% 
  group_by(X3,X14) %>% 
  mutate(osuus = round(X41 / sum(X41) * 100,1)) %>% 
  arrange(desc(osuus)) %>% 
  slice(1:3) %>% 
  mutate(rank = 1:n()) %>% 
  ungroup() %>%
  select(X14,rank,X16,osuus)
  # filter(X14 == "Honkajoki") %>% arrange(desc(osuus))

  
# 2011
flie <- tempfile()
download.file("https://tulospalvelu.vaalit.fi/EKV-2011/e-2011_puo_maa.csv.zip", flie)
tmpdir <- tempdir()
unzip(zipfile = flie, exdir = tmpdir)
# list.files(tmpdir)
dat <- read_csv2(glue("{tmpdir}/e-2011_tpat_maa.csv"), col_names = FALSE)
dat11 <- dat %>% 
  filter(grepl("\\*", X5),
         !grepl("\\*", X3)) %>% 
    # äänimäärä ja ehdokasnumero kokonaisluvuiksi
  mutate(X3 = as.integer(X3),
         X35 = as.integer(X35),
         X39 = as.integer(X39),
         X40 = as.integer(X40),
         X41 = as.integer(X41)) %>% 
  # vaalipiirit veks
  filter(!is.na(X3)) %>% 
  # Merkistöenkoodaukset
  mutate(
    X17 = iconv(x = X17, from = "Windows-1252", to = "UTF-8"),
    X11 = iconv(x = X11, from = "Windows-1252", to = "UTF-8"),
    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"),
    X15 = iconv(x = X15, from = "Windows-1252", to = "UTF-8"),
    X14 = iconv(x = X14, from = "Windows-1252", to = "UTF-8"),
    X12 = iconv(x = X12, from = "Windows-1252", to = "UTF-8")
    ) %>% 
  select(X3,X6,X11,X14,X16,X39,X40,X41) %>% 
  # filter(X14 == "Helsinki") %>% 
  group_by(X3,X14) %>% 
  mutate(osuus = round(X41 / sum(X41) * 100,1)) %>% 
  arrange(desc(osuus)) %>% 
  # slice(1:3) %>% 
  mutate(rank = 1:n()) %>% 
  ungroup() %>%
  select(X14,rank,X16,osuus)


names(dat11) <- c("kunta","rank","puolue","osuus")
names(dat15) <- c("kunta","rank","puolue","osuus")
names(dat19) <- c("kunta","rank","puolue","osuus")

dat <- bind_rows(dat11 %>% mutate(vuosi = 2011), 
                 dat15 %>% mutate(vuosi = 2015),
                 dat19 %>% mutate(vuosi = 2019))

dat %>% 
  mutate(pl = case_when(
    puolue == "Vihreä liitto" ~ "VIHR",
    puolue == "Vasemmistoliitto" ~ "VAS",
    puolue == "Suomen Sosialidemokraattinen Puolue" ~ "SDP",
    puolue == "Suomen ruotsalainen kansanpuolue" ~ "RKP",
    puolue == "Suomen Kristillisdemokraatit (KD)" ~ "KD",
    puolue == "Suomen Keskusta" ~ "KESK",
    puolue == "Sininen tulevaisuus" ~ "SIN",
    puolue == "Perussuomalaiset" ~ "PS",
    puolue == "Kansallinen Kokoomus" ~ "KOK",
    puolue == "Åländsk samling" ~ "Åländsk samling",
    puolue == "Åländsk samling gemensam lista" ~ "Åländsk samling gemensam lista",
    puolue == "Alternativ för Åland - gemensam lista" ~ "Alternativ för Åland - gemensam lista",
    puolue == "Gemensam lista Alliansen för Åland - samarbete för självstyrelse och utveckling" ~ "Gemensam lista Alliansen för Åland - samarbete för självstyrelse och utveckling",
    grepl("Jessica", puolue) ~ "Jessica Eckerman",
    puolue == "Liberalerna på Åland" ~ "Liberalerna på Åland",
    puolue == "Markus Kuotesaho" ~ "Markus Kuotesaho",
    TRUE ~ "muut"
  )) %>% 
  mutate(label1 = glue("{rank}. {pl} {osuus} %")) %>% 
  select(-pl,-puolue,-osuus) %>% 
  spread(rank,label1) %>% 
  mutate(label = glue("{vuosi}: {`1`}, {`2`}, {`3`}")) %>%
  select(-`1`,-`2`,-`3`) %>%
  spread(vuosi,label) -> dat_label

# kuntarajat
kunnat19 <- readRDS(url("https://gitlab.com/muuankarski/kelagis_data/raw/master/rds/sf19.RDS"))
kunnat19 <- st_transform(x = kunnat19, crs = "+proj=longlat +init=epsg:3067")

dat_kartta_voittaja <- left_join(kunnat19, dat %>% filter(vuosi == 2019, rank == 1), 
                                 by = c("NAMEFIN" = "kunta"))
dat_kartta_top3 <- left_join(kunnat19, dat_label, by = c("NAMEFIN" = "kunta"))

pal <- leaflet::colorFactor(palette = "Set1", domain = dat_kartta_voittaja$puolue)

labels <- sprintf(
  "<b>%s</b><br/>%s<br/>%s><br/>%s",
  dat_kartta_top3$NAMEFIN,
  dat_kartta_top3$`2019`, 
  dat_kartta_top3$`2015`, 
  dat_kartta_top3$`2011`
) %>% lapply(htmltools::HTML)

leaflet(dat_kartta_voittaja) %>% 
  addProviderTiles(provider = providers$CartoDB.Positron) %>% 
  addPolygons(fillColor = ~pal(puolue),
              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 = ~puolue, opacity = 0.7, title = "Kunnan suosituin puolue 2019",
            position = "bottomright")

Uudelleenkäyttö

Viittaus

BibTeX-viittaus:
@online{kainu2019,
  author = {Kainu, Markus},
  title = {Eduskuntavaalit 2019: Suosituimmat puolueet kunnittain 2011,
    2015 ja 2019},
  date = {2019-05-08},
  url = {https://markuskainu.fi/posts/2019-05-08-kuntien-top-puolueet-2011-2015-2019/},
  langid = {fi}
}
Viitatkaa tähän teokseen seuraavasti:
Kainu, Markus. 2019. “Eduskuntavaalit 2019: Suosituimmat puolueet kunnittain 2011, 2015 ja 2019.” May 8, 2019. https://markuskainu.fi/posts/2019-05-08-kuntien-top-puolueet-2011-2015-2019/.