Skip to content
Snippets Groups Projects
Commit a9d9da6b authored by untergeekDE's avatar untergeekDE
Browse files

V1.1 mit Briefwahlanteilen

parent a5e7554d
Branches
No related tags found
No related merge requests found
#' aktualisiere_karten.R #' aktualisiere_karten.R
# Diese Funktion schaltet zwischen den beiden Aggregier-Funktionen um:
# der mit Briefwahl und der ohne Briefwahl.
# Wenn alle Stimmbezirke ausgezählt sind, wird die Briefwähler-Stimmenzahl
# dazu gerechnet.
switcher_aggregiere <- function(stimmbezirke_df) {
if (sum(stimmbezirke_df$meldungen_anz) == sum(stimmbezirke_df$meldungen_max)) {
aggregiere_stadtteile_mit_briefwahl(stimmbezirke_df)
} else {
aggregiere_stadtteile(stimmbezirke_df)
}
}
aktualisiere_karten <- function(wl_url = stimmbezirke_url) { aktualisiere_karten <- function(wl_url = stimmbezirke_url) {
# Lies Ortsteil-Daten ein und vergleiche # Lies Ortsteil-Daten ein und vergleiche
neue_orts_df <- lies_gebiet(wl_url) %>% neue_orts_df <- lies_gebiet(wl_url) %>%
aggregiere_stadtteile() %>% # aggregiere_stadtteile() %>%
switcher_aggregiere() %>%
mutate(quorum = ifelse(wahlberechtigt == 0, mutate(quorum = ifelse(wahlberechtigt == 0,
0, 0,
ja / wahlberechtigt * 100)) %>% ja / wahlberechtigt * 100)) %>%
...@@ -18,11 +31,11 @@ aktualisiere_karten <- function(wl_url = stimmbezirke_url) { ...@@ -18,11 +31,11 @@ aktualisiere_karten <- function(wl_url = stimmbezirke_url) {
"JA", "JA",
"JA QUORUM"))) "JA QUORUM")))
)) ))
alte_orts_df <- hole_letztes_df("daten/ortsteile") # alte_orts_df <- hole_letztes_df("daten/ortsteile")
# Datenstand identisch? Dann brich ab. # # Datenstand identisch? Dann brich ab.
if(vergleiche_stand(alte_orts_df,neue_orts_df)) { # if(vergleiche_stand(alte_orts_df,neue_orts_df)) {
return(FALSE) # return(FALSE)
} else { # } else {
# Zeitstempel holen # Zeitstempel holen
archiviere(neue_orts_df,"daten/ortsteile") archiviere(neue_orts_df,"daten/ortsteile")
ts <- neue_orts_df %>% pull(zeitstempel) %>% last() ts <- neue_orts_df %>% pull(zeitstempel) %>% last()
...@@ -45,5 +58,6 @@ aktualisiere_karten <- function(wl_url = stimmbezirke_url) { ...@@ -45,5 +58,6 @@ aktualisiere_karten <- function(wl_url = stimmbezirke_url) {
dw_publish_chart(choropleth_id) dw_publish_chart(choropleth_id)
dw_publish_chart(tabelle_id) dw_publish_chart(tabelle_id)
return(TRUE) return(TRUE)
#}
} }
}
\ No newline at end of file
...@@ -66,3 +66,24 @@ opendata_wahllokale_df <- read_csv2("index/opendata-wahllokale.csv") ...@@ -66,3 +66,24 @@ opendata_wahllokale_df <- read_csv2("index/opendata-wahllokale.csv")
save(stadtteile_df,zuordnung_stimmbezirke_df,opendata_wahllokale_df,file ="index/index.rda") save(stadtteile_df,zuordnung_stimmbezirke_df,opendata_wahllokale_df,file ="index/index.rda")
#---- Leere Daten pushen - in alle Tabellen----
leerdaten_stimmbezirk_df <- lies_gebiet("https://votemanager-ffm.ekom21cdn.de/2022-11-06/06412000/praesentation/Open-Data-06412000-Buergerentscheid-zur-Abwahl-des-Oberbuergermeisters-der-Stadt-Frankfurt-am-Main_-Herrn-Peter-Feldmann-Stimmbezirk.csv?ts=1667662273015")
leerdaten_ort_df <- leerdaten_stimmbezirk_df %>%
aggregiere_stadtteile() %>%
mutate(quorum = ifelse(wahlberechtigt == 0,
0,
ja / wahlberechtigt * 100)) %>%
mutate(status = ifelse(meldungen_anz == 0,
"KEINE DATEN",
paste0(ifelse(meldungen_anz < meldungen_max,
"TREND ",""),
ifelse(ja < nein,
"NEIN",
ifelse(quorum < 30,
"JA",
"JA QUORUM")))
))
dw_data_to_chart(leerdaten_ort_df,choropleth_id)
dw_data_to_chart(leerdaten_ort_df,symbol_id)
dw_data_to_chart(leerdaten_ort_df,tabelle_id)
...@@ -135,6 +135,79 @@ aggregiere_stadtteile <- function(stimmbezirke_df) { ...@@ -135,6 +135,79 @@ aggregiere_stadtteile <- function(stimmbezirke_df) {
return(ortsteile_df) return(ortsteile_df)
} }
aggregiere_stadtteile_mit_briefwahl <- function(stimmbezirke_df) {
ortsteile_df <- stimmbezirke_df %>%
left_join(zuordnung_stimmbezirke_df,by=c("nr","name")) %>%
left_join(opendata_wahllokale_df %>%
select (nr = `Bezirk-Nr`,
typ = `Bezirk-Art`), by="nr") %>%
group_by(ortsteilnr) %>%
summarize(zeitstempel = last(zeitstempel),
# Bool'sche Multiplikation: Wenn Stimmbezirk kein Briefwahlbezirk,
# wird mit 0 multipliziert; nur die Briefwahl-Stimmbezirke zählen.
briefwahl = sum((typ == "B") * stimmen),
across(meldungen_anz:nein, ~ sum(.,na.rm = T))) %>%
rename(nr = ortsteilnr) %>%
# Stadtteilnamen, 2018er Ergebnisse, Geokoordinaten dazuholen
left_join(stadtteile_df, by="nr") %>%
# Nach Ortsteil sortieren
arrange(nr) %>%
# Wichtige Daten für bessere Lesbarkeit nach vorn
relocate(zeitstempel,nr,name,lon,lat)
# Sicherheitscheck: Warnen, wenn nicht alle Ortsteile zugeordnet
if (nrow(ortsteile_df) != nrow(stadtteile_df)) teams_warnung("Nicht alle Ortsteile zugeordnet")
if (nrow(zuordnung_stimmbezirke_df) != length(unique(stimmbezirke_df$nr))) teams_warnung("Nicht alle Stimmbezirke zugeordnet")
return(ortsteile_df)
}
# Aggregation auf Wahllokal-Ebene
aggregiere_wahllokale <- function(stimmbezirke_df) {
wahllokale_df <- stimmbezirke_df %>%
# Zuordnung der Stimmbezirke zu Ortsteilen
left_join(zuordnung_stimmbezirke_df,by=c("nr","name")) %>%
# Zuordnung der Stimmbezirke zu Wahllokalen über die Stimmbezirks-Nr
left_join(opendata_wahllokale_df %>%
select (nr = `Bezirk-Nr`,
typ = `Bezirk-Art`, # W = Wahllokal, B = Bezirk,
wl_name = `Wahlraum-Bezeichnung`,
adresse = `Wahlraum-Adresse`),
by = "nr") %>%
# Stadtteilnamen, 2018er Ergebnisse dazuholen
left_join(stadtteile_df %>%
select(ortsteilnr = nr,
ortsteil = name,
wahlberechtigt_2018,
waehler_2018,
gueltig_2018,
feldmann_2018), by="ortsteilnr") %>%
# Die Bezeichner-Felder nach vorn sortieren
relocate(zeitstempel,
nr,
name,
wl_name,
typ,
adresse,
ortsteilnr,
ortsteil) %>%
# Nach Wahllokal aggregieren
group_by(wl_name, adresse) %>%
summarize(zeitstempel = last(zeitstempel),
wl_name = last(wl_name),
typ = last(typ),
adresse = last(adresse),
ortsteil = last(ortsteil),
across(meldungen_anz:nein, ~ sum(.,na.rm = T))) %>%
# Nach Ortsteil sortieren
arrange(ortsteil)
# Sicherheitscheck: Warnen, wenn nicht alle Wahllokale zugeordnet
if (nrow(wahllokale_df) != length(unique(opendata_wahllokale_df$`Wahlraum-Bezeichnung`))) teams_warnung("Nicht alle Stimmbezirke zugeordnet")
return(ortsteile_df)
}
lies_stadtteil_direkt <- function(stand_url = ortsteile_url) { lies_stadtteil_direkt <- function(stand_url = ortsteile_url) {
neu_df <- lies_gebiet(stand_url) %>% neu_df <- lies_gebiet(stand_url) %>%
# nr bei Ortsteil-Daten leer/ignorieren # nr bei Ortsteil-Daten leer/ignorieren
......
...@@ -72,7 +72,7 @@ Nutzt die Livedaten von https://wahlen.frankfurt.de - die aktuellen Daten nach O ...@@ -72,7 +72,7 @@ Nutzt die Livedaten von https://wahlen.frankfurt.de - die aktuellen Daten nach O
- D1 : Ja-Stimmen - D1 : Ja-Stimmen
- D2 : Nein-Stimmen - D2 : Nein-Stimmen
Es gibt 575 Stimmbezirke - also administrative Auszählungs-Einheiten. Fast 200 von diesen "Bezirken" sind die Briefwahl-Auszählungen - sie werden alle in der Messe ausgezählt. Insgesamt gibt es 2019 Wahllokale. (vgl. index/opendata-wahllokale.csv) Es gibt 575 Stimmbezirke - also administrative Auszählungs-Einheiten. Fast 200 von diesen "Bezirken" sind die Briefwahl-Auszählungen - sie werden alle in der Messe ausgezählt. Insgesamt gibt es 219 Wahllokale. (vgl. index/opendata-wahllokale.csv)
## Wann gibt es wo Daten? ## Wann gibt es wo Daten?
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment