Skip to content
Snippets Groups Projects
Select Git revision
  • a5e7554d58247f827eba74c7658286051c2f08fe
  • main default protected
2 results

lies_aktuellen_stand.R

Blame
  • lies_aktuellen_stand.R 5.54 KiB
    library(readr)
    library(lubridate)
    library(tidyr)
    library(stringr)
    library(dplyr)
    
    # lies_aktuellen_stand.R
    #
    # Enthält die Funktion zum Lesen der aktuellen Daten. 
    
    #---- Vorbereitung ----
    # Statische Daten einlesen
    # (das später durch ein schnelleres .rda ersetzen)
    
    
    load ("index/index.rda")
    
    # Konfiguration auslesen und in Variablen schreiben
    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]))
    }
    
    
    #---- Daten ins Archiv schreiben oder daraus lesen
    archiviere <- function(df,a_directory = "daten/stimmbezirke") {
      if (!dir.exists(a_directory)) {
        dir.create(a_directory)
      }
      write_csv(df,
                paste0(a_directory,"/",
                       # Zeitstempel isolieren und alle Doppelpunkte
                       # durch Bindestriche ersetzen
                       str_replace_all(df %>% pull(zeitstempel) %>% last(),
                                   "\\:","_"),
                       ".csv"))
    }
    
    hole_letztes_df <- function(a_directory = "daten/stimmbezirke") {
      if (!dir.exists(a_directory)) return(tibble())
      neuester_file <- list.files(a_directory, full.names=TRUE) %>% 
        file.info() %>% 
        # Legt eine Spalte namens path an
        tibble::rownames_to_column(var = "path") %>% 
        arrange(desc(ctime)) %>% 
        head(1) %>% 
        # Pfad wieder rausziehen
        pull(path)
      if (length(neuester_file)==0) {
        # Falls keine Daten archiviert, gibt leeres df zurück
        return(tibble())
      } else {
        return(read_csv(neuester_file))
      }
    }
    
    
    #---- Lese-Funktionen ----
    lies_gebiet <- function(stand_url = stimmbezirke_url) {
      ts <- now()
      # Versuch Daten zu lesen - und gib ggf. Warnung oder Fehler zurück