library(leaflet) library(ggplot2) library(dplyr) library(stringr) rm(list = ls()) options(digits.secs=9) ############################################################################################################## ############################################################################################################## ###NAČTENÍ DAT seznamProfilu <- c("A1","A2","B1","B2","C1","C2","D1","D2","E1") ##NUTNÉ ZADAT Seznam profilů -> bude využitý jako název pro export souborů polohaProfilu <- c("in","out","in","out","in","out","in","out","uvnitr") ##NUTNÉ ZADAT Poloha profilu v oblasti profilStanoviste <- c("A","A","B","B","C","C","D","D","E") ##NUTNÉ ZADAT Příslušnost profilu ke stanovišti Profily <- data.frame(seznamProfilu,profilStanoviste,polohaProfilu) seznamStanovist <- unique(profilStanoviste) ##Seznam stanovišť seznamDruhVozidla <- data.frame(list("OA","NV","BUS"),stringsAsFactors = F) ##NUTNÉ ZADAT Seznam druhů vozidla pro změnu seznamDruhVozidla[nrow(seznamDruhVozidla)+1,] <- list("","","") #Nazvy sloupcu columns_originalData <- c("ID","RZ","DruhVozidla","Cas","Profil") ##NUTNE ZKONTROLOVAT, zda poradi a pocet sloupcu odpovida strukture nacitanych surovych dat ##Příprava cesty pro ukládání souborů lokace <- "C:/Users/Mr. Spock/Documents/Skola/Magistr/diplomka" #Základní lokace, kde budou umístěny složky s vyhodnocením csv <- ".csv" #Priprava listu, kam budou ukladany originalni datove sady z profilu po jejich nacteni df_original_data <- list() ##Nacteni dat i <- 0 for (i in 1:length(seznamProfilu)) { cesta <- paste(lokace,"/",seznamProfilu[i],csv,sep = "") df2 <- read.csv(cesta, sep = ";", encoding = "UTF-8") colnames(df2) <- columns_originalData df_original_data[i] <- list(df2) } ############################################################################################################## ############################################################################################################## ###PŘÍPRAVA DAT df_predzpracovane <- df_original_data ##list df_predzpracovane uchovává tabulky ve formátu pro vyhodnocení k<-0 i<-0 j<-0 for (k in 1:length(df_predzpracovane)) { df2 <- data.frame(df_predzpracovane[k]) df2$Cas <- strptime(df2$Cas, format = "%H:%M:%OS") ##Úprava časového formátu #df2$Cas <- format(df2$Cas, format="%H:%M:%S") df2=df2[!(is.na(df2$RZ)), ] ##Odstranění prázdných řádků df2=df2[!(is.na(df2$Cas)), ] df2 <- df2[order(df2$RZ),] ##Seřazení podle RZ df2 <- df2 %>% distinct(ID,RZ,Cas, .keep_all = TRUE) ##Odstranění duplicit df2$priznak <- "ok" ##Přidání sloupce pro příznak rz <- which( colnames(df2)=="RZ" ) #číslo sloupce ##Odstranění více záchytů RZ ve stejném průjezdu vozidla (limit 10 s) cas <- which( colnames(df2)=="Cas" ) #číslo sloupce priznak <- which(colnames(df2)=="priznak" ) #číslo sloupce for (i in 1:length(df2$ID)) { #procházíme všechny řádky tabulky srovnavanaRZ = df2[c(i),c(rz)] #stanovení RZ, kterou srovnáváme j <- i+1 # j ukazuje na řádek druhé srovnávané RZ while ( df2[c(j),c(rz)] == srovnavanaRZ && j<= length(df2$ID)) { rozdil <- abs(as.numeric(difftime(df2[c(j),c(cas)], df2[c(j-1),c(cas)], units="secs"))) #časový rozdíl if (rozdil <=10) { #časový limit 10 s df2[c(j),c(priznak)] <- "stejnyPrujezd" #stanovení příznaku stejného průjezdu vozidla } j <- j+1 # j ukazuje na řádek druhé srovnávané RZ } } df2 <- df2[!df2$priznak == "stejnyPrujezd", ] #odstranění řádků s příznakem "stejný průjezd" df2 <- df2[order(df2$Cas),] ##Seřazení podle času df2$ID <- seq.int(nrow(df2)) ##Přečíslování ID df2$DruhVozidla[is.na(df2$DruhVozidla)] <- "" df2$DruhVozidlaOriginal <- df2$DruhVozidla ##Přidání sloupce pro uchování originálu druhu vozidla ##Přejmenování druhů vozidla i <- 0 for(i in 1:length(df2$ID)){ if(df2$DruhVozidlaOriginal[i] != "" ) { souradnice <- which(seznamDruhVozidla == df2$DruhVozidlaOriginal[i], arr.ind=TRUE) souradnice[1] <- souradnice[1]+1 # druhvozidla <- seznamDruhVozidla[souradnice] if (seznamDruhVozidla[souradnice] != ""){df2$DruhVozidla[i] <- seznamDruhVozidla[souradnice]} } } df2 <- df2 %>% select(-c(DruhVozidlaOriginal)) df_predzpracovane[k] <- list(df2) ##Uložení do listu } ###ULOŽENÍ PŘEDZPRACOVANÝCH TABULEK ##Příprava cesty pro uložení souboru SurovaDataVystupR <- paste(lokace,"/Surova-data-vystup-R/",sep = "") DIprofilovyPruzkumDatovaSada <- paste(lokace,"/DIchar_profilovy-pruzkum/",sep = "") k<- 0 for (k in 1:length(df_predzpracovane)) { nazev <- paste(seznamProfilu[c(k)],"_Surova-data-vystup-R",sep = "") cesta <- paste(SurovaDataVystupR,nazev,csv, sep="") df2 <- data.frame(df_predzpracovane[k]) df2 <- df2 %>% select(-c(priznak,)) df2$Cas <- format(df2$Cas, format="%H:%M:%S") df2$DruhVozidla[is.na(df2$DruhVozidla)] <- "" write.table(df2,file=cesta,fileEncoding = "UTF-8",row.names = FALSE,sep = ";", dec = ",") nazev <- paste(seznamProfilu[c(k)],"_DIchar_profilovy-pruzkum_Datova-sada",sep = "") cesta <- paste(DIprofilovyPruzkumDatovaSada,nazev,csv, sep="") write.table(df2,file=cesta,fileEncoding = "UTF-8",row.names = FALSE,sep = ";", dec = ",") } ###TVORBA A ULOŽENÍ SLOUČENÉHO SOUBORU DAT = VSTUP PRO PÁROVÁNÍ SloucenaData <- data.frame() k <- 0 for (k in 1:length(df_predzpracovane)) { df2 <- data.frame(df_predzpracovane[k]) SloucenaData <- rbind(SloucenaData, df2) } SloucenaData <- SloucenaData[order(SloucenaData$Cas),] ##Seřazení podle času SloucenaData$ID <- seq.int(nrow(SloucenaData)) ##Přečíslování ID df2 <- SloucenaData ##Priprava na ulozeni df2 <- df2 %>% select(-c(priznak)) df2$Cas <- format(df2$Cas, format="%H:%M:%S") df2$DruhVozidla[is.na(df2$DruhVozidla)] <- "" nazev <- "Surova-data-vystup-R_Sloucene" cesta <- paste(SurovaDataVystupR,nazev,csv, sep="") write.table(df2,file=cesta,fileEncoding = "UTF-8",row.names = FALSE,sep = ";", dec = ",") ##Ulozeni ############################################################################################################## ############################################################################################################## ###VYHODNOCENÍ DI CHARAKTERISTIK TYPU PROFILOVÝ PRŮZKUM #Příprava datového formátu pro soubor dat vyhodnocení columns = c("Hodina","Profil","Celkem [-]","Celkem [%]","OA [-]","OA [%]","NV [-]","NV [%]","BUS [-]","BUS [%]") df_DIprofilovyPruzkum <- df_predzpracovane k <- 0 i <- 0 for (k in 1:length(df_predzpracovane)) { df2 <- data.frame(matrix(nrow = 25, ncol = 10)) #Naplnění souboru dat vyhodnocení daty colnames(df2) = columns df2$Hodina <- seq(from=0,to=24) #Naplnění sloupce Hodina (hodnoty 0-23) df2[c(25),c("Hodina")] <- "CELKEM" df <- data.frame(df_predzpracovane[k]) #Výběr odpovídající tabulky (profilu) z tabulek předzpracovaných dat df2$Profil <- seznamProfilu[k] #Naplnění sloupce Profil df2$`Celkem [-]` <- 0 df2$`OA [-]` <- 0 df2$`NV [-]` <- 0 df2$`BUS [-]` <- 0 df2$`Celkem [%]` <- 0.00 #Předvyplnění sloupců s [%] hodnotou 0 df2$`OA [%]` <- 0 df2$`NV [%]` <- 0 df2$`BUS [%]` <- 0 for (i in 1:length(df$Cas)) { #extrahování hodiny z času záznamu vozidla v tabulce předzpracovaných dat df$priznak <- as.numeric(format(df$Cas, format= "%H")) #!!!!!!!!!!!!!!!! provizorní !!!!!!!!!!!!!!!!! -> Hodiny !!!!!!!!!!!! } i <- 0 for (i in 1:(length(df2$Hodina)-1)) { df2[c(i),c("Celkem [-]")] <- nrow(df[df$priznak == i-1,]) #Naplnění sloupce Celkem [-] df2[c(i),c("OA [-]")] <- nrow(df[df$priznak == i-1 & df$DruhVozidla == "OA", ]) #Naplnění sloupce OA [-] df2[c(i),c("NV [-]")] <- nrow(df[df$priznak == i-1 & df$DruhVozidla == "NV", ]) #Naplnění sloupce NV [-] df2[c(i),c("BUS [-]")] <- nrow(df[df$priznak == i-1 & df$DruhVozidla == "BUS", ]) ##Naplnění sloupce BUS [-] if (df2[c(i),c("Celkem [-]")] != 0) {df2[c(i),c("Celkem [%]")] <- 100.00} #Naplnění sloupců s [%] podílem if (df2[c(i),c("OA [-]")] != 0) {df2[c(i),c("OA [%]")] <- round((df2[c(i),c("OA [-]")] / df2[c(i),c("Celkem [-]")] *100), digits = 2)} if (df2[c(i),c("NV [-]")] != 0) {df2[c(i),c("NV [%]")] <- round((df2[c(i),c("NV [-]")] / df2[c(i),c("Celkem [-]")] *100), digits = 2)} if (df2[c(i),c("BUS [-]")] != 0) {df2[c(i),c("BUS [%]")] <- round((df2[c(i),c("BUS [-]")] / df2[c(i),c("Celkem [-]")] *100), digits = 2)} } df2[is.na(df2)] <- 0 df2[c(25),c("Celkem [-]")] <- sum(df2$`Celkem [-]`) #Přidání řádku se součty df2[c(25),c("OA [-]")] <- sum(df2$`OA [-]`) df2[c(25),c("NV [-]")] <- sum(df2$`NV [-]`) df2[c(25),c("BUS [-]")] <- sum(df2$`BUS [-]`) if (df2[c(25),c("Celkem [-]")] != 0) {df2[c(25),c("Celkem [%]")] <- 100.00} #Naplnění sloupců s [%] podílem if (df2[c(25),c("OA [-]")] != 0) {df2[c(25),c("OA [%]")] <- round((df2[c(25),c("OA [-]")] / df2[c(25),c("Celkem [-]")] *100), digits = 2)} if (df2[c(25),c("NV [-]")] != 0) {df2[c(25),c("NV [%]")] <- round((df2[c(25),c("NV [-]")] / df2[c(25),c("Celkem [-]")] *100), digits = 2)} if (df2[c(25),c("BUS [-]")] != 0) {df2[c(25),c("BUS [%]")] <- round((df2[c(25),c("BUS [-]")] / df2[c(25),c("Celkem [-]")] *100), digits = 2)} df2[nrow(df2)+1,] <- "" #Přidání řádku s poznámkou k počtu chybějících údajů o druhu vozidla df2[c(26),c("Hodina")] <- "POZNAMKA" if( any(df$DruhVozidla == "" ) == TRUE ) {df2[c(26),c("Profil")] <- "Data obsahuji chybejici udaje ve sloupci Druh Vozidla" df2[c(26),c("Celkem [-]")] <- "Pocet chybejicich udaju" df2[c(26),c("Celkem [%]")] <- nrow(df[df$DruhVozidla == "",]) df2[c(26),c("OA [-]")] <- "Procento chybejicich udaju" df2[c(26),c("OA [%]")] <- round((nrow(df[df$DruhVozidla == "",])/nrow(df) *100), digits = 2) } df_DIprofilovyPruzkum[k] <- list(df2) } ### TVORBA VYSTUPNICH TABULEK df_DIprofilovyPruzkumVystup <- list() k <- 0 index <- 0 index1 <- 0 for (k in 1:length(seznamStanovist)) { index <- which(profilStanoviste == seznamStanovist[k]) #Zjisteni, ktere profily odpovidaji stejnemu stanovisti i <- 0 df2 <- data.frame() df <- data.frame() for (i in 1:length(index)) { index1 <- index[i] df <- data.frame(df_DIprofilovyPruzkum[index1]) names(df) <- columns df2 <- bind_rows(df2,df) #Slouceni profilu stejneho stanoviste } df_DIprofilovyPruzkumVystup[k] <- list(df2) #Pridani stanoviste do listu } ##PŘIDÁNÍ CELKOVÉHO SOUČTU ZA STANOVIŠTĚ k <- 0 for (k in 1:length(df_DIprofilovyPruzkumVystup)) { if (length(which(Profily$profilStanoviste == seznamStanovist[k])) >1) { ##Pridani celkoveho souctu za stanoviste probehne, jen pokud stanoviste obsahuje vice profilu nez 1 df2 <- data.frame(df_DIprofilovyPruzkumVystup[k]) colnames(df2) = columns i <- 0 for (i in 0:23) { #Součty po jednotlivých hodinách celkem <- as.numeric(df2[c(which(df2$Hodina == i)[1]),c("Celkem [-]")])+ as.numeric(df2[c(which(df2$Hodina == i)[2]),c("Celkem [-]")]) oa <- as.numeric(df2[c(which(df2$Hodina == i)[1]),c("OA [-]")])+ as.numeric(df2[c(which(df2$Hodina == i)[2]),c("OA [-]")]) na <- as.numeric(df2[c(which(df2$Hodina == i)[1]),c("NV [-]")])+ as.numeric(df2[c(which(df2$Hodina == i)[2]),c("NV [-]")]) bus <- as.numeric(df2[c(which(df2$Hodina == i)[1]),c("BUS [-]")])+ as.numeric(df2[c(which(df2$Hodina == i)[2]),c("BUS [-]")]) if(celkem != 0) {celkemp <- 100} else {celkemp <- 0} if(oa != 0) {oap <- round(oa/celkem*100,digits = 2)} else {oap <- 0} if(na != 0) {nap <- round(na/celkem*100,digits = 2)} else {nap <- 0} if(bus != 0) {busp <- round(bus/celkem*100,digits = 2)} else {busp <- 0} df2[ nrow(df2) + 1 , c("Hodina","Profil","Celkem [-]","Celkem [%]","OA [-]","OA [%]","NV [-]","NV [%]","BUS [-]","BUS [%]") ] <- c(i,"Sloucene",celkem,celkemp,oa,oap,na,nap,bus,busp) } # Řádek celkem celkem <- as.numeric(df2[c(which(df2$Hodina == "CELKEM")[1]),c("Celkem [-]")])+ as.numeric(df2[c(which(df2$Hodina == "CELKEM")[2]),c("Celkem [-]")]) oa <- as.numeric(df2[c(which(df2$Hodina == "CELKEM")[1]),c("OA [-]")])+ as.numeric(df2[c(which(df2$Hodina == "CELKEM")[2]),c("OA [-]")]) na <- as.numeric(df2[c(which(df2$Hodina == "CELKEM")[1]),c("NV [-]")])+ as.numeric(df2[c(which(df2$Hodina == "CELKEM")[2]),c("NV [-]")]) bus <- as.numeric(df2[c(which(df2$Hodina == "CELKEM")[1]),c("BUS [-]")])+ as.numeric(df2[c(which(df2$Hodina == "CELKEM")[2]),c("BUS [-]")]) if(celkem != 0) {celkemp <- 100} else {celkemp <- 0} if(oa != 0) {oap <- round(oa/celkem*100, digits = 2)} else {oap <- 0} if(na != 0) {nap <- round(na/celkem*100, digits = 2)} else {nap <- 0} if(bus != 0) {busp <- round(bus/celkem*100, digits = 2)} else {busp <- 0} df2[ nrow(df2) + 1 , c("Hodina","Profil","Celkem [-]","Celkem [%]","OA [-]","OA [%]","NV [-]","NV [%]","BUS [-]","BUS [%]") ] <- c("CELKEM","Sloucene",celkem,celkemp,oa,oap,na,nap,bus,busp) #Řádek s poznámkou k chybějícím informacím o druhu vozidla if(df2[c(which(df2$Hodina == "POZNAMKA")[1]),c("Profil")] != "" || df2[c(which(df2$Hodina == "POZNAMKA")[2]),c("Profil")] != "" ) {poznamka <- "Data obsahuji chybejici udaje ve sloupci Druh Vozidla"} else {poznamka <- ""} if(df2[c(which(df2$Hodina == "POZNAMKA")[1]),c("Celkem [%]")] != "" ) {pocet1 <- as.numeric(df2[c(which(df2$Hodina == "POZNAMKA")[1]),c("Celkem [%]")])} else {pocet1 <- 0} if(df2[c(which(df2$Hodina == "POZNAMKA")[2]),c("Celkem [%]")] != "" ) {pocet2 <- as.numeric(df2[c(which(df2$Hodina == "POZNAMKA")[2]),c("Celkem [%]")])} else {pocet2 <- 0} pocet <- pocet1 + pocet2 if (pocet != 0) {procento <- round(pocet / as.numeric(df2[c(which(df2$Hodina == "CELKEM")[3]),c("Celkem [-]")]) *100, digits = 2)} else {procento <- ""} df2[ nrow(df2) + 1 , c("Hodina","Profil","Celkem [-]","Celkem [%]","OA [-]","OA [%]","NV [-]","NV [%]","BUS [-]","BUS [%]") ] <- c("POZNAMKA",poznamka,"Pocet chybejicich udaju",pocet,"Procento chybejicich udaju",procento,"","","","") df_DIprofilovyPruzkumVystup[k] <- list(df2) } } ##ULOŽENÍ ##Příprava cesty pro uložení souboru DIcharprofilovypruzkum <- paste(lokace,"/DIchar_profilovy-pruzkum/",sep = "") #Uložení tabulek (uložení datové sady je již v kroku "příprava dat") k<- 0 for (k in 1:length(df_DIprofilovyPruzkumVystup)) { nazev <- paste(seznamStanovist[c(k)],"_DIchar_profilovy-pruzkum",sep = "") cesta <- paste(DIcharprofilovypruzkum,nazev,csv, sep="") df2 <- data.frame(df_DIprofilovyPruzkumVystup[k]) colnames(df2) = columns write.table(df2,file=cesta,fileEncoding = "UTF-8",row.names = FALSE,sep = ";", dec = ",") } ############################################################################################################## ############################################################################################################## ###PRVOTNÍ PÁROVÁNÍ DAT SloucenaData$priznak <- "" SloucenaData <- SloucenaData[order(SloucenaData$RZ,SloucenaData$Cas),] #Setřídění dle RZ a času SloucenaData$priznak2 <- "" #Přidání sloupce s 2. příznakem ##Přidání příznaků do SloucenaData = informace o době jízdy do následujícího profilu a o názvu profilu i <- 0 for (i in 1:(length(SloucenaData$RZ)-1)) { if (SloucenaData$RZ[i] == SloucenaData$RZ[i+1]) { SloucenaData$priznak[i] <- (as.numeric(difftime(SloucenaData$Cas[i+1], SloucenaData$Cas[i], units="secs"))) #casovy rozdil SloucenaData$priznak2[i] <- SloucenaData$Profil[i+1] #nasledujici profil } } ##Vytvoření názvů dataframeů listu Párování1 i <- 0 j <- 0 columns2 <- "" for (i in 1:length(seznamProfilu)) { nazev1 <- seznamProfilu[i] for (j in 1:length(seznamProfilu)) { nazev2 <- seznamProfilu[j] nazev <- paste(nazev1,nazev2,sep = "") columns2 <- append(columns2,nazev) } } columns2 <- columns2[-1] ##Tvorba listu Párování1 Komb <- length(seznamProfilu)*length(seznamProfilu) #Počet prvků listu = počet všech možných kombinací profilů df_Parovani1 <- vector("list",0) columns3 <- c("ID","RZ","DruhVozidla","CasProfil1","CasProfil2","DobaJizdy","Profil1","Profil2") i <- 0 ## Obsahem listu jsou prázdné dataframey s 5 sloupci s názvy for(i in 1:Komb) { df2 <- data.frame(matrix(nrow = 0, ncol = 8)) colnames(df2) <- columns3 #df2[1,] <- "" df_Parovani1 <- c(list(df2), df_Parovani1) } names(df_Parovani1) <- columns2 ##Přesun hodnot příznaků z SloucenaData do listu Parovani1 i <- 0 for (i in 1:length(SloucenaData$RZ)) { j <- 0 if (SloucenaData$priznak[i] != "") { nazev <- paste(SloucenaData$Profil[i],SloucenaData$priznak2[i], sep = "") #Určení, do kterého dataframeu v rámci listu Parovani1 se budou hodnoty ukládat j <- as.numeric(which(columns2 == nazev)) cas1 <- as.character(format(SloucenaData$Cas[i], format="%H:%M:%S")) #Příprava časového údaje záznamu v 1. profilu na přesun cas2 <- as.character(format(SloucenaData$Cas[i+1], format="%H:%M:%S")) #Příprava časového údaje záznamu v 2. profilu na přesun df2 <- data.frame(df_Parovani1[j]) #Výběr správného dataframeu z listu #print(df2) colnames(df2) <- columns3 #Změna názvu sloupců v dataframeu df2[ nrow(df2) + 1 , c("ID","RZ","DruhVozidla","CasProfil1","CasProfil2","DobaJizdy","Profil1","Profil2")] <- c(SloucenaData[i,c("ID"),],SloucenaData[i,c("RZ"),],SloucenaData[i,c("DruhVozidla"),],cas1,cas2,SloucenaData[i,c("priznak"),],SloucenaData[i,c("Profil"),],SloucenaData[i,c("priznak2"),]) #Přidání hodnot (1 řádku) } df_Parovani1[j] <- list(df2) } ##Tvorba listu df_Parovani1relevantni, který bude obsahovat pouze relevantní kombinace profilů pro vyhodnocení doby jízdy (průjezd X pobyt) df_Parovani1relevantni <- df_Parovani1 #tvorba listu #Stanovení indikátoru relevance profilů ano/ne profilySparovane <- columns2 i <- 0 j <- 0 polohaRelevance <- "" for (i in 1:length(polohaProfilu)) { poloha1 <- polohaProfilu[i] for (j in 1:length(polohaProfilu)) { poloha2 <- polohaProfilu[j] # nazev <- paste(nazev1,nazev2,sep = "") if (poloha1 == "out") {relevance <- "ne"} else if (poloha1 == "uvnitr" & poloha2 == "in") {relevance <- "ne"} else if (poloha1 == "in" & poloha2 == "in") {relevance <- "ne"} else {relevance <- "ano"} polohaRelevance <- append(polohaRelevance, relevance) } } polohaRelevance <- polohaRelevance[-1] #Úprava indikátoru relevance s ohledem na profily na stejném stanovišti ### Funguje urcite na stanoviste s poctem profilu 1-2 k <- 0 index <- 0 for (k in 1:length(seznamStanovist)) { #Prochazim seznam stanovist index <- which(profilStanoviste == seznamStanovist[k]) #Zjisteni, ktere profily odpovidaji stejnemu stanovisti if (length(index) > 1){ #Resim jen stanoviste, ktere obsahuji vice profilu #print(append("Profil",k)) i <- 1 index1 <- 0 index2 <- 0 profil1 <- "" profil2 <- "" while (i < length(index)){ index1 <- which(profilStanoviste == seznamStanovist[k])[i] #nastaveni indikatoru cisla sloupce profilu 1 index2 <- index1+1 #nastaveni indikatoru cisla sloupce profilu 2 profil1 <- seznamProfilu[index1] #urceni profilu 1 j <- 0 for (j in (i+1):length(index)) { profil2 <- seznamProfilu[index2] #urceni profilu 2 #print(append(profil1,profil2)) #Nastaveni indikatoru relevance profil <- paste(profil1,profil2,sep = "") l <- which(profilySparovane == profil) polohaRelevance[l] <- "ne" profil <- paste(profil2,profil1,sep = "") l <- which(profilySparovane == profil) polohaRelevance[l] <- "ne" profil <- paste(profil1,profil1,sep = "") l <- which(profilySparovane == profil) polohaRelevance[l] <- "ne" profil <- paste(profil2,profil2,sep = "") l <- which(profilySparovane == profil) polohaRelevance[l] <- "ne" index2 <- index2+1 } i <- i+1 } } } #Odstranění nerelevantních kombinací profilů dle indikátoru index <- which(polohaRelevance == "ne") df_Parovani1relevantni <- df_Parovani1relevantni[- index] #Odstranění prázdných kombinací profilů is_empty <- function(df_Parovani1relevantni) (nrow(df_Parovani1relevantni)!=0 & ncol(df_Parovani1relevantni) !=0) #zjištění prázdných kombinací profilů df_Parovani1relevantni <- df_Parovani1relevantni[sapply(df_Parovani1relevantni, is_empty)] #odstranění prázdných kombinací profilů #Zjištění názvů relevantních kombinací profilů ( = zbylých položek listu) columns4 <- names(df_Parovani1relevantni) ##Tvorba listu pro ukládání grafů pro statistické hodnocení df_Parovani1grafy <- list() #Příprava listu pro ukládání grafů ##Příprava matice T_lim Matice_Tlim <- matrix(0, nrow = length(seznamProfilu), ncol = length(seznamProfilu),dimnames = list(seznamProfilu, seznamProfilu)) ##Tvorba grafů, výpočet a uložení mediánu a T_lim k <- 0 for (k in 1:length(df_Parovani1relevantni)) { df2 <- data.frame(df_Parovani1relevantni[k]) colnames(df2) <- columns3 nazev <- paste("Graf doby jízdy vozidel v relaci",columns4[k]) med <- (median(as.numeric(df2$DobaJizdy))) medhod <- round(med/60,1) medp <- paste("median =",as.character(medhod),"min") if(medhod <= 3) {Tlim <- round(3*as.numeric(med)) } ### -> když med <= 3 min -> krát3, když med <= 5min -> krát 2, jinak krát 1,5 else if(medhod <= 5) {Tlim <- round(2*as.numeric(med)) } else {Tlim <- round(1.5*as.numeric(med)) } Tlimhod <- round(Tlim/60,1) Tlimp <- paste("Tlim =",as.character(Tlimhod),"min") if (length(df2$DobaJizdy)>50) { i <- 50 j <- as.numeric(round(length(df2$DobaJizdy)/i)) graf <- ggplot(df2, aes(x = CasProfil1 ,y=as.numeric(DobaJizdy))) + geom_point() + ggtitle(nazev) + labs(x="Čas záznamu vozidla v 1. profilu", y="Doba jízdy vozidla [s]") + scale_y_continuous(breaks = c(pretty(as.numeric(df2$DobaJizdy)), as.numeric(med), as.numeric(Tlim)), labels = c(pretty(as.numeric(df2$DobaJizdy)), as.character(medp), Tlimp))+ theme( plot.title=element_text(size=14, lineheight=1, color= 1, hjust=0.5), axis.title.x=element_text(color=1), #axis.text.x= element_text(angle = 90), axis.text.x=element_text(color=rep(c("black", rep("transparent", each =j)), i),angle = 90), axis.title.y=element_text(color=1))+ geom_hline(yintercept=as.numeric(med),color = "green")+ geom_hline(yintercept=as.numeric(Tlim),color = "red") } else { graf <- ggplot(df2, aes(x = CasProfil1 ,y=as.numeric(DobaJizdy))) + geom_point() + ggtitle(nazev) + labs(x="Čas záznamu vozidla v 1. profilu", y="Doba jízdy vozidla [s]") + scale_y_continuous(breaks = c(pretty(as.numeric(df2$DobaJizdy)), as.numeric(med), as.numeric(Tlim)), labels = c(pretty(as.numeric(df2$DobaJizdy)), as.character(medp), Tlimp))+ theme( plot.title=element_text(size=14, lineheight=1, color= 1, hjust=0.5), axis.title.x=element_text(color=1), axis.text.x= element_text(angle = 90), #axis.text.x=element_text(color=rep(c("black", rep("transparent", each =j)), i),angle = 90), axis.title.y=element_text(color=1))+ geom_hline(yintercept=as.numeric(med),color = "green")+ geom_hline(yintercept=as.numeric(Tlim),color = "red") } print(graf) df_Parovani1grafy[[k]] <- graf # add each plot into plot list #Uložení mediánu a Tlim do seznamu relevantních profilů df2[nrow(df2)+1, c("CasProfil1","CasProfil2","DobaJizdy","Profil1","Profil2")] <- c("Median [s]",med,"","","") df2[nrow(df2)+1, c("CasProfil1","CasProfil2","DobaJizdy","Profil1","Profil2")] <- c("T_lim navrzeny [s]",Tlim,"","","") df2[nrow(df2)+1, c("CasProfil1","CasProfil2","DobaJizdy","Profil1","Profil2")] <- c("T_lim final [s]",Tlim,"","","") df_Parovani1relevantni[k] <- list(df2) #Uložení T_lim do matice profil1 <- df2$Profil1[1] #definování, do jaké buňky matice bude počet uložen profil2 <- df2$Profil2[1] Matice_Tlim[profil1,profil2] <- Tlim #uložení počtu do konkrétní buňky matice } #Doplnění T_lim pro opakovaný průjezd stejným (vnitřním) profilem do matice -> upravila jsem nakonec pro všechny profily i <- 0 j <- 0 for (i in 1:length(seznamStanovist)) { if (length(which(Profily$profilStanoviste == seznamStanovist[i])) >1) { index1 <- which(profilStanoviste == seznamStanovist[i])[1] index2 <- which(profilStanoviste == seznamStanovist[i])[2] profil1 <- seznamProfilu[index1] ##############!!!!!!!!!!!!!!!POZOR - POČÍTÁM S TÍM, ŽE STANOVIŠTĚ MÁ 2 PROFILY !!!!!!!!!!!! BUDE NUTNO UPRAVIT profil2 <- seznamProfilu[index2] # if(polohaProfilu[index1] == "uvnitr" & polohaProfilu[index2] == "uvnitr" & profilStanoviste[index1] == profilStanoviste[index2]) { if(profilStanoviste[index1] == profilStanoviste[index2]) { Matice_Tlim[profil1,profil2] <- 180 Matice_Tlim[profil2,profil1] <- 180 Matice_Tlim[profil1,profil1] <- 180 Matice_Tlim[profil2,profil2] <- 180 } } else {index1 <- which(profilStanoviste == seznamStanovist[i]) profil1 <- seznamProfilu[index1] Matice_Tlim[profil1,profil1] <- 180} } ##EXPORT Parovani1 <- paste(lokace,"/Prvotni-Parovani/",sep = "") #Export tabulky sparovanych dat (SparovanaData <- SloucenaData) SparovanaData <- SloucenaData names(SparovanaData)[names(SparovanaData) == "priznak"] <- "CasovyRozdil [s]" ##Přejmenování sloupců names(SparovanaData)[names(SparovanaData) == "priznak2"] <- "Profil2" SparovanaData[,c("Cas")] <- format(SparovanaData[,c("Cas")], format="%H:%M:%S") #Uprava casoveho formatu nazev <- "SparovanaData" cesta <- paste(Parovani1,nazev,csv, sep="") write.table(SparovanaData,file=cesta,fileEncoding = "UTF-8",row.names = FALSE,sep = ";", dec = ",") #Export grafů do pdf nazev <- "Statisticke-vyhodnoceni-grafy" cesta <- paste(Parovani1,nazev,".pdf", sep="") k <- 0 pdf(cesta,onefile = TRUE) for(k in 1:length(df_Parovani1grafy)) { graf <- df_Parovani1grafy[k] print(graf) } dev.off() #Export tabulek (uložení datové sady je již v kroku "příprava dat") k<- 0 for (k in 1:length(df_Parovani1relevantni)) { nazev <- paste(columns4[c(k)],"_Relace-pro-hodnoceni-Tlim",sep = "") cesta <- paste(Parovani1,nazev,csv, sep="") df2 <- data.frame(df_Parovani1relevantni[k]) colnames(df2) = columns3 names(df2)[names(df2) == "DobaJizdy"] <- "CasovyRozdil [s]" write.table(df2,file=cesta,fileEncoding = "UTF-8",row.names = FALSE,sep = ";", dec = ",") } #Export matice T_lim Matice_Tlim_Vystup <- Matice_Tlim nazvyradku <- append("",seznamProfilu) #přidání řádku a sloupce s názvy profilů, aby byly součástí exportu ve správném formátu Matice_Tlim_Vystup <- rbind(seznamProfilu,Matice_Tlim) Matice_Tlim_Vystup <- cbind(nazvyradku,Matice_Tlim_Vystup) nazev <- "Matice_T_lim" cesta <- paste(Parovani1,nazev,csv, sep="") write.table(Matice_Tlim_Vystup,file=cesta,fileEncoding = "UTF-8",row.names = FALSE, col.names = FALSE, sep = ";", dec = ",") ############################################################################################################## ############################################################################################################## ###FINÁLNÍ PÁROVÁNÍ DAT Matice_Tlim_final <- data.matrix(read.csv(cesta, sep=";", encoding = "UTF-8")) Matice_Tlim_final <- Matice_Tlim_final[,colnames(Matice_Tlim_final)!="X"] rownames(Matice_Tlim_final) <- seznamProfilu #Příprava dataframeu ParovaniFinal, kde bude probíhat finální párování = určování cest SloucenaDataParovaniFinal <- SloucenaData names(SloucenaDataParovaniFinal)[names(SloucenaDataParovaniFinal) == "priznak"] <- "DobaJizdy" names(SloucenaDataParovaniFinal)[names(SloucenaDataParovaniFinal) == "priznak2"] <- "Profil2" ##Přejmenování sloupců names(SloucenaDataParovaniFinal)[names(SloucenaDataParovaniFinal) == "Profil"] <- "Profil1" names(SloucenaDataParovaniFinal)[names(SloucenaDataParovaniFinal) == "Cas"] <- "Cas1" #Tvorba dataframeu ParovaniFinal ParovaniFinal <- SloucenaDataParovaniFinal ParovaniFinal <- ParovaniFinal[order(ParovaniFinal$RZ),] #Seřazení podle RZ ParovaniFinal$DelkaCesty <- "1" # Přidání sloupce s příznakem počtu projetých stanovišť v rámci jedné cesty ParovaniFinal$IndikatorParovani <- "sparovana RZ" # Přidání sloupce s příznakem označujícím jedinečnost RZ #ParovaniFinal <- ParovaniFinal %>% select(-c(DruhVozidlaOriginal)) # Odstranění sloupce s originálem druhu vozidla #Přidání údaje o Druhu vozidla k chybějícím záznamům (pokud existuje alespoň u 1 záznamu RZ) -> !!!!!!!!!!Přesunout výše i <- 1 j <- 0 k <- 0 druhvoz <- "" while (i <= (length(ParovaniFinal$RZ)-1)) { j <- i+1 k <- 0 while ((ParovaniFinal$RZ[j] == ParovaniFinal$RZ[i]) & (k == 0)){ if (ParovaniFinal$DruhVozidla[i] != "") {druhvoz <- ParovaniFinal$DruhVozidla[i] } if (ParovaniFinal$DruhVozidla[j] != "") {druhvoz <- ParovaniFinal$DruhVozidla[j] } if(j == length(ParovaniFinal$RZ)) {k <- 1 } else { j <- j+1} } if (druhvoz != "") { k <-0 for (k in i:(j-1)) { ParovaniFinal$DruhVozidla[k] <- druhvoz } druhvoz <- "" } i <- j } unikatni <- ParovaniFinal$RZ[!(duplicated(ParovaniFinal$RZ)|duplicated(ParovaniFinal$RZ, fromLast=TRUE))] #Označení unikátních RZ for (i in 1: length(ParovaniFinal$RZ)) { if (ParovaniFinal$RZ[i] %in% unikatni) {ParovaniFinal$IndikatorParovani[i] <- "nesparovana RZ"} } ParovaniFinal$DobaJizdy[ParovaniFinal$DobaJizdy==""] <- 0 #Nahrazení prázdných řádků v DobaJizdy -> 0 ParovaniFinal$ProfilSrov <- ParovaniFinal$Profil1 #Přidání sloupce ProfilSrov, který bude při hledání cest sloužit k zjišťování indexu pro Tlim ParovaniFinal$Parind <-"ne" #Indikátor: "ano" -> budu připojovat následující řádek do cesty, "ne" -> nebudu #Nastavení párovacího indikátoru Parind i <- 0 for (i in 1:length(ParovaniFinal$RZ)) { index1 <- "" index2 <- "" Tlim <-0 if (as.numeric(ParovaniFinal$DobaJizdy[i]) > 0) { #Podmínka, aby se řešilo, zda jde o cestu: DobaJizdy musí obsahovat hodnotu index1 <- ParovaniFinal$ProfilSrov[i] #1. souřadnice T_lim v matici index2 <- ParovaniFinal$ProfilSrov[i+1] #2. souřadnice T_lim v matici Tlim <- Matice_Tlim_final[index1,index2] #Nalezení T_lim v matici #Srovnání doby jízdy s Tlim if (as.numeric(ParovaniFinal$DobaJizdy[i])<=Tlim) {ParovaniFinal$Parind[i] <- "ano"} } } #Změna pořadí sloupců ParovaniFinal <- ParovaniFinal[,c("ID","RZ","DruhVozidla","IndikatorParovani","DelkaCesty","DobaJizdy","ProfilSrov","Parind","Profil1","Cas1","Profil2")] #Tvorba výchozího dataframeu pro následné VYHODNOCENÍ PROFILŮ VyhodnoceniProfilu <- ParovaniFinal ParovaniFinal <- ParovaniFinal %>% select(-c(Profil2)) ##Hledání cest = Finální párování k <- 2 #while (sum(as.numeric(ParovaniFinal$DobaJizdy)) > 0) { #Podmínka opakování cyklu = sloupec DobaJizdy není prázdný while (any(ParovaniFinal$Parind == "ano") == TRUE){ ParovaniFinal$Profilnovy <- "" #Přidání nového sloupce pro další profil v rámci 1 cesty ParovaniFinal$Casnovy <- "" #Přidání nového sloupce pro další čas průjezdu v rámci 1 cesty ParovaniFinal$Casnovy <- strptime(ParovaniFinal$Casnovy, format = "%H:%M:%OS") #Úprava časového formátu parind <- "ne" #Nastavení indikátoru smazind <- "ano" #Nastavení indikátoru i <- 0 for (i in 1:(length(ParovaniFinal$RZ)-1)) { #Procházím všechny řádky #nastavení indikátoru smazind if (parind == "ne" & ParovaniFinal$Parind[i] == "ano") {smazind <-"ano"} #smazind == "ano" -> mohu přidat "smazat" k následujícímu řádku; smazind == "ne" -> nemohu if (ParovaniFinal$Parind[i] =="ano" & smazind == "ano") { #Tzn. pokud chci připojovat následující řádek do cesty #připojení následujícího řádku do cesty if(ParovaniFinal$DelkaCesty[i] != "smazat") {ParovaniFinal$DelkaCesty[i] <- as.numeric(ParovaniFinal$DelkaCesty[i])+1 } #Zvýšení indikátoru počtu záznamů v 1 cestě ParovaniFinal$Casnovy[i] <- ParovaniFinal$Cas1[i+1] #Zkopírování času z následujícího záznamu ParovaniFinal$Profilnovy[i] <- ParovaniFinal$Profil1[i+1] #Zkopírování profilu z následujícího záznamu ParovaniFinal$DobaJizdy[i] <- ParovaniFinal$DobaJizdy[i+1] #Zkopírování doby jízdy z následujícího záznamu ParovaniFinal$ProfilSrov[i] <- ParovaniFinal$Profil1[i+1] #Zkopírování srovnávacího profilu z následujícího záznamu ParovaniFinal$Parind[i] <- ParovaniFinal$Parind[i+1] #Zkopírování indikátoru, zda chci připojovat následující řádek do cesty ParovaniFinal$DelkaCesty[i+1] <- "smazat" smazind <- "ne" } else { #Porovnání Doby jízdy s Tlim, pokud je Doba jízdy větší, dojde k oddělení cest ParovaniFinal$DobaJizdy[i] <- 0 #Odstranění indikátoru doby jízdy mezi profily } parind <- ParovaniFinal$Parind[i] #Indikátor pro určení, zda proběhla změna parind } #přejmenování sloupců nazev1 <- paste("Profil",k,sep = "") nazev2 <- paste("Cas",k,sep = "") names(ParovaniFinal)[names(ParovaniFinal) == "Profilnovy"] <- nazev1 #Přejmenování nových sloupců names(ParovaniFinal)[names(ParovaniFinal) == "Casnovy"] <- nazev2 #Přejmenování nových sloupců k <- k+1 #smazání řádků s příznakem "smazat" ParovaniFinal <- subset(ParovaniFinal,DelkaCesty!="smazat" ) #Odstranění řádků s příznakem "smazat" } ParovaniFinal <- ParovaniFinal %>% select(-c(DobaJizdy,Parind,ProfilSrov)) #Odebrání indikačních sloupců sloužících pro účel stanovení cest ParovaniFinal <- ParovaniFinal[order(ParovaniFinal$Cas1),] #Serazeni dle casu ParovaniFinal$ID <- seq.int(nrow(ParovaniFinal)) #Změna ID -> nové ID cest #Jaká maximální délka cesty byla nalezena? delkacestymax <- as.numeric(max(ParovaniFinal$DelkaCesty)) #Pridani poznamky u potencialne nelogickych cest = cesty, ktere obsahuji po sobe nasledujici prujezd stejnym profilem v case <180 s ParovaniFinal$Poznamka <- "" k <- 0 for (k in 1:length(ParovaniFinal$RZ)) { j <- 0 i <- 0 index <- 0 index1 <- 0 index2 <- 0 profil1 <- "" profil2 <- "" if (ParovaniFinal$DelkaCesty[k] >=2){ for (i in 2:as.numeric(ParovaniFinal$DelkaCesty[k])) { index <- which(colnames(ParovaniFinal)=="Profil1") profil1 <- ParovaniFinal[c(k),c(index+j)] profil2 <- ParovaniFinal[c(k),c(index+j+2)] index1 <- which(Profily$seznamProfilu == profil1) index2 <- which(Profily$seznamProfilu == profil2) if(Profily$profilStanoviste[index1] == Profily$profilStanoviste[index2]) {ParovaniFinal$Poznamka[k] <- "Potencialne nelogicka cesta"} j <- j+2 } } } ##Pridani sloupcu PosledniProfil a PosledniCas ParovaniFinal_OD <- ParovaniFinal ParovaniFinal_OD$PosledniProfil <- "" ParovaniFinal_OD$PosledniCas <- "" ParovaniFinal_OD$PosledniCas <- strptime(ParovaniFinal_OD$PosledniCas, format = "%H:%M:%OS") #Vyplneni sloupcu PosledniProfil a PosledniCas = jen pokud cesta obsahuje prujezd vice nez 1 profilem profil <- "" cas <- "" index1 <- 0 index2 <- 0 i <- 0 if (delkacestymax > 1) { #Pokud by maximální délka cesty byla 1, nebude se provádět for (i in 2:delkacestymax) { profil <- paste("Profil",i,sep = "") #Určení sloupců profilu a času, ze kterých se budou přesouvat hodnoty do sloupců s posledním profilem a časem cas <- paste("Cas",i,sep = "") index1 <- which(colnames(ParovaniFinal_OD) == profil) index2 <- which(colnames(ParovaniFinal_OD) == cas) j <- 0 for (j in 1:length(ParovaniFinal_OD$RZ)) { #vyplnění sloupců PosledniProfil a PosledniCas if (ParovaniFinal_OD[j,index1] != ""){ ParovaniFinal_OD$PosledniProfil[j] <- ParovaniFinal_OD[j,index1] ParovaniFinal_OD$PosledniCas[j] <- ParovaniFinal_OD[j,index2]} } } } ##Pridani informace o typu cesty do dataframeu ParovaniFinal_OD ParovaniFinal_OD$TypCesty <- "" i <- 0 index1 <- 0 index2 <- 0 poloha1 <- "" poloha2 <- "" for (i in 1:length(ParovaniFinal_OD$RZ)) { index1 <- which(Profily$seznamProfilu == ParovaniFinal_OD$Profil1[i]) #Urceni polohy 1. profilu (in, out, uvnitr) poloha1 <- Profily$polohaProfilu[index1] if (ParovaniFinal_OD$PosledniProfil[i] == "") {poloha2 <- "" #Urceni polohy posledniho profilu (out, uvnitr, "") } else {index2 <- which(Profily$seznamProfilu == ParovaniFinal_OD$PosledniProfil[i]) poloha2 <- Profily$polohaProfilu[index2]} if ( poloha1 == "in" & poloha2 == "out" ) {ParovaniFinal_OD$TypCesty[i] <- "tranzit"} #tranzitni cesta else if ((poloha1 == "uvnitr" & poloha2 == "")|(poloha1 == "uvnitr" & poloha2 == "uvnitr")) {ParovaniFinal_OD$TypCesty[i] <- "vnitrni"} #vnitrni cesta else if ((poloha1 == "out" & poloha2 == "")|(poloha1 == "uvnitr" & poloha2 == "out")) {ParovaniFinal_OD$TypCesty[i] <- "zdroj"} #zdrojova cesta else if ((poloha1 == "in" & poloha2 == "")|(poloha1 == "in" & poloha2 == "uvnitr")) {ParovaniFinal_OD$TypCesty[i] <- "cil"} #cilova cesta } #Příprava na export ParovaniFinalVystup <- ParovaniFinal_OD i <- 0 nazev <- "" #Uprava casoveho formatu for(i in 1:delkacestymax) { nazev <- paste("Cas",i,sep = "") index <- which(colnames(ParovaniFinalVystup) == nazev) ParovaniFinalVystup[,index] <- format(ParovaniFinalVystup[,index], format="%H:%M:%S") } ParovaniFinalVystup[,c("PosledniCas")] <- format(ParovaniFinalVystup[,c("PosledniCas")], format="%H:%M:%S") ParovaniFinalVystup[is.na(ParovaniFinalVystup)] <- "" #Zmena NA za prazdne pole "" Parovanifinal <- paste(lokace,"/Parovani-final/",sep = "") nazev <- "Cesty" cesta <- paste(Parovanifinal,nazev,csv, sep="") write.table(ParovaniFinalVystup,file=cesta,fileEncoding = "UTF-8",row.names = FALSE,sep = ";", dec = ",") ############################################################################################################## ############################################################################################################## ###MATICE SPÁROVANÝCH DAT, OD MATICE ##Tvorba matice sparovanych dat Profily <- Profily[order(Profily$polohaProfilu),] Matice_sparovana <- matrix(0, nrow = length(Profily$seznamProfilu), ncol = length(Profily$seznamProfilu),dimnames = list(Profily$seznamProfilu, Profily$seznamProfilu)) k <- 0 for (k in 1:length(df_Parovani1)){ df2 <- data.frame(df_Parovani1[k]) colnames(df2) <- columns3 pocet <- nrow(df2) #zjištění počtu řádků (tzn. průjezdů mezi 2 po sobě následujícími profily) if (pocet != 0) { profil1 <- df2$Profil1[1] #definování, do jaké buňky matice bude počet uložen profil2 <- df2$Profil2[1] Matice_sparovana[profil1,profil2] <- pocet #uložení počtu do konkrétní buňky matice } } ##Pripojeni sloupce jedinecnych RZ Jedinecne_RZ <- vector(mode="numeric", length=length(Profily$seznamProfilu)) #Priprava sloupce jedinecnych RZ Matice_sparovana <- cbind(Matice_sparovana,Jedinecne_RZ) #Pridani sloupce jedinecnych RZ k pripravene Matice_sparovana i <- 0 ##Vyplneni sloupce jedinecnych RZ for (i in 1:length(ParovaniFinal$IndikatorParovani)){ if (ParovaniFinal$IndikatorParovani[i] == "nesparovana RZ") { #Vyuziti sloupce "Indikator Parovani" v dataframeu ParovaniFinal profil1 <- ParovaniFinal$Profil1[i] #definování, do jaké buňky matice bude počet uložen profil2 <- "Jedinecne_RZ" Matice_sparovana[profil1,profil2] <- Matice_sparovana[profil1,profil2]+1 #zvyseni poctu v konkretni bunce matice o 1 } } #Tvorba OD matice nazvyradku <- append(seznamStanovist,"uvnitr") nazvysloupcu <- nazvyradku Matice_OD <- matrix(0, nrow = length(seznamStanovist)+1, ncol = length(seznamStanovist)+1,dimnames = list(nazvyradku, nazvysloupcu)) #Vyplneni OD matice profil1 <- "" profil2 <- "" index1 <- 0 index2 <- 0 i <- 0 for (i in 1:length(ParovaniFinal_OD$RZ)) { if (ParovaniFinal_OD$PosledniProfil[i] != "") {index1 <- which(Profily$seznamProfilu == ParovaniFinal_OD$Profil1[i]) #Vyplneni cest, které projely min. 2 profily (tzn. je vyplnen sloupec PosledniProfil) index2 <- which(Profily$seznamProfilu == ParovaniFinal_OD$PosledniProfil[i]) profil1 <- Profily$profilStanoviste[index1] profil2 <- Profily$profilStanoviste[index2] } else { #Vyplneni cest sparovanych RZ, ktere projely jen 1 profilem index1 <- which(Profily$seznamProfilu == ParovaniFinal_OD$Profil1[i]) if (Profily$polohaProfilu[index1] == "in" | Profily$polohaProfilu[index1] == "uvnitr") {profil1 <- Profily$profilStanoviste[index1] profil2 <- "uvnitr"} if (Profily$polohaProfilu[index1] == "out") {profil1 <- "uvnitr" profil2 <- Profily$profilStanoviste[index1]} } Matice_OD[profil1,profil2] <- Matice_OD[profil1,profil2]+1 } ##Export matic Parovanifinal <- paste(lokace,"/Parovani-final/",sep = "") #tvorba cesty pro uložení #Matice sparovanych dat nazvyradku <- "" nazvysloupcu <- "" nazvyradku <- Profily$seznamProfilu nazvysloupcu <- append(Profily$seznamProfilu,"Jedinecne_RZ") nazvysloupcu <- append("",nazvysloupcu) Matice_sparovana_Vystup <- cbind(nazvyradku,Matice_sparovana) #pridani radku a sloupce s nazvy radku/sloupcu, aby byly soucasti exportu Matice_sparovana_Vystup <- rbind(nazvysloupcu,Matice_sparovana_Vystup) nazev <- "Matice_sparovanych_dat" cesta <- paste(Parovanifinal,nazev,csv,sep = "") write.table(Matice_sparovana_Vystup,file = cesta,fileEncoding = "UTF-8",row.names = FALSE,col.names = FALSE,sep = ";",dec = ",") #ulozeni #Matice OD nazvyradku <- "" nazvysloupcu <- "" nazvyradku <- append(seznamStanovist,"uvnitr") nazvysloupcu <- append("",nazvyradku) Matice_OD_Vystup <- cbind(nazvyradku,Matice_OD) #pridani radku a sloupce s nazvy radku/sloupcu, aby byly soucasti exportu Matice_OD_Vystup <- rbind(nazvysloupcu,Matice_OD_Vystup) nazev <- "Matice_OD" cesta <- paste(Parovanifinal,nazev,csv,sep = "") write.table(Matice_OD_Vystup,file = cesta,fileEncoding = "UTF-8",row.names = FALSE,col.names = FALSE,sep = ";",dec = ",") #ulozeni ############################################################################################################## ############################################################################################################## ###VYHODNOCENÍ MĚŘÍCÍCH PROFILŮ ##Tvorba listu, který obsahuje dataframey pro každý měřící profil df_vyhodnoceniProfilu <- df_predzpracovane k <- 0 for (k in 1:length(df_predzpracovane)) { df2 <- data.frame(df_vyhodnoceniProfilu[k]) #nacteni z listu #Pridani sloupcu pro vyhodnoceni mericich profilu df2$PredchoziProfil <- "" df2$NaslednyProfil <- "" df2$TypCesty <- "" df2$Jedinecne_RZ <- "" df2$Poznamka <- "" #Zjisteni vyhodnocovaneho profilu profil <- df2$Profil[1] #Vyfiltrovani z tabulky cest jen tech zaznamu, ktere obsahuji vyhodnocovany profil df1 <- ParovaniFinal_OD %>% filter_all(any_vars(. %in% c(profil))) #Zjisteni polohy profilu (in/out/uvnitr) index <- 0 poloha1 <- "" index <- which(Profily$seznamProfilu == profil) poloha1 <- Profily$polohaProfilu[index] #Priprava vektoru s nazvy sloupcu, ktere obsahuji casove udaje -> zmena formatu casu i <- 0 nazev1 <- "" nazev <- "Cas1" for(i in 2:delkacestymax) { nazev1 <- paste("Cas",i,sep = "") nazev <- append(nazev,nazev1) } nazev <- append(nazev,"PosledniCas") df1[,c(nazev)] <- format(df1[,c(nazev)], format="%H:%M:%S") df2[,c("Cas")] <- format(df2[,c("Cas")], format="%H:%M:%S") i <- 0 index <- 0 cas <- "" rz <- "" for (i in 1:length(df2$RZ)){ rz <- df2$RZ[i] cas <- df2$Cas[i] df <- df1 %>% filter_all(any_vars(. %in% c(rz))) df <- df %>% filter_all(any_vars(. %in% c(cas))) df2$Jedinecne_RZ[i] <- df$IndikatorParovani[1] #Vyplneni informace o sparovani RZ df2$TypCesty[i] <- df$TypCesty[1] #Vyplneni informace o typu cesty if (df2$DruhVozidla[i] == "") {df2$DruhVozidla[i] <- df$DruhVozidla[1]} #Presunuti info o druhu vozidla df2$Poznamka[i] <- df$Poznamka[1] #Presunuti info o poznamce o potencialne nelogickych cestach #Vyplneni informace o predchozim a nasledujicim profilu if (df$PosledniProfil == "") { if (poloha1 == "in") {df2$PredchoziProfil[i] <- "vne" df2$NaslednyProfil[i] <- "uvnitr"} else if (poloha1 == "out") {df2$PredchoziProfil[i] <- "uvnitr" df2$NaslednyProfil[i] <- "vne"} else if (poloha1 == "uvnitr") {df2$PredchoziProfil[i] <- "uvnitr" df2$NaslednyProfil[i] <- "uvnitr"} } else { if (poloha1 == "in") {df2$PredchoziProfil[i] <- "vne" index <- which(colnames(df)=="Profil1")+2 df2$NaslednyProfil[i] <- df[1,index]} else if (poloha1 == "out") {# df[,c(nazev)] <- format(df[,c(nazev)], format="%H:%M:%S") df <- df[, !(colSums(is.na(df) | df == "") == nrow(df))] #odstraneni prazdnych sloupcu z df (vyuziti, pokud je poloha profilu "out" nebo "uvnitr")} index <- which(colnames(df)=="PosledniProfil")-4 df2$PredchoziProfil[i] <- df[1,index] df2$NaslednyProfil[i] <- "vne"} else if (poloha1 == "uvnitr") { if(df$Cas1 == cas) {df2$PredchoziProfil[i] <- "uvnitr" index <- which(colnames(df)=="Profil1")+2 df2$NaslednyProfil[i] <- df[1,index]} else if (df$PosledniCas == cas) {#df[,c(nazev)] <- format(df[,c(nazev)], format="%H:%M:%S") df <- df[, !(colSums(is.na(df) | df == "") == nrow(df))] #odstraneni prazdnych sloupcu z df (vyuziti, pokud je poloha profilu "out" nebo "uvnitr")} index <- which(colnames(df)=="PosledniProfil")-4 df2$PredchoziProfil[i] <- df[1,index] df2$NaslednyProfil[i] <- "uvnitr"} else {index <- which(df == cas)-1 df2$PredchoziProfil[i] <- df[1,(index-2)] df2$NaslednyProfil[i] <- df[1,index+2]} } } } df_vyhodnoceniProfilu[k] <- list(df2) #uloženi do listu } df2 <- data.frame(df_vyhodnoceniProfilu[1]) columns_vyhodnoceni <- colnames(df2) #Zjisteni nazvu sloupcu jednotlivych dataframeu v listu names(df_vyhodnoceniProfilu) <- seznamProfilu #Prejmenovani polozek listu dle nazvu stanovist ##Tvorba noveho listu, ktery bude obsahovat sloucene vyhodnoceni pro jednotliva stanoviste df_vyhodnoceniStanovist <- list() #Naplneni listu = slouceni profilu jednotlivych stanovist k <- 0 index <- 0 index1 <- 0 for (k in 1:length(seznamStanovist)) { index <- which(profilStanoviste == seznamStanovist[k]) #Zjisteni, ktere profily odpovidaji stejnemu stanovisti i <- 0 df2 <- data.frame() df <- data.frame() for (i in 1:length(index)) { index1 <- index[i] df <- data.frame(df_vyhodnoceniProfilu[index1]) names(df) <- columns_vyhodnoceni df2 <- bind_rows(df2,df) #Slouceni profilu stejneho stanoviste } #Prejmenovani profilu na stanoviste j <- 0 for (j in 1:length(profilStanoviste)){ df2[df2 == seznamProfilu[j]] <- profilStanoviste[j] } df2 <- df2[order(df2$Cas),] #Serazeni dle casu df_vyhodnoceniStanovist[k] <- list(df2) #Pridani stanoviste do listu } ##Priprava finalnich tabulek = vyhodnoceni jednotlivych stanovist df_vyhodnoceniSTabulky <- list() #Priprava nazvu sloupcu a radku columns_stanoviste_tabulky <- c("Predchozi [-]","Predchozi [%]","Nasledne [-]","Nasledne [%]","Souhrn [-]","Souhrn [%]","Pocet","Procenta") nazvyradku <- c("vne oblasti","uvnitr oblasti","tranzitni","zdrojova","cilova","vnitrni","sparovana RZ","nesparovana RZ","Poznamka") nazvyradku <- append(seznamStanovist,nazvyradku) k <- 0 for (k in 1:length(df_vyhodnoceniStanovist)) { #VYtvoreni prazdneho dataframeu ve strukture pripravenych sloupcu a radku df2 <- data.frame(matrix(nrow = length(nazvyradku), ncol = length(columns_stanoviste_tabulky))) colnames(df2) <- columns_stanoviste_tabulky df2 <- cbind(nazvyradku,df2) df <- data.frame(df_vyhodnoceniStanovist[k]) #Naplneni dataframeu daty i <- 0 #Naplneni rozlozeni dopravy do konkretnich stanovist for (i in 1:length(seznamStanovist)) { df2[c(i),c("Predchozi [-]")] <- nrow(df[df$PredchoziProfil == df2$nazvyradku[i],]) df2[c(i),c("Nasledne [-]")] <- nrow(df[df$NaslednyProfil == df2$nazvyradku[i],]) df2[c(i),c("Souhrn [-]")] <- df2[c(i),c("Predchozi [-]")] + df2[c(i),c("Nasledne [-]")] df2[c(i),c("Predchozi [%]")] <- round((df2[c(i),c("Predchozi [-]")] / length(df$RZ) *100), digits = 2) df2[c(i),c("Nasledne [%]")] <- round((df2[c(i),c("Nasledne [-]")] / length(df$RZ) *100), digits = 2) df2[c(i),c("Souhrn [%]")] <- round((df2[c(i),c("Souhrn [-]")] / (2*length(df$RZ)) *100), digits = 2) } i <- (length(seznamStanovist)+1) #Naplneni rozlozeni dopravy do "vne oblasti" df2[c(i),c("Predchozi [-]")] <- nrow(df[df$PredchoziProfil == "vne",]) df2[c(i),c("Nasledne [-]")] <- nrow(df[df$NaslednyProfil == "vne",]) df2[c(i),c("Souhrn [-]")] <- df2[c(i),c("Predchozi [-]")] + df2[c(i),c("Nasledne [-]")] df2[c(i),c("Predchozi [%]")] <- round((df2[c(i),c("Predchozi [-]")] / length(df$RZ) *100), digits = 2) df2[c(i),c("Nasledne [%]")] <- round((df2[c(i),c("Nasledne [-]")] / length(df$RZ) *100), digits = 2) df2[c(i),c("Souhrn [%]")] <- round((df2[c(i),c("Souhrn [-]")] / (2*length(df$RZ)) *100), digits = 2) i <- i+1 #Naplneni rozlozeni dopravy do "uvnitr oblasti" df2[c(i),c("Predchozi [-]")] <- nrow(df[df$PredchoziProfil == "uvnitr",]) df2[c(i),c("Nasledne [-]")] <- nrow(df[df$NaslednyProfil == "uvnitr",]) df2[c(i),c("Souhrn [-]")] <- df2[c(i),c("Predchozi [-]")] + df2[c(i),c("Nasledne [-]")] df2[c(i),c("Predchozi [%]")] <- round((df2[c(i),c("Predchozi [-]")] / length(df$RZ) *100), digits = 2) df2[c(i),c("Nasledne [%]")] <- round((df2[c(i),c("Nasledne [-]")] / length(df$RZ) *100), digits = 2) df2[c(i),c("Souhrn [%]")] <- round((df2[c(i),c("Souhrn [-]")] / (2*length(df$RZ)) *100), digits = 2) i <- i+1 #Naplneni typu cesty "tranzitni" df2$Pocet[i] <- nrow(df[df$TypCesty == "tranzit",]) df2$Procenta[i] <- round((df2$Pocet[i] / (length(df$RZ)) *100), digits = 2) i <- i+1 #Naplneni typu cesty "zdrojova" df2$Pocet[i] <- nrow(df[df$TypCesty == "zdroj",]) df2$Procenta[i] <- round((df2$Pocet[i] / (length(df$RZ)) *100), digits = 2) i <- i+1 #Naplneni typu cesty "cilova" df2$Pocet[i] <- nrow(df[df$TypCesty == "cil",]) df2$Procenta[i] <- round((df2$Pocet[i] / (length(df$RZ)) *100), digits = 2) i <- i+1 #Naplneni typu cesty "vnitrni" df2$Pocet[i] <- nrow(df[df$TypCesty == "vnitrni",]) df2$Procenta[i] <- round((df2$Pocet[i] / (length(df$RZ)) *100), digits = 2) i <- i+1 #Naplneni info o sparovanych RZ df2$Pocet[i] <- nrow(df[df$Jedinecne_RZ == "sparovana RZ",]) df2$Procenta[i] <- round((df2$Pocet[i] / (length(df$RZ)) *100), digits = 2) i <- i+1 #Naplneni info o nesparovanych RZ df2$Pocet[i] <- nrow(df[df$Jedinecne_RZ == "nesparovana RZ",]) df2$Procenta[i] <- round((df2$Pocet[i] / (length(df$RZ)) *100), digits = 2) i<- i+1 if (any(df$Poznamka != "")){ df2$`Predchozi [-]`[i] <- "Data obsahuji potencialne nelogicke cesty" df2$`Nasledne [-]`[i] <- "Pocet zaznamu patricich k potencialne nelogickym cestam:" df2$`Nasledne [%]`[i] <- nrow(df[df$Poznamka != "",]) df2$`Souhrn [-]`[i] <- "Procento potencialne nelogickych cest [%]" df2$`Souhrn [%]`[i] <- round((as.numeric(df2$`Nasledne [%]`[i]) / (length(df$RZ)) *100), digits = 2) } df2[is.na(df2)] <- "" #Zmena NA na prazdne bunky df_vyhodnoceniSTabulky[k] <- list(df2) #Ulozeni do listu } #Pojmenovani dataframeu v listu names(df_vyhodnoceniSTabulky) <- seznamStanovist ###Export columns_stanoviste_tabulky <- append("",columns_stanoviste_tabulky) #tvorba cesty pro uložení VyhodnoceniProfilu <- paste(lokace,"/Vyhodnoceni-Profilu/",sep = "") #Export datových sad k<- 0 for (k in 1:length(df_vyhodnoceniProfilu)) { nazev <- paste("Profil_",seznamProfilu[k],"_Vyhodnoceni-mericich-stanovist_datova-sada",sep = "") cesta <- paste(VyhodnoceniProfilu,nazev,csv, sep="") df2 <- data.frame(df_vyhodnoceniProfilu[k]) colnames(df2) <- columns_vyhodnoceni df2 <- df2 %>% select(-c(priznak)) write.table(df2,file=cesta,fileEncoding = "UTF-8",row.names = FALSE,sep = ";", dec = ",") } #Export tabulek k<- 0 for (k in 1:length(seznamStanovist)) { nazev <- paste("Stanoviste_",seznamStanovist[k],"_Vyhodnoceni-mericich-stanovist",sep = "") cesta <- paste(VyhodnoceniProfilu,nazev,csv, sep="") df2 <- data.frame(df_vyhodnoceniSTabulky[k]) colnames(df2) <- columns_stanoviste_tabulky write.table(df2,file=cesta,fileEncoding = "UTF-8",row.names = FALSE,sep = ";", dec = ",") } ############################################################################################################## ############################################################################################################## ###VYHODNOCENÍ DOB POBYTU columns3 <- c("ID","RZ","DruhVozidla","CasProfil1","CasProfil2","DobaJizdy","Profil1","Profil2") ##Tvorba listu df_PobytRelevantni, který bude obsahovat pouze relevantní kombinace profilů pro vyhodnocení dob pobytu df_PobytRelevantni <- df_Parovani1 #tvorba listu #Stanovení indikátoru relevance profilů ano/ne - relevantni jsou ty v zelene casti OD matice profilySparovane <- columns2 i <- 0 j <- 0 polohaRelevance <- "" for (i in 1:length(polohaProfilu)) { poloha1 <- polohaProfilu[i] for (j in 1:length(polohaProfilu)) { poloha2 <- polohaProfilu[j] # nazev <- paste(nazev1,nazev2,sep = "") if (poloha1 == "out") {relevance <- "ne"} else if (poloha1 == "uvnitr" & poloha2 == "in") {relevance <- "ne"} else if (poloha1 == "in" & poloha2 == "in") {relevance <- "ne"} else {relevance <- "ano"} polohaRelevance <- append(polohaRelevance, relevance) } } polohaRelevance <- polohaRelevance[-1] #Odstranění nerelevantních kombinací profilů dle indikátoru index <- which(polohaRelevance == "ne") df_PobytRelevantni <- df_PobytRelevantni[- index] #Odstranění prázdných kombinací profilů is_empty <- function(df_PobytRelevantni) (nrow(df_PobytRelevantni)!=0 & ncol(df_PobytRelevantni) !=0) #zjištění prázdných kombinací profilů df_PobytRelevantni <- df_PobytRelevantni[sapply(df_PobytRelevantni, is_empty)] #odstranění prázdných kombinací profilů #Zjištění názvů relevantních kombinací profilů ( = zbylých položek listu) columns_Pobyt <- names(df_PobytRelevantni) #Odstraneni zaznamu, ktere se netykaji pobytu (T <= T_lim) k <- 0 for (k in 1:length(df_PobytRelevantni)) { df2 <- data.frame(df_PobytRelevantni[k]) colnames(df2) <- columns3 df2$priznak <- "" Tlim <- Matice_Tlim_final[df2$Profil1[1],df2$Profil2[1]] #nalezeni odpovidajiciho Tlim v matici i<-0 for (i in 1:length(df2$Profil1)) { if (as.numeric(df2$DobaJizdy[i]) <= Tlim) {df2$priznak[i] <- "smazat"} #porovnani doby jizdy s Tlim if (as.numeric(df2$DobaJizdy[i]) > Tlim) {df2$DobaJizdy[i] <- (as.numeric(df2$DobaJizdy[i])-Tlim)} } df2 <- df2[!df2$priznak == "smazat", ] #odstranění řádků s příznakem "smazat" names(df2)[names(df2) == "DobaJizdy"] <- "DobaPobytu [s]" #Prejmenovani sloupce "DobaJizdy" na "DobaPobytu [s]" df2 <- df2 %>% select(-c(priznak)) df_PobytRelevantni[k] <- list(df2) } #Prejmenovani z "DobaJizdy" na "DobaPobytu [s]" v nazvu dataframeu columns3[columns3 == "DobaJizdy"] <- "DobaPobytu [s]" #Odstranění prázdných kombinací profilů is_empty <- function(df_PobytRelevantni) (nrow(df_PobytRelevantni)!=0 & ncol(df_PobytRelevantni) !=0) #zjištění prázdných kombinací profilů df_PobytRelevantni <- df_PobytRelevantni[sapply(df_PobytRelevantni, is_empty)] #odstranění prázdných kombinací profilů #Zjištění názvů relevantních kombinací profilů ( = zbylých položek listu) columns_Pobyt <- names(df_PobytRelevantni) ##Tvorba matice s pocty pobytu v relevantnich relacich nazvyradku <- "" nazvysloupcu <- "" Profily <- Profily[order(Profily$polohaProfilu),] ##Seřazení dataframeu Profily podle polohyProfilu i <- 0 for (i in 1:length(Profily$seznamProfilu)) { #Priprava nazvu radku a sloupcu if (Profily$polohaProfilu[i] == "in" | Profily$polohaProfilu[i] == "uvnitr") {nazvyradku <- append(nazvyradku,Profily$seznamProfilu[i])} if (Profily$polohaProfilu[i] == "out" | Profily$polohaProfilu[i] == "uvnitr") {nazvysloupcu <- append(nazvysloupcu,Profily$seznamProfilu[i])} } nazvyradku <- nazvyradku[-1] nazvysloupcu <- nazvysloupcu[-1] Matice_Pobytu <- matrix(0, nrow = length(nazvyradku), ncol = length(nazvysloupcu),dimnames = list(nazvyradku,nazvysloupcu)) #Tvorba prazdne matice s pripravenymi radky a sloupcy k <- 0 for (k in 1:length(df_PobytRelevantni)){ ##Naplneni matice Pobytu df2 <- data.frame(df_PobytRelevantni[k]) colnames(df2) <- columns3 pocet <- nrow(df2) #zjištění počtu řádků (tzn. průjezdů mezi 2 po sobě následujícími profily) profil1 <- df2$Profil1[1] #definování, do jaké buňky matice bude počet uložen profil2 <- df2$Profil2[1] Matice_Pobytu[profil1,profil2] <- pocet #uložení počtu do konkrétní buňky matice } ##Tvorba souhrnneho dataframeu = datove sady s dobami pobytu Pobyty <- data.frame() k <- 0 for (k in 1:length(df_PobytRelevantni)) { df2 <- data.frame(df_PobytRelevantni[k]) colnames(df2) <- columns3 Pobyty <- rbind(Pobyty,df2) #Spojeni jednotlivych dataframeu v listu df_PobytRelevantni } colnames(Pobyty) <- columns3 #Prejmenovani nazvu sloupcu ##Pridani souctu pobytu v relevantnich relacich a prumerne doby pobytu k <- 0 for (k in 1:length(df_PobytRelevantni)) { df2 <- data.frame(df_PobytRelevantni[k]) colnames(df2) <- columns3 #Prejmenovani sloupcu df2[nrow(df2)+1,] <- "" #Pridani radku s celkovym poctem vozidel s pobytem v relaci df2[length(df2$RZ),c("ID")] <- "Celkovy pocet vozidel" df2[length(df2$RZ),c("RZ")] <- length(which(df2$Profil1 != "")) df2[nrow(df2)+1,] <- "" #Pridani radku s prumernou dobou pobytu v relaci df2[length(df2$RZ),c("ID")] <- "Prumerna doba pobytu [min]" df2[length(df2$RZ),c("RZ")] <- round((mean(as.numeric(df2$`DobaPobytu [s]`),na.rm = TRUE)/60),digits = 0) #Prumerna doba pobytu je v minutach, zaokrouhlena na cele min df_PobytRelevantni[k] <- list(df2) } ##Tvorba souhrnne tabulky PobytySouhrn <- data.frame(matrix(nrow = length(columns_Pobyt), ncol = 4)) colnames(PobytySouhrn) <- c("Profil1","Profil2","CelkovyPocetVozidel","PrumerDobyPobytu [min]") PobytySouhrn$Profil1 <- "" PobytySouhrn$Profil2 <- "" PobytySouhrn$CelkovyPocetVozidel <- 0 PobytySouhrn$`PrumerDobyPobytu [min]` <- 0 k <- 0 index <- 0 for (k in 1:length(df_PobytRelevantni)) { df2 <- data.frame(df_PobytRelevantni[k]) colnames(df2) <- columns3 PobytySouhrn$Profil1[k] <- df2$Profil1[1] #Vyplneni 1. profilu z relace PobytySouhrn$Profil2[k] <- df2$Profil2[1] #Vyplneni 2. profilu z relace index <- which(df2$ID == "Celkovy pocet vozidel") #Urceni radku v df2, ktery obsahuje celkovy pocet vozidel PobytySouhrn$CelkovyPocetVozidel[k] <- df2$RZ[index] PobytySouhrn$`PrumerDobyPobytu [min]`[k] <- df2$RZ[index+1] } ##EXPORT DobyPobytu <- paste(lokace,"/Doby-pobytu/",sep = "") #tvorba cesty pro uložení #Export Matice Pobytu nazvysloupcu <- append("",nazvysloupcu) #uprava nazvu sloupcu pro export Matice_Pobytu_vystup <- cbind(nazvyradku,Matice_Pobytu) Matice_Pobytu_vystup <- rbind(nazvysloupcu,Matice_Pobytu_vystup) nazev <- "Matice_Poctu_pobytu_v_relevantnich_relacich" cesta <- paste(DobyPobytu,nazev,csv, sep="") write.table(Matice_Pobytu_vystup,file=cesta,fileEncoding = "UTF-8",row.names = FALSE, col.names = FALSE, sep = ";", dec = ",") #uložení #Export datove sady = souhrnny dataframe "Pobyty" nazev <- "Pobyty_v_relevantnich_relacich" cesta <- paste(DobyPobytu,nazev,csv, sep="") write.table(Pobyty,file=cesta,fileEncoding = "UTF-8",row.names = FALSE, sep = ";", dec = ",") #uložení #Export souhrnne tabulky s celkovym poctem vozidel s pobytem v jednotlivych relacich a prumernou dobou pobytu nazev <- "Pobyty_souhrn_dle_relaci" cesta <- paste(DobyPobytu,nazev,csv, sep="") write.table(PobytySouhrn,file=cesta,fileEncoding = "UTF-8",row.names = FALSE, sep = ";", dec = ",") #uložení ############################################################################################################## ############################################################################################################## ###VYHODNOCENÍ TRAS ##Nacteni matice realnych vzdalenosti -> pro pozdejsi vypocet prumerne rychlosti Matice_realnych_vzdalenosti <- data.matrix(read.csv("C:/Users/Mr. Spock/Documents/Skola/Magistr/diplomka/Matice-realnych-vzdalenosti.csv", sep=";", encoding = "UTF-8")) Matice_realnych_vzdalenosti <- Matice_realnych_vzdalenosti[,colnames(Matice_realnych_vzdalenosti)!="X"] rownames(Matice_realnych_vzdalenosti) <- nazvyradku ##Priprava vstupni datove sady = dataframeu s cestami ParovaniFinal_Trasy <- ParovaniFinal_OD %>% select(-c(PosledniProfil,PosledniCas)) #Zmena formatu casu i <- 0 nazev <- "" index <- 0 for(i in 1:delkacestymax) { nazev <- paste("Cas",i,sep = "") index <- which(colnames(ParovaniFinal_Trasy) == nazev) ParovaniFinal_Trasy[,index] <- format(ParovaniFinal_Trasy[,index], format="%H:%M:%S") } ParovaniFinal_Trasy[is.na(ParovaniFinal_Trasy)] <- "" ##Tvorba listu dataframeů s relevantními kombinacemi profilů pro vyhodnocení tras = cest mezi těmito profily df_TrasyRelevantni <- list() #tvorba listu #Stanovení indikátoru relevance profilů ano/ne - relevantni jsou ty v zelene casti OD matice profilySparovane <- columns2 i <- 0 j <- 0 polohaRelevance <- "" for (i in 1:length(polohaProfilu)) { poloha1 <- polohaProfilu[i] for (j in 1:length(polohaProfilu)) { poloha2 <- polohaProfilu[j] # nazev <- paste(nazev1,nazev2,sep = "") if (poloha1 == "out") {relevance <- "ne"} else if (poloha1 == "uvnitr" & poloha2 == "in") {relevance <- "ne"} else if (poloha1 == "in" & poloha2 == "in") {relevance <- "ne"} else {relevance <- "ano"} polohaRelevance <- append(polohaRelevance, relevance) } } polohaRelevance <- polohaRelevance[-1] #Úprava indikátoru relevance s ohledem na profily na stejném stanovišti ### Funguje urcite na stanoviste s poctem profilu 1-2 k <- 0 index <- 0 for (k in 1:length(seznamStanovist)) { #Prochazim seznam stanovist index <- which(profilStanoviste == seznamStanovist[k]) #Zjisteni, ktere profily odpovidaji stejnemu stanovisti if (length(index) > 1){ #Resim jen stanoviste, ktere obsahuji vice profilu #print(append("Profil",k)) i <- 1 index1 <- 0 index2 <- 0 profil1 <- "" profil2 <- "" while (i < length(index)){ index1 <- which(profilStanoviste == seznamStanovist[k])[i] #nastaveni indikatoru cisla sloupce profilu 1 index2 <- index1+1 #nastaveni indikatoru cisla sloupce profilu 2 profil1 <- seznamProfilu[index1] #urceni profilu 1 j <- 0 for (j in (i+1):length(index)) { profil2 <- seznamProfilu[index2] #urceni profilu 2 #print(append(profil1,profil2)) #Nastaveni indikatoru relevance profil <- paste(profil1,profil2,sep = "") l <- which(profilySparovane == profil) polohaRelevance[l] <- "ne" profil <- paste(profil2,profil1,sep = "") l <- which(profilySparovane == profil) polohaRelevance[l] <- "ne" profil <- paste(profil1,profil1,sep = "") l <- which(profilySparovane == profil) polohaRelevance[l] <- "ne" profil <- paste(profil2,profil2,sep = "") l <- which(profilySparovane == profil) polohaRelevance[l] <- "ne" index2 <- index2+1 } i <- i+1 } } } #Stanoveni relevantnich kombinací profilů dle indikátoru index <- which(polohaRelevance == "ne") profilyRelevantni <- profilySparovane[- index] ##Priprava dataframeu do listu columns_cesty <- colnames(ParovaniFinal_Trasy) columns_trasy <- append(columns_cesty,c("ProfilVychozi","CasVychozi","ProfilCilovy","CasCilovy","DobaJizdy [s]","CestovniRychlost [km/h]"),) #nazvysloupcu k <- 0 for (k in 1:length(profilyRelevantni)){ #pocet dataframeu dle poctu relevantnich profilu df2 <- data.frame(matrix(nrow = 0, ncol = length(columns_trasy))) #tvorba prazdnych dataframeu colnames(df2) <- columns_trasy #nazvy sloupcu df_TrasyRelevantni[k] <- list(df2) #ulozeni dataframeu do listu } names(df_TrasyRelevantni) <- profilyRelevantni #prejmenovani polozek listu ##Prirazeni cest vzniklych finalnim parovanim do dataframeu do listu df_TrasyRelevantni i <- 0 for (i in 1:length(ParovaniFinal_Trasy$RZ)) { #Prochazim vsechny radky = vsechny cesty if (as.numeric(ParovaniFinal_Trasy$DelkaCesty[i]) > 1){ #Resim jen cesty, ktere maji vice profilu nez 1 #print(append("Radek",i)) k <- 1 #cislo sloupce index1 <- 4 #nastaveni indikatoru cisla sloupce profilu 1 index2 <- index1+2 #nastaveni indikatoru cisla sloupce profilu 2 profil1 <- "" profil2 <- "" profil <- "" cas1 <- "" cas2 <- "" while (k < as.numeric(ParovaniFinal_Trasy$DelkaCesty[i])) { index1 <- index1+2 #nastaveni indikatoru cisla sloupce profilu 1 index2 <- index1+2 #nastaveni indikatoru cisla sloupce profilu 2 profil1 <- ParovaniFinal_Trasy[c(i),c(index1)] #urceni profilu 1 j <- 0 for (j in (k+1):as.numeric(ParovaniFinal_Trasy$DelkaCesty[i])){ profil2 <- ParovaniFinal_Trasy[c(i),c(index2)] #urceni profilu 2 #print(append(profil1,profil2)) #Presun do dataframeu profil <- paste(profil1,profil2,sep = "") #urceni nazvu dataframeu z listu, do ktereho se bude ukladat cesta if (length(which(profilyRelevantni == profil) ) != 0) { index <- which(profilyRelevantni == profil) #urceni indexu dataframeu z listu, do ktereho se bude ukladat cesta df2 <- data.frame(df_TrasyRelevantni[index]) #vyber spravneho dataframeu z listu colnames(df2) <- columns_trasy #prejmenovani sloupcu df2[nrow(df2)+1,c(1:length(columns_cesty))] <- ParovaniFinal_Trasy[c(i),] #Presun zaznamu o ceste (vsechny polozky v radku z dataframeu ParovaniFinal_Trasy) df2[length(df2$RZ),c("ProfilVychozi")] <- profil1 #Vyplneni sloupce Vychozi profil df2[length(df2$RZ),c("ProfilCilovy")] <- profil2 #Vyplneni sloupce Cilovy profil df2[length(df2$RZ),c("CasVychozi")] <- ParovaniFinal_Trasy[c(i),c(index1+1)] #Vyplneni sloupce Vychozi cas df2[length(df2$RZ),c("CasCilovy")] <- ParovaniFinal_Trasy[c(i),c(index2+1)] #Vyplneni sloupce Cilovy cas cas1 <- strptime(ParovaniFinal_Trasy[c(i),c(index1+1)], format = "%H:%M:%OS") #Prevod casu do formatu pro odecteni cas2 <- strptime(ParovaniFinal_Trasy[c(i),c(index2+1)], format = "%H:%M:%OS") #Prevod casu do formatu pro odecteni df2[length(df2$RZ),c("DobaJizdy [s]")] <- (as.numeric(difftime(cas2, cas1, units="secs"))) #Odecteni casu = doba jizdy mezi vychozim a cilovym profilem df_TrasyRelevantni[index] <- list(df2) #Ulozeni upraveneho dataframeu zpet do listu } index2 <- index2+2 } k <- k+1 } } } #Odstranění prázdných kombinací profilů is_empty <- function(df_TrasyRelevantni) (nrow(df_TrasyRelevantni)!=0 & ncol(df_TrasyRelevantni) !=0) #zjištění prázdných kombinací profilů df_TrasyRelevantni <- df_TrasyRelevantni[sapply(df_TrasyRelevantni, is_empty)] #odstranění prázdných kombinací profilů columns_TrasyRelevantni <- names(df_TrasyRelevantni) ##Pridani informace o cestovnich rychlostech k <- 0 for (k in 1:length(df_TrasyRelevantni)) { df2 <- data.frame(df_TrasyRelevantni[k]) colnames(df2) <- columns_trasy vzdalenost <- Matice_realnych_vzdalenosti[df2$ProfilVychozi[1],df2$ProfilCilovy[1]] for (i in 1:length(df2$RZ)) { df2$`CestovniRychlost [km/h]`[i] <- round(((vzdalenost/as.numeric(df2$`DobaJizdy [s]`[i]))*3.6),digits = 0 ) } df_TrasyRelevantni[k] <- list(df2) } ##Pridani souctu cest v relevantnich relacich, prumerne doby jizdy a prumerne cestovni rychlosti k <- 0 for (k in 1:length(df_TrasyRelevantni)) { df2 <- data.frame(df_TrasyRelevantni[k]) colnames(df2) <- columns_trasy #Prejmenovani sloupcu df2[nrow(df2)+1,] <- "" #Pridani radku s celkovym poctem vozidel s pobytem v relaci df2[length(df2$RZ),c("ID")] <- "Celkovy pocet cest" df2[length(df2$RZ),c("RZ")] <- length(which(df2$Profil1 != "")) df2[nrow(df2)+1,] <- "" #Pridani radku s prumernou dobou pobytu v relaci df2[length(df2$RZ),c("ID")] <- "Prumerna doba jizdy [s]" df2[length(df2$RZ),c("RZ")] <- round(mean(as.numeric(df2$`DobaJizdy [s]`),na.rm = TRUE),digits = 0) #Prumerna doba pobytu je v sekundach, zaokrouhlena na cele min df2[nrow(df2)+1,] <- "" #Pridani radku s prumernou dobou pobytu v relaci df2[length(df2$RZ),c("ID")] <- "Prumerna cestovni rychlost [km/h]" df2[length(df2$RZ),c("RZ")] <- round(mean(as.numeric(df2$`CestovniRychlost [km/h]`),na.rm = TRUE),digits = 0) #Prumerna doba pobytu je v sekundach, zaokrouhlena na cele min df_TrasyRelevantni[k] <- list(df2) } ##EXPORT VyhodnoceniTras <- paste(lokace,"/Vyhodnoceni-tras/",sep = "") #tvorba cesty pro uložení k<- 0 for (k in 1:length(df_TrasyRelevantni)) { nazev <- paste(columns_TrasyRelevantni[c(k)],"_Cesty-v-relaci",sep = "") cesta <- paste(VyhodnoceniTras,nazev,csv, sep="") df2 <- data.frame(df_TrasyRelevantni[k]) colnames(df2) = columns_trasy write.table(df2,file=cesta,fileEncoding = "UTF-8",row.names = FALSE,sep = ";", dec = ",") }