# Analiza wyników symulacji kwerendy archiwalnej: dwóch czy trzech archiwistów? # Pliki CSV powstają poleceniami: # tok sim 08-kwerenda.tok --log 08-kwerenda-log.csv --cases-csv 08-kwerenda-sprawy.csv # tok sim 08-kwerenda-3.tok --log 08-kwerenda-3-log.csv --cases-csv 08-kwerenda-3-sprawy.csv # Skrypt korzysta tylko z podstawowego R. Uruchom go w folderze z plikami CSV. wczytaj_sprawy <- function(plik, scenariusz) { d <- read.csv(plik, encoding = "UTF-8") d$scenariusz <- scenariusz d$czas_h <- d$cycle_time_s / 3600 d } sprawy <- rbind( wczytaj_sprawy("08-kwerenda-sprawy.csv", "2 archiwistów"), wczytaj_sprawy("08-kwerenda-3-sprawy.csv", "3 archiwistów") ) # 1. Czas cyklu w godzinach: średnia, mediana, 90. percentyl podsumowanie <- aggregate(czas_h ~ scenariusz, data = sprawy, FUN = function(x) round(c(srednia = mean(x), mediana = median(x), p90 = unname(quantile(x, 0.9))), 1)) print(podsumowanie) # 2. Ile spraw zakończyło się odpowiedzią, a ile odmową print(table(sprawy$scenariusz, sprawy$end_event)) # 3. Średni czas oczekiwania na archiwistę przed każdą czynnością (w godzinach) wczytaj_log <- function(plik, scenariusz) { d <- read.csv(plik, encoding = "UTF-8") d$scenariusz <- scenariusz d$czekanie_h <- as.numeric(difftime(as.POSIXct(d$start, format = "%Y-%m-%dT%H:%M:%S", tz = "UTC"), as.POSIXct(d$enqueue, format = "%Y-%m-%dT%H:%M:%S", tz = "UTC"), units = "hours")) d } log <- rbind( wczytaj_log("08-kwerenda-log.csv", "2 archiwistów"), wczytaj_log("08-kwerenda-3-log.csv", "3 archiwistów") ) archiwisci <- log[log$resource == "archiwisci", ] print(round(tapply(archiwisci$czekanie_h, list(archiwisci$label, archiwisci$scenariusz), mean), 2)) # 4. Wykres: rozkład czasu cyklu w obu scenariuszach png("08-czas-cyklu.png", width = 900, height = 500) boxplot(czas_h ~ scenariusz, data = sprawy, horizontal = TRUE, las = 1, xlab = "Czas cyklu (godziny)", ylab = "", main = "Kwerenda archiwalna: czas od wpływu wniosku do zakończenia") dev.off()