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/")
<- read_csv2("./vaalidata/ekv-2023_teat_maa.csv", col_names = FALSE)
dat <- dat %>%
dat_hel # 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_hel %>%
dat_alue # 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 %>% filter(rank == 1)
dat_alue_voittaja <- dat_alue %>%
dat_alue_top3 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"))
<- st_read(dsn = "./SHP/Aanestysaluejako_PKS_2023.shp", quiet = TRUE)
hel_aanestysalueet # hel_aanestysalueet <- st_read(dsn = "./SHP/Aanestysaluejako_PKS_2019.shp", quiet = TRUE)
<- 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")
hel_aanestysalueet
<- right_join(hel_aanestysalueet, dat_alue_top3, by = c("X5" = "X5"))
dat_kartta_top3 <- right_join(hel_aanestysalueet %>% select(-nimi), dat_alue_voittaja, by = c("X5" = "X5"))
dat_kartta_voittaja
#| column: page
library(tidyverse)
library(leaflet)
library(htmlwidgets)
library(glue)
library(sf)
<- leaflet::colorFactor(palette = "Set1", domain = factor(dat_kartta_voittaja$nimi))
pal
<- sprintf(
labels '<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>',
$X16, dat_kartta_top3$t1,
dat_kartta_top3$t2,
dat_kartta_top3$t3,
dat_kartta_top3$t4,
dat_kartta_top3$t5
dat_kartta_top3%>% lapply(htmltools::HTML)
)
leaflet(dat_kartta_voittaja) %>%
::setView(lng = 24.931,lat = 60.172, zoom = 12) %>%
leafletaddProviderTiles(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") %>%
::addFullscreenControl() leaflet.extras
[/kode]
library(tidyverse)
library(leaflet)
library(htmlwidgets)
library(glue)
library(sf)
<- read_csv2("./vaalidata/ekv-2023_teat_maa.csv", col_names = FALSE)
dat <- dat %>%
dat_hel # 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_hel %>%
dat_alue # 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 %>% filter(rank == 1)
dat_alue_voittaja <- dat_alue %>%
dat_alue_top3 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"))
<- st_read(dsn = "./SHP/Aanestysaluejako_PKS_2023.shp", quiet = TRUE)
hel_aanestysalueet # hel_aanestysalueet <- st_read(dsn = "./SHP/Aanestysaluejako_PKS_2019.shp", quiet = TRUE)
<- 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")
hel_aanestysalueet
<- right_join(hel_aanestysalueet, dat_alue_top3, by = c("X5" = "X5"))
dat_kartta_top3 <- right_join(hel_aanestysalueet %>% select(-nimi), dat_alue_voittaja, by = c("X5" = "X5"))
dat_kartta_voittaja
#| column: page
library(tidyverse)
library(leaflet)
library(htmlwidgets)
library(glue)
library(sf)
<- leaflet::colorFactor(palette = "Set1", domain = factor(dat_kartta_voittaja$nimi))
pal
<- sprintf(
labels '<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>',
$X16, dat_kartta_top3$t1,
dat_kartta_top3$t2,
dat_kartta_top3$t3,
dat_kartta_top3$t4,
dat_kartta_top3$t5
dat_kartta_top3%>% lapply(htmltools::HTML)
)
leaflet(dat_kartta_voittaja) %>%
::setView(lng = 24.931,lat = 60.172, zoom = 12) %>%
leafletaddProviderTiles(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") %>%
::addFullscreenControl() leaflet.extras
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/.