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.
[/kode]
library(tidyverse)
library(leaflet)
library(htmlwidgets)
library(glue)
library(sf)
# dir.create("./vaalidata2/", 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_teat_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,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()[/kode]
library(tidyverse)
library(leaflet)
library(htmlwidgets)
library(glue)
library(sf)
dat <- read_csv2("./vaalidata/ekv-2023_teat_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,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(aa_alue_sum = sum(X35, na.rm = TRUE)) %>%
  ungroup() %>% 
  # Lasketaan kullekin uurnalla ja ehdokkaalle ääniosuus
  group_by(X5,X16,X12) %>%
  mutate(osuus = round(X35 / aa_alue_sum*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ö
Viittaus
BibTeX-viittaus:
@online{kainu2023,
  author = {Kainu, Markus},
  title = {Eduskuntavaalit 2023: puolueiden ja ehdokkaiden kannatukset
    Helsingin äänestysalueilla},
  date = {2023-04-15},
  url = {https://markuskainu.fi/posts/2023-04-02-helsingin_aanestysalueet/},
  langid = {fi}
}
Viitatkaa tähän teokseen seuraavasti:
Kainu, Markus. 2023. “Eduskuntavaalit 2023: puolueiden ja
ehdokkaiden kannatukset Helsingin äänestysalueilla.” April 15,
2023. https://markuskainu.fi/posts/2023-04-02-helsingin_aanestysalueet/.