Loading 02_code/R/AIDAHO_IDS_THAS_Code.R +118 −0 Original line number Diff line number Diff line Loading @@ -340,3 +340,121 @@ conditional_save_downloads <- function(subfolder, jobs, refid_active_jobs = NULL jobs <- download_all_jobs("Daten", "Stuttgart", 100) refid_active_jobs <- c("12345", "67890") # Beispiel-IDs conditional_save_downloads("00_jobs_searchterm", jobs, refid_active_jobs, "daten") #Task 3---- #Task 3: a---- library(readr) # Hilfsfunktion zum Laden und Verarbeiten von Daten load_job_data <- function(filepath) { read_csv(filepath) } # Funktion zum Ermitteln der aktuell aktiven Jobs get_active_jobs <- function(subfolder) { # Alle Dateien im Unterordner auflisten files <- list.files(subfolder, full.names = TRUE) # Dateien nach Datum sortieren (Annahme: Dateinamen enthalten das Datum im Format YYYY-MM-DD) files_sorted <- files[order(sapply(files, function(x) as.Date(sub(".(\\d{4}-\\d{2}-\\d{2})..csv", "\\1", basename(x)))))] # Den aktuellsten vollständigen Datensatz finden (Annahme: Dateinamen enthalten "full" für vollständige Datensätze) full_data_files <- grep("full", files_sorted, value = TRUE) latest_full_data <- tail(full_data_files, 1) # Alle inkrementellen Dateien nach dem vollständigen Datensatz filtern, exklusive der heutigen Datei incremental_files <- files_sorted[files_sorted > latest_full_data] incremental_files <- incremental_files[!grepl(Sys.Date(), incremental_files)] # Vollständigen Datensatz laden active_jobs_df <- load_job_data(latest_full_data) # Über inkrementelle Dateien iterieren und Daten aktualisieren for (file in incremental_files) { incremental_data <- load_job_data(file) active_jobs_df <- bind_rows(active_jobs_df, incremental_data) } # Liste der Job-Referenz-IDs extrahieren active_job_ids <- active_jobs_df$job_reference_id return(active_job_ids) } # Testen der Funktion mit Beispieldaten (dieser Abschnitt ist für die lokale Testumgebung) # Verzeichnis mit Testdaten (anpassen auf tatsächlichen Pfad) test_subfolder <- "01 data/downloads" test_active_jobs <- get_active_jobs(test_subfolder) print(test_active_jobs) #Aufgabe 3a get_active_jobs <- function(subfolder) { today_date <- format(Sys.Date(), "%Y-%m-%d") files <- list.files(subfolder, full.names = TRUE, pattern = "\\.csv$") # Filtern der relevanten Dateien, die nicht von heute sind relevant_files <- files[!grepl(today_date, files)] # Identifizieren der neuesten Full-Datendatei full_files <- relevant_files[grepl("_full.csv$", relevant_files)] if (length(full_files) == 0) { stop("Keine vollständigen Datensätze verfügbar.") } latest_full_file <- full_files[which.max(file.info(full_files)$mtime)] # Laden der neuesten Full-Daten tryCatch({ active_jobs <- read_csv(latest_full_file) message("Geladene Jobs aus der Full CSV: ", nrow(active_jobs)) }, error = function(e) { stop("Fehler beim Laden der Full-Daten: ", e$message) }) # Finden und Verarbeiten von New- und Old-Daten new_files <- relevant_files[grepl("_new.csv$", relevant_files)] old_files <- relevant_files[grepl("_old.csv$", relevant_files)] # Hinzufügen und Entfernen von Jobs added_jobs <- NULL removed_jobs <- NULL for (file in new_files) { new_data <- read_csv(file) added_jobs <- bind_rows(added_jobs, new_data) active_jobs <- bind_rows(active_jobs, new_data) } for (file in old_files) { old_data <- read_csv(file, col_types = cols(refnr = col_character())) removed_jobs <- bind_rows(removed_jobs, old_data) active_jobs <- active_jobs[!active_jobs$refnr %in% old_data$refnr, ] } message("Original job count: ", nrow(active_jobs)) message("New jobs added: ", nrow(added_jobs)) message("Jobs removed: ", nrow(removed_jobs)) list(active_jobs = active_jobs, added_jobs = added_jobs, removed_jobs = removed_jobs) } # Festlegen des Pfads und Testen der Funktion test_subfolder <- "C:/Users/Surface/git/ids_2024_thas_public/01_data/downloads" result <- tryCatch({ get_active_jobs(test_subfolder) }, error = function(e) { print(e$message) }) # Drucken nur der Referenznummern der aktiven Jobs if (!is.null(result$active_jobs) && "refnr" %in% colnames(result$active_jobs)) { print(result$active_jobs$refnr) } else { message("Keine aktiven Jobs verfügbar oder 'refnr' nicht in den Daten gefunden.") } # Ausgabe der hinzugefügten und entfernten Job-Referenznummern print(result$added_jobs$refnr) print(result$removed_jobs$refnr) Loading
02_code/R/AIDAHO_IDS_THAS_Code.R +118 −0 Original line number Diff line number Diff line Loading @@ -340,3 +340,121 @@ conditional_save_downloads <- function(subfolder, jobs, refid_active_jobs = NULL jobs <- download_all_jobs("Daten", "Stuttgart", 100) refid_active_jobs <- c("12345", "67890") # Beispiel-IDs conditional_save_downloads("00_jobs_searchterm", jobs, refid_active_jobs, "daten") #Task 3---- #Task 3: a---- library(readr) # Hilfsfunktion zum Laden und Verarbeiten von Daten load_job_data <- function(filepath) { read_csv(filepath) } # Funktion zum Ermitteln der aktuell aktiven Jobs get_active_jobs <- function(subfolder) { # Alle Dateien im Unterordner auflisten files <- list.files(subfolder, full.names = TRUE) # Dateien nach Datum sortieren (Annahme: Dateinamen enthalten das Datum im Format YYYY-MM-DD) files_sorted <- files[order(sapply(files, function(x) as.Date(sub(".(\\d{4}-\\d{2}-\\d{2})..csv", "\\1", basename(x)))))] # Den aktuellsten vollständigen Datensatz finden (Annahme: Dateinamen enthalten "full" für vollständige Datensätze) full_data_files <- grep("full", files_sorted, value = TRUE) latest_full_data <- tail(full_data_files, 1) # Alle inkrementellen Dateien nach dem vollständigen Datensatz filtern, exklusive der heutigen Datei incremental_files <- files_sorted[files_sorted > latest_full_data] incremental_files <- incremental_files[!grepl(Sys.Date(), incremental_files)] # Vollständigen Datensatz laden active_jobs_df <- load_job_data(latest_full_data) # Über inkrementelle Dateien iterieren und Daten aktualisieren for (file in incremental_files) { incremental_data <- load_job_data(file) active_jobs_df <- bind_rows(active_jobs_df, incremental_data) } # Liste der Job-Referenz-IDs extrahieren active_job_ids <- active_jobs_df$job_reference_id return(active_job_ids) } # Testen der Funktion mit Beispieldaten (dieser Abschnitt ist für die lokale Testumgebung) # Verzeichnis mit Testdaten (anpassen auf tatsächlichen Pfad) test_subfolder <- "01 data/downloads" test_active_jobs <- get_active_jobs(test_subfolder) print(test_active_jobs) #Aufgabe 3a get_active_jobs <- function(subfolder) { today_date <- format(Sys.Date(), "%Y-%m-%d") files <- list.files(subfolder, full.names = TRUE, pattern = "\\.csv$") # Filtern der relevanten Dateien, die nicht von heute sind relevant_files <- files[!grepl(today_date, files)] # Identifizieren der neuesten Full-Datendatei full_files <- relevant_files[grepl("_full.csv$", relevant_files)] if (length(full_files) == 0) { stop("Keine vollständigen Datensätze verfügbar.") } latest_full_file <- full_files[which.max(file.info(full_files)$mtime)] # Laden der neuesten Full-Daten tryCatch({ active_jobs <- read_csv(latest_full_file) message("Geladene Jobs aus der Full CSV: ", nrow(active_jobs)) }, error = function(e) { stop("Fehler beim Laden der Full-Daten: ", e$message) }) # Finden und Verarbeiten von New- und Old-Daten new_files <- relevant_files[grepl("_new.csv$", relevant_files)] old_files <- relevant_files[grepl("_old.csv$", relevant_files)] # Hinzufügen und Entfernen von Jobs added_jobs <- NULL removed_jobs <- NULL for (file in new_files) { new_data <- read_csv(file) added_jobs <- bind_rows(added_jobs, new_data) active_jobs <- bind_rows(active_jobs, new_data) } for (file in old_files) { old_data <- read_csv(file, col_types = cols(refnr = col_character())) removed_jobs <- bind_rows(removed_jobs, old_data) active_jobs <- active_jobs[!active_jobs$refnr %in% old_data$refnr, ] } message("Original job count: ", nrow(active_jobs)) message("New jobs added: ", nrow(added_jobs)) message("Jobs removed: ", nrow(removed_jobs)) list(active_jobs = active_jobs, added_jobs = added_jobs, removed_jobs = removed_jobs) } # Festlegen des Pfads und Testen der Funktion test_subfolder <- "C:/Users/Surface/git/ids_2024_thas_public/01_data/downloads" result <- tryCatch({ get_active_jobs(test_subfolder) }, error = function(e) { print(e$message) }) # Drucken nur der Referenznummern der aktiven Jobs if (!is.null(result$active_jobs) && "refnr" %in% colnames(result$active_jobs)) { print(result$active_jobs$refnr) } else { message("Keine aktiven Jobs verfügbar oder 'refnr' nicht in den Daten gefunden.") } # Ausgabe der hinzugefügten und entfernten Job-Referenznummern print(result$added_jobs$refnr) print(result$removed_jobs$refnr)