Oikeusministeriön vaalien tulospalvelusta on ladattavissa ensimmäisen kierroksen tulosdatat. Alla kartta jossa kunnan väri kertoo suosituimman ehdokkaan ja siirtämällä osoittimen äänestysalueen päälle näet kuvan ehdokkaiden kannatuksesta sekä kyseisellä äänestysalueella että sen naapureissa. Äänestysalueiden rajat https://kartta.hel.fi/avoindata/2024_PKS_aanestysaluejako.zip.
[/kode]
if (!file.exists("./2024-pressa-kierros-I-helsinki.RData")){
library(tidyverse)
library(leaflet)
library(htmlwidgets)
library(glue)
library(sf)
# 2024
<- "tpv-2024_1_ehd_maa.csv.zip"
flie <- "https://tulospalvelu.vaalit.fi/TPV-2024_1/tpv-2024_1_ehd_maa.csv.zip"
urli download.file(urli, flie)
unzip(zipfile = flie, exdir = "./")
# fs::dir_ls(tmpdir)
<- read_csv2("./tpv-2024_1_aea_maa.csv", col_names = FALSE)
dat <- dat %>%
dat23 filter(X3 == "091") %>%
# äänimäärä ja ehdokasnumero kokonaisluvuiksi
mutate(X3 = as.integer(X3),
X35 = as.integer(X35),
X38 = as.integer(X38),
tunnus = gsub("^0+", "", X5)
%>%
) # vaalipiirit veks
filter(!is.na(X3)) %>%
# Merkistöenkoodaukset
mutate(
X16 = iconv(x = X16, from = "Windows-1252", to = "UTF-8"),
X17 = iconv(x = X17, 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"),
%>%
) select(X5,tunnus,X16,X18,X19,X35) %>% #print(n = 100)
mutate(ehdokas = paste0(X18," ", X19)) %>%
group_by(tunnus) %>%
mutate(osuus = round(X35 / sum(X35) * 100,1)) %>%
arrange(desc(osuus)) %>%
mutate(rank = 1:n()) %>%
ungroup() %>%
select(tunnus,X16,ehdokas,X35,osuus,rank)
<- "2024_PKS_aanestysaluejako.zip"
flie <- "https://kartta.hel.fi/avoindata/2024_PKS_aanestysaluejako.zip"
urli download.file(urli, flie)
unzip(zipfile = flie, exdir = "./")
::dir_ls("./", recurse = T) %>%
fsgrepl("shp", .)] -> shp_path
.[<- st_read(dsn = shp_path, quiet = TRUE)
hel_aan <- st_transform(hel_aan, crs = 3067) %>%
hel_aan # kalasatama
mutate(nimi = ifelse(nimi == "KALASTATAMA A", "KALASATAMA A", nimi),
nimi = ifelse(nimi == "KALASTATAMA B", "KALASATAMA B", nimi)
)
<- dat23 %>%
levelit_ehdokas group_by(ehdokas) %>%
summarise(X35 = sum(X35)) %>%
arrange(desc(X35)) %>%
pull(ehdokas)
<- right_join(hel_aan, dat23)
dat_kartta
# tehdään png-kuvat labeleihin
# fs::dir_create("../../images/png_labs_vaalit2023")
<- unique(dat23$tunnus)
kuntanimet for (i in seq(kuntanimet)){
print(paste0(i,"/",length(kuntanimet)))
<- hel_aan %>% filter(tunnus == kuntanimet[i])
this_muni <- dat23$X16[i]
this_nimi
<- sf::st_intersection(hel_aan,this_muni) %>%
naapurikunnat ::st_drop_geometry() %>%
sfcount(tunnus) %>% pull(tunnus)
if (length(naapurikunnat) == 0) next()
<- hel_aan %>%
naapurikunnat_shape filter(tunnus %in% naapurikunnat)
# naapurikunnat_nimet <- naapurikunnat_shape$nimi
<- dat23[dat23$tunnus %in% naapurikunnat,]
dat_tmp
<- dat_tmp %>% filter(tunnus == kuntanimet[i]) %>% arrange(desc(X35)) %>% pull(ehdokas)
levelit_ehdokas
$ehdokas <- factor(dat_tmp$ehdokas,
dat_tmplevels = levelit_ehdokas)
<- unique(dat_tmp[dat_tmp$tunnus %in% naapurikunnat,]$X16)
aluenimet
<- c(this_nimi, aluenimet[!aluenimet %in% this_nimi]) |> rev()
levelit_kunta $X16 <- factor(dat_tmp$X16, levels = levelit_kunta)
dat_tmp$nimi <- factor(naapurikunnat_shape$nimi, levels = toupper(levelit_kunta)) |> rev()
naapurikunnat_shape
<- ggplot(data = dat_tmp,
p aes(x = osuus, y =X16, fill = X16)) +
geom_col() +
geom_text(aes(x = 15, label = paste0(osuus, "%")), family = "Space Mono", size = 2.5) +
facet_wrap(~ehdokas) +
# hrbrthemes::scale_fill_ipsum() + #scale_fill_brewer(palette = "Set1") +
::theme_ipsum_rc(base_size = 9, grid = "XY", plot_title_size = 18, strip_text_size = 8,
hrbrthemesbase_family = "Space Mono") +
theme(legend.position = "none",
plot.margin = unit(c(1,1,1,1), "mm"),
legend.key.size = unit(4, "mm"),
plot.background = element_rect(fill = "transparent", color = NA),
panel.background = element_rect(fill = "transparent", color = NA)) +
labs(y = NULL, x = "kannatus (%)") +
theme(panel.spacing = unit(0.1, "mm"))
<- ggplot(naapurikunnat_shape, aes(label = nimi, fill = nimi)) + geom_sf() +
p1 geom_sf_text(family = "Space Mono", size = 2.5) +
::theme_ipsum_rc(base_size = 9, grid_col = "white",
hrbrthemesplot_title_size = 18,
base_family = "Space Mono") +
theme(axis.title.x = element_blank(),
axis.title.y = element_blank(),
axis.text.x = element_blank(),
axis.text.y = element_blank(),
legend.position = "none")
<- patchwork::wrap_plots(p,p1, widths = c(0.55,.45)) + patchwork::plot_annotation(
pp title = paste0(this_nimi, " ja naapurialueet"),
subtitle = "Ehdokkaat järjestetty äänestysalueen\nkokonaisäänimäärän mukaan",
theme = hrbrthemes::theme_ipsum_rc(base_size = 9, grid_col = "white",
plot_title_size = 18,
base_family = "Space Mono")
)
# p
ggsave(filename = glue("./png_labs/{kuntanimet[i]}.png"), plot = pp, width = 9, height = 7, dpi = 120)
}
save.image(file = "./2024-pressa-kierros-I-helsinki.RData")
}
library(tidyverse)
library(leaflet)
library(htmlwidgets)
library(glue)
library(sf)
load(file = "2024-pressa-kierros-I-helsinki.RData")
<- dat_kartta %>%
dat_alue # lasketaan kuntakohtaiset summat
group_by(tunnus) %>%
filter(osuus == max(osuus, na.rm = FALSE)) %>%
ungroup() %>%
select(tunnus,X16,ehdokas,osuus,X35,rank) %>%
::st_transform(4326)
sf
# puoluekohtaiset kannatukset
library(tidyverse)
library(leaflet)
library(htmlwidgets)
library(glue)
library(sf)
<- leaflet::colorFactor(palette = "Set1", domain = factor(dat_alue$ehdokas))
pal
<- sprintf(
labels '<div class="card" style="width: auto;">
<div class="card-body">
<img src ="png_labs/%s.png">
</div>
</div>',
$tunnus
dat_alue%>% lapply(htmltools::HTML)
)
leaflet(dat_alue
%>%
) addTiles(options = tileOptions(opacity = .4)) %>%
# addProviderTiles(provider = providers$CartoDB.Positron) %>%
# leaflet::setView(lng = 25.25,lat = 61.742, zoom = 4) %>%
addPolygons(fillColor = ~pal(factor(ehdokas)),
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 = ~ehdokas, opacity = 0.7, title = "Kunnan suosituin ehdokas",
position = "bottomright") %>%
::addFullscreenControl() leaflet.extras
Uudelleenkäyttö
Viittaus
BibTeX-viittaus:
@online{kainu2024,
author = {Kainu, Markus},
title = {Presidentinvaalit 2024 I kierros Helsingissä: ehdokkaiden
kannatus äänestysalueittain ja naapuriäänestysalueittain},
date = {2024-01-29},
url = {https://markuskainu.fi/posts/2024-01-29-presidentinvaalit-helsinki/},
langid = {fi}
}
Viitatkaa tähän teokseen seuraavasti:
Kainu, Markus. 2024. “Presidentinvaalit 2024 I kierros
Helsingissä: ehdokkaiden kannatus äänestysalueittain ja
naapuriäänestysalueittain.” January 29, 2024. https://markuskainu.fi/posts/2024-01-29-presidentinvaalit-helsinki/.