diff --git a/R/aktualisiere_karten.R b/R/aktualisiere_karten.R index 28626b76e347cde275a6d73884451345badcdb84..413cc07b78337423c7f99619985951e869e0b75b 100644 --- a/R/aktualisiere_karten.R +++ b/R/aktualisiere_karten.R @@ -1,10 +1,23 @@ #' 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) { # Lies Ortsteil-Daten ein und vergleiche neue_orts_df <- lies_gebiet(wl_url) %>% - aggregiere_stadtteile() %>% + # aggregiere_stadtteile() %>% + switcher_aggregiere() %>% mutate(quorum = ifelse(wahlberechtigt == 0, 0, ja / wahlberechtigt * 100)) %>% @@ -18,11 +31,11 @@ aktualisiere_karten <- function(wl_url = stimmbezirke_url) { "JA", "JA QUORUM"))) )) - alte_orts_df <- hole_letztes_df("daten/ortsteile") - # Datenstand identisch? Dann brich ab. - if(vergleiche_stand(alte_orts_df,neue_orts_df)) { - return(FALSE) - } else { + # alte_orts_df <- hole_letztes_df("daten/ortsteile") + # # Datenstand identisch? Dann brich ab. + # if(vergleiche_stand(alte_orts_df,neue_orts_df)) { + # return(FALSE) + # } else { # Zeitstempel holen archiviere(neue_orts_df,"daten/ortsteile") ts <- neue_orts_df %>% pull(zeitstempel) %>% last() @@ -45,5 +58,6 @@ aktualisiere_karten <- function(wl_url = stimmbezirke_url) { dw_publish_chart(choropleth_id) dw_publish_chart(tabelle_id) return(TRUE) - } -} \ No newline at end of file + #} +} + diff --git a/R/daten_vorbereiten.R b/R/daten_vorbereiten.R index 7dcd2459e760bc90b6e99592abb08ff067b07727..8c32bd68f25bfe78f21235974e32c99b0d0420a9 100644 --- a/R/daten_vorbereiten.R +++ b/R/daten_vorbereiten.R @@ -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") +#---- 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) diff --git a/R/lies_aktuellen_stand.R b/R/lies_aktuellen_stand.R index d95fa6089ec47454337c731b3eaa1df135ddd813..b342474e9685b45516b7ac52b469b74da013a1c7 100644 --- a/R/lies_aktuellen_stand.R +++ b/R/lies_aktuellen_stand.R @@ -135,6 +135,79 @@ aggregiere_stadtteile <- function(stimmbezirke_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) { neu_df <- lies_gebiet(stand_url) %>% # nr bei Ortsteil-Daten leer/ignorieren diff --git a/README.md b/README.md index cfafd514ad8700c6cc07854cc36c0932dce0810f..5de0de346c22cba021993fdf49617583b7edb48a 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ Nutzt die Livedaten von https://wahlen.frankfurt.de - die aktuellen Daten nach O - D1 : Ja-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?