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

V1.1 mit Briefwahlanteilen

parent a5e7554d
No related branches found
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.
Finish editing this message first!
Please register or to comment