library(tidyverse) library(tidyr) library(stringr) library(ggplot2) corridor <- read.csv("~/Documents/IdeaProjects/matsim-duesseldorf/scenarios/input/all_dusseldorf_non_motorway_links.csv") %>% tibble() baseline <- read.delim("baseline/001.450.linkstats.txt.gz") %>% tibble() bikelane <- read_delim("~/Documents/IdeaProjects/matsim-duesseldorf/output/experiments-pieter/all_duesseldorf_non_motorway_decongestion/duesseldorf-25pct-dc_114-no-lanes-noMc-decongestion.100.linkstats.txt.gz") %>% tibble() data <- corridor %>% select(ID) %>% left_join(baseline , by = c("ID" = "LINK")) %>% select(-ORIG_ID,-FROM,-TO) %>% tidyr::pivot_longer(!ID:CAPACITY) %>% mutate(src = "baseline") %>% rbind( corridor %>% select(ID) %>% left_join(bikelane , by = c("ID" = "LINK")) %>% select(-ORIG_ID,-FROM,-TO) %>% tidyr::pivot_longer(!ID:CAPACITY, ) %>% mutate(src = "decongested") ) %>% filter(!name %>% str_detect("(0)[\\.\\-]*(24)")) %>% mutate( type = str_to_lower(name), type = ifelse(name %>% str_detect("HRS"), "volume", type), type = ifelse(name %>% str_detect("TRAVEL"), "traveltime", type), hour = name %>% str_extract("[0-9\\.]+") %>% as.integer(), property = ifelse(name %>% str_detect("min"), "min", NA), property = ifelse(name %>% str_detect("max"), "max", property), property = ifelse(name %>% str_detect("avg"), "avg", property) ) %>% select(-name) data %>% filter(type == "volume") %>% group_by(src, hour, property) %>% summarise(value = sum(4 * value * LENGTH / CAPACITY) / sum(LENGTH)) %>% pivot_wider(names_from = property) %>% ggplot() + geom_ribbon(aes( x = hour, ymin = min, ymax = max, fill = src, alpha = I(0.5) )) + geom_line(aes(x = hour, y = avg, color = src)) + ylab("Length-weighted average Volume/Capacity ratio across Duesseldorf area") data %>% filter(type == "volume") %>% group_by(src, hour, property) %>% summarise(value = sum(4 * value * LENGTH / CAPACITY) / sum(LENGTH)) %>% ungroup() %>% pivot_wider(names_from = property) %>% select(source = src, hour, avg) %>% pivot_wider(names_from = source, values_from = avg) %>% write.csv("corridor_volume_lineplot.csv", row.names = F, quote = F) data %>% filter(type == "volume") %>% group_by(src, hour, property) %>% summarise(value = max(value * 4 / CAPACITY)) %>% # summarise(value = sum(value * LENGTH / CAPACITY) / sum(LENGTH)) %>% pivot_wider(names_from = property) %>% ggplot() + geom_ribbon(aes( x = hour, ymin = min, ymax = max, fill = src, alpha = I(0.5) )) + geom_line(aes(x = hour, y = avg, color = src)) + ylab("Maximum Volume/Capacity ratio encountered across Duesseldorf area") data %>% filter(type == "volume") %>% group_by(src, hour, property) %>% summarise(value = max(value * 4 / CAPACITY)) %>% # summarise(value = sum(value * LENGTH / CAPACITY) / sum(LENGTH)) %>% pivot_wider(names_from = property) %>% select(source = src, hour, avg) %>% pivot_wider(names_from = source, values_from = avg) %>% write.csv("corridor_maxvolume_lineplot.csv", row.names = F, quote = F) data %>% filter(type == "traveltime") %>% group_by(src, hour, property) %>% summarise(value = value %>% sum) %>% mutate(value = value / 60) %>% pivot_wider(names_from = property) %>% ggplot() + geom_ribbon(aes( x = hour, ymin = min, ymax = max, fill = src, alpha = I(0.5) )) + geom_line(aes(x = hour, y = avg, color = src)) + ylab("Total Duesseldorf interior link travel time (minutes)") data %>% filter(type == "traveltime") %>% group_by(src, hour, property) %>% summarise(value = value %>% sum) %>% mutate(value = value / 60) %>% pivot_wider(names_from = c(property, src)) %>% write.csv("corridor_traveltime_lineplot.csv", row.names = F, quote = F) data %>% filter(type == "traveltime") %>% group_by(src, hour, property) %>% summarise( value = value %>% sum, LENGTH = LENGTH %>% sum, FREESPEED = FREESPEED %>% mean ) %>% mutate(fstt = LENGTH / FREESPEED, value = value / fstt) %>% pivot_wider(names_from = property) %>% ggplot() + geom_ribbon(aes( x = hour, ymin = min, ymax = max, fill = src, alpha = I(0.5) )) + geom_line(aes(x = hour, y = avg, color = src)) + ylab("Total corridor round-trip travel time / fstt") networkdata <- baseline %>% select(-ORIG_ID,-FROM,-TO) %>% filter(!LINK %>% str_detect("pt")) %>% select(LINK, CAPACITY, names(baseline)[names(baseline) %>% str_detect("HRS[0-9\\.\\-]*avg")]) %>% tidyr::pivot_longer(!LINK, values_to = "baseline") %>% filter(!name %>% str_detect("(0)[\\.\\-]*(24)")) %>% mutate( type = str_to_lower(name), type = ifelse(name %>% str_detect("HRS"), "volume", type), type = ifelse(name %>% str_detect("TRAVEL"), "traveltime", type), newcol = name %>% str_extract("[0-9]{1,2}"), newcol = ifelse(type == "capacity", "capacity", newcol) ) %>% select(-name,-type) %>% left_join( bikelane %>% select(-ORIG_ID,-FROM,-TO) %>% filter(!LINK %>% str_detect("pt")) %>% select(LINK, CAPACITY, (1:length(bikelane))[names(bikelane) %>% str_detect("HRS[0-9\\.\\-]*avg")]) %>% tidyr::pivot_longer(!LINK, values_to = "decongested") %>% filter(!name %>% str_detect("(0)[\\.\\-]*(24)")) %>% mutate( type = str_to_lower(name), type = ifelse(name %>% str_detect("HRS"), "volume", type), type = ifelse(name %>% str_detect("TRAVEL"), "traveltime", type), newcol = name %>% str_extract("[0-9]{1,2}"), newcol = ifelse(type == "capacity", "capacity", newcol) ) %>% select(-name,-type) ) network_out <- networkdata %>% filter(newcol != "capacity") %>% group_by(LINK) %>% summarise(baseline = sum(baseline), decongested = sum(decongested)) #%>% # head(25*2) %>% # mutate(delta = bikelane - baseline) # pivot_wider(id_cols=link, names_from = newcol, values_from = c(delta)) write.csv( network_out %>% select(id = LINK, volume = baseline), "baseline_volume.csv", row.names = F, quote = F ) write.csv( network_out %>% select(id = LINK, volume = decongested), "decongested_volume.csv", row.names = F, quote = F ) network_out %>% semi_join(corridor, by = c("LINK" = "ID")) %>% write.csv("corridor-only.csv", row.names = F, quote = F) networkdata.tt <- baseline %>% select(-ORIG_ID,-FROM,-TO) %>% filter(!LINK %>% str_detect("pt")) %>% select(LINK, CAPACITY, names(.)[names(.) %>% str_detect("TRAVELTIME[0-9\\.\\-]*avg")]) %>% tidyr::pivot_longer(!LINK, values_to = "baseline") %>% filter(!name %>% str_detect("(0)[\\.\\-]*(24)")) %>% mutate( type = str_to_lower(name), type = ifelse(name %>% str_detect("HRS"), "volume", type), type = ifelse(name %>% str_detect("TRAVEL"), "traveltime", type), newcol = name %>% str_extract("[0-9]{1,2}"), newcol = ifelse(type == "capacity", "capacity", newcol) ) %>% select(-name,-type) %>% left_join( bikelane %>% select(-ORIG_ID,-FROM,-TO) %>% filter(!LINK %>% str_detect("pt")) %>% select(LINK, (1:ncol(.))[names(.) %>% str_detect("TRAVELTIME[0-9\\.\\-]*avg")]) %>% tidyr::pivot_longer(!LINK, values_to = "bikelane") %>% filter(!name %>% str_detect("(0)[\\.\\-]*(24)")) %>% mutate( type = str_to_lower(name), type = ifelse(name %>% str_detect("HRS"), "volume", type), type = ifelse(name %>% str_detect("TRAVEL"), "traveltime", type), newcol = name %>% str_extract("[0-9]{1,2}"), newcol = ifelse(type == "capacity", "capacity", newcol) ) %>% select(-name,-type) ) network_out <- networkdata.tt %>% filter(newcol != "capacity") %>% group_by(LINK) %>% summarise(baseline = mean(baseline), bikelane = mean(bikelane)) %>% # head(25*2) %>% left_join(baseline %>% mutate(fstt = LENGTH / FREESPEED) %>% select(LINK, fstt)) %>% mutate( baseline = 100 * baseline / fstt, bikelane = 100 * bikelane / fstt, delta = bikelane - baseline ) # pivot_wider(id_cols=link, names_from = newcol, values_from = c(delta)) write.csv(network_out, "corridor-traveltime.csv", row.names = F, quote = F) network_out %>% semi_join(corridor, by = c("LINK" = "ID")) %>% write.csv("corridor-only-traveltime.csv", row.names = F, quote = F) write.csv( network_out %>% select(id = LINK, ttratio = baseline), "baseline_tt.csv", row.names = F, quote = F ) write.csv( network_out %>% select(id = LINK, ttratio = bikelane) %>% left_join(corridor %>% transmute (id = ID, corridor = "corr")) %>% mutate(corridor = ifelse(is.na(corridor),"no",corridor) ), "bikelane_tt.csv", row.names = F, quote = F )