#---- Vorbereitung ---- # Statische Daten einlesen # (das später durch ein schnelleres .rda ersetzen) # Enthält drei Datensätze: # - opendata_wahllokale_df mit der Liste aller Stimmwahlbezirke nach Wahllokal # - statteile_df: Stadtteil mit Namen und laufender Nummer, Geokoordinaten, Ergebnissen 2018 # - zuordnung_stimmbezirke: Stimmbezirk-Nummer (als int und String) -> Stadtteilnr. # load ("index/index.rda") # Konfiguration auslesen und in Variablen schreiben # # Generiert für jede Zeile die genannte Variable mit dem Wert value # # Derzeit erwartet das Programm: # - wahl_name - Name der Wahl ("obwahl_ffm", "obwahl_kassel_stichwahl" etc.) # - stimmbezirke_url - URL auf Ergebnisdaten # - kandidaten_fname - Dateiname der Kandidierenden-Liste (s.u.) # - datawrapper_fname - Dateiname für die Datawrapper-Verweis-Datei # - stadtteile_fname # - zuordnung_fname # - startdatum - wann beginne ich zu arbeiten? # - wahlberechtigt - Zahl der Wahlberechtigen (kommt Sonntag) # - briefwahl - Zahl der Briefwahlstimmen (kommt Sonntag) if (TEST) { config_df <- read_csv("index/config_test.csv") } else { config_df <- read_csv("index/config.csv") } for (i in c(1:nrow(config_df))) { # Erzeuge neue Variablen mit den Namen und Werten aus der CSV assign(config_df$name[i], # Kann man den Wert auch als Zahl lesen? # Fieses Regex sucht nach reiner Zahl oder Kommawerten. # Keine Exponentialschreibweise! ifelse(grepl("^[0-9]*\\.*[0-9]+$",config_df$value[i]), # Ist eine Zahl - wandle um as.numeric(config_df$value[i]), # Keine Zahl - behalte den String config_df$value[i])) } lies_daten <- function(fname) { if (toupper(str_extract(fname,"(?<=\\.)[A-zA-Z]+$")) %in% c("XLS","XLSX")) { # Ist offensichtlich eine Excel-Datei. Lies das erste Sheet. return(read.xlsx(fname)) } else { # Geh von einer CSV-Datei aus. first_line <- readLines(fname, n = 1) commas <- str_split(first_line, ",") %>% unlist() %>% length() semicolons <- str_split(first_line, ";") %>% unlist() %>% length() if (commas > semicolons) { return(read_csv(fname)) } else { # Glaube an das Gute im Menschen: Erwarte UTF-8 und deutsche Kommasetzung. return(read_csv2(fname, locale = locale( date_names = "de", date_format = "%Y-%m-%d", time_format = "%H:%M:%S", decimal_mark = ",", grouping_mark = ".", encoding = "UTF-8", asciify = FALSE ))) } } } # Stadtteilname und -nr; Geokoordinaten. Später: Ergebnisse # der 2021er Kommunalwahl stadtteile_df <- lies_daten(paste0("index/",wahl_name,"/",stadtteile_fname)) # Zuordnung Stimmbezirk (Wahllokale und Briefwahl-Bezirke) -> Stadtteil stimmbezirke_df <- lies_daten(paste0("index/",wahl_name,"/",zuordnung_fname)) %>% # Nummer-Spalten in numerische INdizes umwandeln mutate(ortsteilnr = as.integer(ortsteilnr)) %>% mutate(nr = as.integer(nr)) %>% left_join(stadtteile_df %>% select(nr=1,stadtteil=2), by=c("ortsteilnr"="nr")) # Kandidat:innen-Index kandidaten_df <- lies_daten(paste0("index/",wahl_name,"/",kandidaten_fname)) # Läufst du auf dem Server? SERVER <- dir.exists("/home/jan_eggers_hr_de")