Skip to content
Snippets Groups Projects
Commit d57d4d9e authored by Jan Eggers's avatar Jan Eggers
Browse files

Klimaliste-Korrekturen

parent 17676557
Branches
No related tags found
No related merge requests found
Showing
with 212 additions and 105 deletions
......@@ -4,7 +4,10 @@
.Ruserdata
.DS_Store
.gitignore
algorithmwatch
analysen/*
livedaten/*
livedaten-backup/*
algorithmwatch/*
ltwhe.log
ltwhe_success.log
ltwhe_crash.log
......
......@@ -5,6 +5,65 @@
#---- Hauptfunktionen ----
#' aktualisiere_hessen_landesstimmen
#'
#' Grafikausgabe Landesstimmen ganz Hessen (direkt über dw-Publish)
aktualisiere_hessen_landesstimmen <- function(lhll_df = live_hessen_landesstimmen_lang_df){
stimmbezirke <- lhll_df %>% pull(stimmbezirke) %>% first()
gezaehlt <- lhll_df %>% pull(gezaehlt) %>% first()
waehler <- lhll_df %>% pull(waehler) %>% first()
wahlberechtigt <- lhll_df %>% pull(wahlberechtigt) %>% first()
ungueltig <- lhll_df %>% pull(ungueltig) %>% first()
hessen_df <- lhll_df %>%
mutate(plusminus = ifelse(prozent==0,"(.)",
paste0("(",
formatC(prozent-prozent_2018,
digits=1,format="f", flag="+",
big.mark = ".",decimal.mark = ","),
")"
))) %>%
select(partei,prozent,plusminus)
# Daten direkt hochladen
dw_data_to_chart(hessen_df,chart_id = hessen_id)
title = paste0("Hessen: Landesstimmen",ifelse(stimmbezirke == gezaehlt," - ERGEBNIS"," - TREND (bislang ausgezählte Stimmen)"))
intro = paste0("Abgegebene Stimmen: ",
formatC(waehler,format="d",
decimal.mark=",", big.mark="."),
", davon ungültig: ",
formatC(ungueltig / waehler * 100,format="f",
decimal.mark=",", digits = 1, big.mark="."),
"%, ",
ifelse(stimmbezirke == gezaehlt,
paste0(
"Wahlbeteiligung: ",
formatC(waehler / wahlberechtigt * 100,format="f",
decimal.mark=",", digits = 1, big.mark="."),
"%"),
""),
"<br><br>Zweitstimmen für die Parteien landesweit; auf Zehntel gerundet. in Klammern die Stimmanteile bei der Landtagswahl 2018, ",
"soweit vorhanden")
notes = notes_text_auszaehlung(gezaehlt,
stimmbezirke,
ts,
" Reihenfolge der Parteien wie auf dem Stimmzettel.<br><br>")
# TEST-Feature
if (TEST) {
intro = paste0("<b style='color:#dfedf8;'>TITLE ",title,"<br><br>INTRO ",intro,"</b>")
title ="*** TEST *** wk0 - FIKTIVE DATEN"
}
dw_edit_chart(chart_id = hessen_id,
title = title,
intro = intro,
annotate = notes)
dw_publish_chart(chart_id = hessen_id)
}
#' aktualisiere_kreise_direkt
#'
......@@ -14,7 +73,6 @@
#' Die Daten sind hier sehr schlicht: Spalten name, prozent
#' Metadaten ergänzen
aktualisiere_kreise_direkt <- function(live_kreise_direkt_lang_df, wk_v = c(1:55)) {
ausgezaehlt_df <- tibble()
lkdl_df <- live_kreise_direkt_lang_df
# Gehe durch die Wahlkreis-IDs und suche die passenden Wahlkreisdaten
for (i in wk_v) {
......@@ -41,20 +99,18 @@ aktualisiere_kreise_direkt <- function(live_kreise_direkt_lang_df, wk_v = c(1:55
filter(wk == i) %>%
mutate(prozent = paste0(formatC(prozent,digits=1,format="f",
big.mark = ".",decimal.mark = ","),
" (",
"% (",
ifelse(partei %in% v2018_v,
formatC(differenz,digits=1,format="f",
flag="+", big.mark = ".",decimal.mark = ","),
")")) %>%
"?"),
")"
)
) %>%
select(name,partei,stimmen,prozent)
write_csv(kand_df %>% head(5),paste0("livedaten/",
fname,
".csv"))
if (gezaehlt == stimmbezirke) {
ausgezaehlt_df <- bind_rows(ausgezaehlt_df,
wahlkreis_df %>%
select(wk_name,partei,prozent) %>%
pivot_wider(names_from=partei,values_from=prozent))
}
# Metadaten einrichten:
wahlbeteiligung_str <- paste0("Abgegebene Stimmen: ",
formatC(waehler,format="d",
......@@ -68,14 +124,19 @@ aktualisiere_kreise_direkt <- function(live_kreise_direkt_lang_df, wk_v = c(1:55
paste0(
"Wahlbeteiligung: ",
formatC(waehler / wahlberechtigt * 100,format="f",
decimal.mark=",", digits = 1, big.mark="."),
"%"),
decimal.mark=",", digits = 1, big.mark=".")),
""),
"<br><br>"
)
kand_str <- paste0("Weitere: ",
paste0(kand_df %>% tail(nrow(.)-5) %>%
mutate(n = paste0(name,": 0,0%")) %>% pull(n),
paste0(kand_df %>%
tail(nrow(.)-5) %>%
mutate(nn = paste0(name,": ",
formatC(prozent,
format = "f",
digits=1,
decimal.mark = ",",
big.mark = "."))) %>% pull(nn),
collapse = ", "),"<br><br>")
title <- paste0("Wahlkreis ",wk,
" - ",wk_name,
......@@ -84,7 +145,9 @@ aktualisiere_kreise_direkt <- function(live_kreise_direkt_lang_df, wk_v = c(1:55
" - ERGEBNIS",
" - TREND (bislang ausgezählte Stimmen)"))
intro <- paste0(wahlbeteiligung_str,
"Erststimmen für die Wahl des Direktkandidaten im Wahlkreis - die derzeit fünf führenden Kandidatinnen und Kandidaten")
"Erststimmen für die Wahl des Direktkandidaten im Wahlkreis - ",
"die derzeit fünf führenden Kandidatinnen und Kandidaten. ",
"Prozentzahlen auf Zehntel gerundet; in Klammern: Vergleich zu 2018")
notes <- notes_text_auszaehlung(gezaehlt,
stimmbezirke,
ts,kand_str,
......@@ -152,8 +215,10 @@ aktualisiere_kreise_landesstimmen <- function(live_kreise_landesstimmen_lang_df)
mutate(prozent = paste0(formatC(prozent,digits=1,format="f",
big.mark = ".",decimal.mark = ","),
" (",
ifelse(partei %in% v2018_v,
formatC(differenz,digits=1,format="f",
flag="+", big.mark = ".",decimal.mark = ","),
"?"),
")")) %>%
select(partei,stimmen,prozent,wk)
write_csv(liste_df,paste0("livedaten/",
......@@ -184,8 +249,8 @@ aktualisiere_kreise_landesstimmen <- function(live_kreise_landesstimmen_lang_df)
" - ERGEBNIS",
" - TREND (bislang ausgezählte Stimmen)"))
intro <- paste0(wahlbeteiligung_str,
"Zweitstimmen im Wahlkreis für die Parteien im neuen Landtag",
" (in Klammern: Ergebnis 2018, soweit vorhanden)")
"Zweitstimmen im Wahlkreis für die Parteien im neuen Landtag. ",
"Prozentzahlen auf Zehntel gerundet; in Klammern: Vergleich zu 2018")
notes <- notes_text_auszaehlung(gezaehlt,
stimmbezirke,
ts,
......@@ -282,8 +347,9 @@ aktualisiere_gemeinden_direkt <- function(live_gemeinden_direkt_lang_df) {
intro <- paste0(wahlbeteiligung_str,
"Erststimmen in ",
g_name,
" für die Direktkandidaten im Wahlkreis ",wk,
" (in Klammern: Ergebnis 2018, soweit vorhanden)")
" für die Direktkandidaten im Wahlkreis ",wk,". ",
"Prozentzahlen auf Zehntel gerundet; in Klammern: Vergleich zu 2018"
)
notes <- notes_text_auszaehlung(gezaehlt,
stimmbezirke,
ts,"in der Reihenfolge vom Stimmzettel<br><br>")
......@@ -380,7 +446,8 @@ aktualisiere_gemeinden_landesstimmen <- function(live_gemeinden_landesstimmen_la
intro <- paste0(wahlbeteiligung_str,
"Zweitstimmen in ",g_name,
", alle Wahllisten. ",
"Werte in Klammern geben die Differenz zur letzten Wahl 2018 an.")
"Prozentzahlen auf Zehntel gerundet; in Klammern: Vergleich zu 2018"
)
notes <- notes_text_auszaehlung(gezaehlt,
stimmbezirke,
ts,"in der Reihenfolge vom Stimmzettel<br><br>")
......@@ -412,64 +479,6 @@ aktualisiere_gemeinden_landesstimmen <- function(live_gemeinden_landesstimmen_la
#
# }
#' aktualisiere_hessen_landesstimmen
#'
#' Grafikausgabe Landesstimmen ganz Hessen (direkt über dw-Publish)
aktualisiere_hessen_landesstimmen <- function(lhll_df = live_hessen_landesstimmen_lang_df){
stimmbezirke <- lhll_df %>% pull(stimmbezirke) %>% first()
gezaehlt <- lhll_df %>% pull(gezaehlt) %>% first()
waehler <- lhll_df %>% pull(waehler) %>% first()
wahlberechtigt <- lhll_df %>% pull(wahlberechtigt) %>% first()
ungueltig <- lhll_df %>% pull(ungueltig) %>% first()
hessen_df <- lhll_df %>%
mutate(plusminus = ifelse(prozent==0,"(.)",
paste0("(",
formatC(prozent-prozent_2018,
digits=1,format="f", flag="+",
big.mark = ".",decimal.mark = ","),
")"
))) %>%
select(partei,prozent,plusminus)
# Daten direkt hochladen
dw_data_to_chart(hessen_df,chart_id = hessen_id)
title = paste0("Hessen: Landesstimmen",ifelse(stimmbezirke == gezaehlt," - ERGEBNIS"," - TREND (bislang ausgezählte Stimmen)"))
intro = paste0("Abgegebene Stimmen: ",
formatC(waehler,format="d",
decimal.mark=",", big.mark="."),
", davon ungültig: ",
formatC(ungueltig / waehler * 100,format="f",
decimal.mark=",", digits = 1, big.mark="."),
"%, ",
ifelse(stimmbezirke == gezaehlt,
paste0(
"Wahlbeteiligung: ",
formatC(waehler / wahlberechtigt * 100,format="f",
decimal.mark=",", digits = 1, big.mark="."),
"%"),
""),
"<br><br>Zweitstimmen für die Parteien landesweit; in Klammern die Stimmanteile bei der Landtagswahl 2018, ",
"soweit vorhanden")
notes = notes_text_auszaehlung(gezaehlt,
stimmbezirke,
ts,
" Reihenfolge der Parteien wie auf dem Stimmzettel.<br><br>")
# TEST-Feature
if (TEST) {
intro = paste0("<b style='color:#dfedf8;'>TITLE ",title,"<br><br>INTRO ",intro,"</b>")
title ="*** TEST *** wk0 - FIKTIVE DATEN"
}
dw_edit_chart(chart_id = hessen_id,
title = title,
intro = intro,
annotate = notes)
dw_publish_chart(chart_id = hessen_id)
}
#--- Grafikfunktionen ----
generiere_auszählungsbalken <- function(anz = gezaehlt,max_s = stimmbezirke_n,ts = ts) {
fortschritt <- floor(anz/max_s*100)
......@@ -656,7 +665,8 @@ gemeinden_landesstimme_tabelle <- function() {
title <- paste0(gemeinde_name, ": Landesstimmen")
intro <- paste0("Zweitstimmen in ",gemeinde_name,", alle Wahllisten, in der Reihenfolge vom Wahlzettel. ",
"Werte in Klammern geben die Differenz zur letzten Wahl 2018 an.")
"Prozentzahlen auf Zehntel gerundet; in Klammern: Vergleich zu 2018"
)
# Metadaten anlegen
forced_meta <- list()
forced_meta[["title"]] <- title
......@@ -735,7 +745,8 @@ staedte_landesstimme_tabelle <- function() {
intro <- paste0("Zweitstimmen in ",gemeinde_name,", alle Wahlkreise (",
paste0(wk,collapse=", "),") -",
" Alle Wahllisten, in der Reihenfolge vom Wahlzettel. ",
"Werte in Klammern geben die Differenz zur letzten Wahl 2018 an.")
"Prozentzahlen auf Zehntel gerundet; in Klammern: Vergleich zu 2018"
)
# Metadaten anlegen
forced_meta <- list()
forced_meta[["title"]] <- title
......@@ -819,7 +830,8 @@ gemeinden_direkt_tabelle <- function() {
title <- paste0(gemeinde_name, ": Stimmen fürs Direktmandat")
intro <- paste0("Erststimmen in ",gemeinde_name," für die Wahl des Direktkandidaten des Wahlkreises ", wk)
intro <- paste0("Erststimmen in ",gemeinde_name," für die Wahl des Direktkandidaten des Wahlkreises ", wk,". ",
"Prozentzahlen auf Zehntel gerundet; in Klammern: Vergleich zu 2018")
# Metadaten anlegen
forced_meta <- list()
forced_meta[["title"]] <- title
......
......@@ -52,7 +52,7 @@ check = tryCatch(
ts <- ts_daten
#ts <- ts_daten
# Alles live mit Tabelle und
live_df <- hole_daten(stimmbezirke_url)
stimmbezirke_n <- live_df %>% filter(Gebietstyp == "LD") %>% select(all_of(stimmbezirke_i)) %>% pull()
......@@ -107,6 +107,9 @@ gewinn_verlust_df <- gemeinden_parteien_df %>%
arrange(id)
write.xlsx(gewinn_verlust_df,"analysen/gewinn_verlust.xlsx", overwrite=T)
library(DatawRappr)
dw_data_to_chart(chart_id = "s4jvc", gewinn_verlust_df)
dw_publish_chart(chart_id = "s4jvc")
parteien <- createWorkbook()
for (p in parteien_idx_df$partei) {
......@@ -203,3 +206,45 @@ choro_alle_df <- gemeinden_parteien_df %>%
write.xlsx(choro_alle_df,"analysen/choropleth_alle.xlsx")
# Alle DW-Grafiken
dw_c_v <- c("sa8zh", #AfD
"BFQBy", #CDU
"COpbT", #DIE LINKE
"qTsRa", #FDP
"kyHjZ", #FREIE WÄHLER
"q6YsR", #GRÜNE
"n1Z0P", #SPD,
"XUgAd") #Volatilität
for (dw_id in dw_c_v) {
dw_data_to_chart(chart_id = dw_id,choro_alle_df)
dw_publish_chart(chart_id = dw_id)
}
#---- Briefwahl ----
stimm_df <- live_df %>%
filter(Gebietstyp == "SB") %>%
mutate(briefwahl = (str_sub(Wahlbezirksnummer,1,2) %in% c("90","09","99")) | str_detect(Wahllokal,"Briefwahl")) %>%
mutate(AGS = str_sub(Gebietsschlüssel,4,9)) %>%
select(AGS,
g_name = Gebietsbezeichnung,
wahlberechtigt = Wahlberechtigte,
waehler = `Wählerinnen und Wähler`,
ungueltig_wk = `ungültige Wahlkreisstimmen`,
ungueltig_ls = `ungültige Landesstimmen`,
briefwahl) %>%
group_by(AGS) %>%
mutate(anzahl = n()) %>%
filter(!is.na(waehler)) %>%
mutate(bw = ifelse(briefwahl,waehler,0)) %>%
summarize(g_name = first(g_name),
wahlberechtigt = sum(wahlberechtigt),
waehler = sum(waehler),
briefwaehler = sum(bw),
ungueltig_wk = sum(ungueltig_wk),
ungueltig_ls = sum(ungueltig_ls)) %>%
mutate(briefwahlquote = (briefwaehler / waehler *1000) / 10)
briefwahlquote <- (sum(stimm_df$briefwaehler) / sum(stimm_df$waehler) *1000) / 10
write.xlsx(stimm_df,"analysen/briefwahl_nach_gemeinde.xlsx")
......@@ -145,9 +145,9 @@ forme_hessen_landesstimmen <- function(live_df){
wahlberechtigt = 6,
waehler = 10,
wahlbeteiligung = 12,
gueltig = 15,
ungueltig = 14,
ungueltig_prozent = 17,
gueltig = 77,
ungueltig = 76,
ungueltig_prozent = 78,
all_of(spaltenindex_landesstimmen_df$idx)
) %>%
mutate(wk = as.integer(str_sub(wk,1,3))) %>%
......@@ -156,7 +156,7 @@ forme_hessen_landesstimmen <- function(live_df){
# Parteinamen korrigieren
mutate(partei = str_replace(partei," Landesstimmen",""))%>%
# Prozentanteil errechnen
mutate(prozent = ifelse (stimmen == 0,0,stimmen/gueltig*100)) %>%
mutate(prozent = ifelse (stimmen == 0,0,(stimmen/gueltig*100))) %>%
left_join(frankentable_landesstimmen_lang_df %>%
filter(wk == 0) %>%
select(partei,prozent_2018),
......@@ -196,7 +196,7 @@ forme_kreise_direkt <- function(live_df) {
# Parteinamen korrigieren
mutate(partei = str_replace(partei," Wahlkreisstimmen",""))%>%
# Prozentanteil errechnen
mutate(prozent = ifelse (stimmen == 0,0,stimmen/gueltig*100)) %>%
mutate(prozent = ifelse (stimmen == 0,0,(stimmen/gueltig*100))) %>%
# Ergänze die (Nach-)Namen der Direktkandidaten
left_join(direktkandidaten_df %>% select (wk,partei,Nachname,name),
by=c("wk","partei")) %>%
......@@ -231,9 +231,9 @@ forme_kreise_landesstimmen <- function(live_df) {
wahlberechtigt = 6,
waehler = 10,
wahlbeteiligung = 12,
gueltig = 15,
ungueltig = 14,
ungueltig_prozent = 17,
gueltig = 77,
ungueltig = 76,
ungueltig_prozent = 78,
all_of(spaltenindex_landesstimmen_df$idx)
) %>%
mutate(wk = as.integer(str_sub(wk,1,3))) %>%
......@@ -242,7 +242,10 @@ forme_kreise_landesstimmen <- function(live_df) {
# Parteinamen korrigieren
mutate(partei = str_replace(partei," Landesstimmen",""))%>%
# Prozentanteil errechnen
mutate(prozent = ifelse (stimmen == 0,0,stimmen/gueltig*100)) %>%
mutate(prozent = ifelse (stimmen == 0,
0,
(stimmen/gueltig*100))
) %>%
# Ergänze 2018er Ergebnisse aus der "Frankentabelle" (Kombination direkte und umgerechnete WK)
left_join(frankentable_landesstimmen_lang_df,by=c("wk","partei")) %>%
group_by(wk) %>%
......@@ -293,7 +296,11 @@ forme_gemeinden_direkt <- function(live_df) {
# Parteinamen extrahieren - mit V3-Partei!
mutate(partei = str_replace(partei," Wahlkreisstimmen",""))%>%
# Prozentanteil errechnen
mutate(prozent = ifelse (stimmen == 0,0,stimmen/gueltig*100)) %>%
mutate(prozent = ifelse (stimmen == 0,
0,
(stimmen/gueltig*100)
)
) %>%
# Ergänze die (Nach-)Namen der Direktkandidaten
left_join(direktkandidaten_df %>% select (wk,partei,Nachname,name),
by=c("wk","partei")) %>%
......@@ -304,7 +311,9 @@ forme_gemeinden_direkt <- function(live_df) {
select(AGS, partei, stimmen_2018, prozent_2018),
by=c("AGS","partei")) %>%
mutate(across(c(stimmen_2018,prozent_2018), ~ ifelse(is.na(.),0,.))) %>%
mutate(differenz = ifelse(prozent == 0,0,prozent - prozent_2018))
mutate(differenz = ifelse(prozent == 0,
0,
prozent - prozent_2018))
return(live_gemeinden_direkt_lang_df)
# Filtere Kreise
......@@ -329,9 +338,9 @@ forme_gemeinden_landesstimmen <- function(live_df) {
wahlberechtigt = 6,
waehler = 10,
wahlbeteiligung = 12,
gueltig = 15,
ungueltig = 14,
ungueltig_prozent = 17,
gueltig = 77,
ungueltig = 76,
ungueltig_prozent = 78,
all_of(spaltenindex_landesstimmen_df$idx)
) %>%
# Nur die Parteien von den Landeslisten
......@@ -350,7 +359,11 @@ forme_gemeinden_landesstimmen <- function(live_df) {
# Parteinamen korrigieren
mutate(partei = str_replace(partei," Landesstimmen",""))%>%
# Prozentanteil errechnen
mutate(prozent = ifelse (stimmen == 0,0,stimmen/gueltig*100)) %>%
mutate(prozent = ifelse (stimmen == 0,
0,
(stimmen/gueltig*100)
)
) %>%
# Ergänze 2018er Ergebnisse in den Gemeinden
left_join(gemeinden_landesstimmen_2018_lang_df %>%
select(AGS, partei, stimmen_2018, prozent_2018),
......@@ -359,7 +372,9 @@ forme_gemeinden_landesstimmen <- function(live_df) {
# fill(wahlberechtigte_2018:veraendert) %>%
ungroup() %>%
mutate(across(c(stimmen_2018,prozent_2018), ~ ifelse(is.na(.),0,.))) %>%
mutate(differenz = ifelse(prozent == 0,0,prozent - prozent_2018))
mutate(differenz = ifelse(prozent == 0,
0,
prozent - prozent_2018))
return(live_gemeinden_landesstimmen_lang_df)
# Filtere Kreise
......
......@@ -137,7 +137,7 @@ frankentable_direkt_lang_df <- frankentable_direkt_df %>%
veraendert,
partei,
stimmen_2018) %>%
mutate(prozent_2018 = stimmen_2018 / gueltig_2018 * 100)
mutate(prozent_2018 = (stimmen_2018 / gueltig_2018 * 1000)/10)
frankentable_landesstimmen_lang_df <- frankentable_landesstimmen_df %>%
pivot_longer(cols=9:21,
......@@ -150,7 +150,7 @@ frankentable_landesstimmen_lang_df <- frankentable_landesstimmen_df %>%
veraendert,
partei,
stimmen_2018) %>%
mutate(prozent_2018 = stimmen_2018 / gueltig_2018 * 100)
mutate(prozent_2018 = (stimmen_2018 / gueltig_2018 * 1000) /10)
# Gemeinde-Ergebnisse laden
......@@ -218,7 +218,7 @@ gemeinden_direkt_2018_df <- direkt_2018_df %>%
gemeinden_direkt_2018_lang_df <- gemeinden_direkt_2018_df %>%
pivot_longer(cols=c(11:29),names_to="partei",values_to="stimmen_2018") %>%
mutate(prozent_2018 = stimmen_2018 / gueltig * 100)
mutate(prozent_2018 = (stimmen_2018 / gueltig * 1000)/10)
### Spalten 35-57: Landesstimmen
landesstimmen_2018_df <- e2018_df %>%
......@@ -271,7 +271,7 @@ gemeinden_landesstimmen_2018_df <- landesstimmen_2018_df %>%
gemeinden_landesstimmen_2018_lang_df <- gemeinden_landesstimmen_2018_df %>%
pivot_longer(cols=c(11:33),names_to="partei",values_to="stimmen_2018") %>%
mutate(prozent_2018 = stimmen_2018 / gueltig * 100)
mutate(prozent_2018 = (stimmen_2018 / gueltig * 1000)/10)
# Ganz Hessen? Ganz Hessen!
hessen_landesstimmen_lang_df <- landesstimmen_2018_df %>%
......@@ -280,7 +280,7 @@ hessen_landesstimmen_lang_df <- landesstimmen_2018_df %>%
pivot_longer(cols = 9:31,
names_to = "partei",
values_to = "stimmen") %>%
mutate(prozent = stimmen / gueltig * 100)
mutate(prozent = (stimmen / gueltig * 1000)/10)
# Direktkandidaten
......@@ -301,3 +301,7 @@ direktkandidaten_df <- kandidaten_alle_df %>%
# Offenbach wird als Gemeinde in einem Wahlkreis behandelt (der halt nur eine Gemeinde hat)
staedte_v <- c("611000","411000","412000","414000")
# Parteien, für die es Frankentable-Vergleichswerte gibt
v2018_v <- colnames(frankentable_direkt_df)[9:20]
\ No newline at end of file
......@@ -29,6 +29,8 @@ Die Daten müssen dafür über ein CSV angeliefert werden, das auf dem Bucket li
dessen Adresse die Datawrapper-Grafik kennt, und das überschrieben wird, wenn etwas aktualisiert
werden soll. Details hier: https://academy.datawrapper.de/article/60-external-data-sources
### Lösung: CSV- und JSON-Livedaten in Datawrapper
Schöner ist die zusätzliche Möglichkeit, ein JSON mit zusätzlichen Metadaten-Keys zu hinterlegen,
dessen Inhalt die Datawrapper-Grafik genau so zieht wie die Daten - zum Beipsiel für
einen angepassten Titel, einen Fortschrittsbalken für die ausgezählten Stimmbezirke und einen
......@@ -39,6 +41,32 @@ Wenn die Grafiken nicht neu veröffentlicht werden müssen, sondern man nur die
CSV- und JSON-Dateien generieren und uploaden muss, ist ein Auswertungs-Zyklus in unter einer
Minute erledigt - auf jeden Fall schnell genug, um die nächste Aktualisierung mitzubekommen.
### Generierung und Anpassung der Datawrapper-Grafiken
Das Anlegen der Grafiken erfolgte automatisiert - wie auch sonst - , allerdings
habe ich es für effizienter gehalten, nicht jeden einzelnen Key anzupassen, weil Datawrapper
zum Teil ganze Serien von Parametern braucht, um richtig zu antworten. (Beispiel:
column-Parameter zum Umgang mit Datenreihen).
Workflow war also:
- Anpassung von Muster-Datawrapper-Grafiken von Hand...
- ...ergänzt von automatisch generierten Farbtabellen für die Parteien
- Eintrag der CSV- und JSON-Datei-URLs automatisiert; Anpassung von Keys
### Datawrapper-Grafiken für Live-Update einrichten via API
Damit eine Grafik die externen Daten nutzt, muss man per API fünf(!) Keys eintragen -
siehe Funktion fix_dwcdn() in der Datei aktualisiere_grafiken.R:
```
data$`use-datawrapper-cdn`<- FALSE
data$`upload-method`= "external-data"
data$`external-data` = "<dateiname>.csv"
data$`external-metadata` = "<dateiname>.json"
#...und wichtig: ein zusätzlicher Key auf der Ebene content
dw_edit_chart(chart_id = did, data = data, externalData = ext_path)
```
## Drumherum ##
......
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment