Eduskuntavaalit 2023: puolueiden ja ehdokkaiden kannatukset Helsingin äänestysalueilla

data analysis
R
election
vaalit2023
eduskuntavaalit2023
avoin data
open data
spatial
Tekijä

Markus Kainu

Julkaistu

15. huhtikuuta 2023

Alla olevassa kartassa esitetään 2023 vuoden eduskuntavaalien äänestysaluekohtaiset tulokset viiden suosituimman ehdokkaan osalta. Alueen väri merkitsee suosituinta ehdokasta. Siirtämällä osoittimen alueen päälle näet viiden suosituimmain ehdokkaan tulokset.

Tiedot on ladattavissa Oikeusministeriön vaalien tulospalvelusta.

</>
library(tidyverse)
library(leaflet)
library(htmlwidgets)
library(glue)
library(sf)
# dir.create("./vaalidata/", recursive = TRUE)
# download.file("https://tulospalvelu.vaalit.fi/EKV-2023/ekv-2023_ehd_maa.csv.zip", "./vaalidata/ekv-2023_ehd_maa.csv.zip")
# unzip(zipfile = "./vaalidata/ekv-2023_ehd_maa.csv.zip", exdir = "./vaalidata/")
dat <- read_csv2("./vaalidata/ekv-2023_ehd_maa.csv.zip", 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,X12,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:5) %>% 
  mutate(rank = 1:n()) %>% 
  ungroup() %>% 
  mutate(nimi = paste(X18,X19)) %>% 
  select(X5,X16,nimi,X12,X35,rank,osuus) %>% 
  arrange(X5,rank)

dat_alue_voittaja <- dat_alue %>% filter(rank == 1)
dat_alue_top3 <- dat_alue %>% 
  mutate(nimi = glue("<tr><td>{rank}</td><td>{nimi}</td><td>{X12}</td><td>{osuus}%</td><td>{X35}</td></tr>")) %>%
  select(-osuus,- X35,-X12) %>% 
  pivot_wider(names_from = rank, values_from = nimi) %>% 
  setNames(c("X5","X16","t1","t2","t3","t4","t5"))


hel_aanestysalueet <- st_read(dsn = "./SHP/Aanestysaluejako_PKS_2023.shp", quiet = TRUE)
# hel_aanestysalueet <- st_read(dsn = "./SHP/Aanestysaluejako_PKS_2019.shp", quiet = TRUE)
hel_aanestysalueet <- st_transform(hel_aanestysalueet, crs = 4326)
hel_aanestysalueet$X5 <- paste0("0", hel_aanestysalueet$tunnus)

hel_aanestysalueet$X5 <- stringr::str_pad(hel_aanestysalueet$tunnus, width = 4, pad = "0")


dat_kartta_top3 <- right_join(hel_aanestysalueet, dat_alue_top3, by = c("X5" = "X5"))
dat_kartta_voittaja <- right_join(hel_aanestysalueet %>% select(-nimi), dat_alue_voittaja, by = c("X5" = "X5"))

#| column: page
library(tidyverse)
library(leaflet)
library(htmlwidgets)
library(glue)
library(sf)
pal <- leaflet::colorFactor(palette = "Set1", domain = factor(dat_kartta_voittaja$nimi))

labels <- sprintf(
  '<div class="card" style="width: auto;">
  <div class="card-body">
    <h5 class="card-title">%s</h5>
  <table class="table table-sm">
  <thead>
    <tr>
      <th scope="col">sija</th>
      <th scope="col">nimi</th>
      <th scope="col">puolue</th>
      <th scope="col">kannatus</th>
      <th scope="col">äänet</th>
    </tr>
  </thead>
  <tbody>
  %s
  %s
  %s
  %s
  %s
  </tbody>
</table>
  </div>
</div>',
  dat_kartta_top3$X16, dat_kartta_top3$t1, 
dat_kartta_top3$t2, 
dat_kartta_top3$t3, 
dat_kartta_top3$t4, 
dat_kartta_top3$t5
) %>% lapply(htmltools::HTML)

leaflet(dat_kartta_voittaja) %>% 
  leaflet::setView(lng = 24.931,lat = 60.172, zoom = 12) %>%
  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",
                                                       "font-family" = "Courier New",
                                                       "padding" = "0px"),
                                          textsize = "12px",
                                          direction = "auto")
  ) %>% 
  addLegend(pal = pal, values = ~nimi, opacity = 0.7, title = "Äänestysalueen suosituin ehdokas",
            position = "bottomright") %>% 
  leaflet.extras::addFullscreenControl()

Uudelleenkäyttö

CC BY 4.0

Viittaus

BibTeX-viittaus:
@online{kainu,
  author = {Markus Kainu and Markus Kainu},
  title = {Eduskuntavaalit 2023: puolueiden ja ehdokkaiden kannatukset
    Helsingin äänestysalueilla},
  date = {},
  url = {https://markuskainu.fi/posts/2023-04-02-helsingin_aanestysalueet},
  langid = {fi}
}
Viitatkaa tähän teokseen seuraavasti:
Markus Kainu, and Markus Kainu. n.d. “Eduskuntavaalit 2023: puolueiden ja ehdokkaiden kannatukset Helsingin äänestysalueilla.” https://markuskainu.fi/posts/2023-04-02-helsingin_aanestysalueet.