diff --git a/.Rhistory b/.Rhistory deleted file mode 100644 index a9ea7e0..0000000 --- a/.Rhistory +++ /dev/null @@ -1,512 +0,0 @@ -~st_linestring(matrix(c(..2, ..1, ..4, ..3), ncol = 2, byrow = TRUE))) -) %>% -st_as_sf(sf_column_name = "geometry") -bucket_feet <- 500 -lat_round <- bucket_feet/364481.35 -lon_round <- bucket_feet/267203.05 -metro_summary <- metro_data %>% -left_join(routes_categorized, by = "pid") %>% -mutate(lat_bucket = round(lat / lat_round) * lat_round, -lon_bucket = round(lon / lon_round) * lon_round) %>% -group_by(rt, des, pid, lat_bucket, lon_bucket) %>% -summarise(spd = median(spd, na.rm = TRUE), -spd_calc = median(spd_calc, na.rm = TRUE), -pdist = median(pdist), -trip_count = length(unique(origtatripno))) -metro_data_sf <- st_as_sf(metro_data %>% filter(!is.na(lon)), coords = c("lon", "lat"), remove = FALSE) -metro_summary_sf <- st_as_sf(metro_summary %>% filter(!is.na(lon_bucket)), coords = c("lon_bucket", "lat_bucket"), remove = FALSE) -metro_segments <- metro_summary %>% -group_by(rt, pid) %>% -arrange(pdist) %>% -mutate(lat_bucket_lag = lag(lat_bucket), -lon_bucket_lag = lag(lon_bucket)) %>% -filter(!is.na(lat_bucket) & !is.na(lon_bucket) & !is.na(lat_bucket_lag) & !is.na(lon_bucket_lag)) %>% -mutate( -geometry = pmap(list(lat_bucket, lon_bucket, lat_bucket_lag, lon_bucket_lag), -~st_linestring(matrix(c(..2, ..1, ..4, ..3), ncol = 2, byrow = TRUE))) -) %>% -st_as_sf(sf_column_name = "geometry") -# get counts of routes -route_counts <- metro_data %>% group_by(pid, rt, des) %>% summarise(route_count = length(unique(origtatripno))) -# make charts -ggplot(data = metro_summary %>% filter(pid %in% (routes_categorized %>% filter(name %in% c("B_North", "B_South")) %>% pull (pid))), -aes(x = pdist, -y = spd_calc)) + -geom_point() + -geom_smooth() + -facet_grid(paste0(rt, "-", des) ~ .) -register_stadiamaps(key = substr(read_file(file = "api_keys/stadia_api_key"), 1, 36)) -bbox <- c(left = min(metro_data$lon), -bottom = min(metro_data$lat), -right = max(metro_data$lon), -top = max(metro_data$lat)) -#get basemap -basemap <- get_stadiamap(bbox = bbox, zoom = 13, maptype = "stamen_toner_lite") -# A West -quantile(metro_segments %>% filter(pid %in% c("469")) %>% pull(spd_calc), c(0,0.25, 0.5, 0.75, 1), na.rm = TRUE) -for (route in unique(routes_categorized$name)){ -route_focus <- routes_categorized %>% filter(name == route) %>% pull(pid) -ggmap(basemap) + -labs(title = paste0("Metro Route Speed - ", route), -subtitle = paste0("averaged between ", -sum(route_counts %>% filter(pid %in% route_focus) %>% pull(route_count)), -" bus trips - ", -min(date(metro_data$time)), -" to ", -max(date(metro_data$time))), -x = NULL, -y = NULL) + -theme(axis.text=element_blank(), -axis.ticks=element_blank(), -plot.caption = element_text(color = "grey")) + -geom_sf(data = metro_segments %>% filter(pid %in% route_focus), -inherit.aes = FALSE, -aes(color = spd_calc), -linewidth = 1) + -scale_color_distiller(palette = "RdYlGn", direction = "reverse", limits = c(0,70), name = "Average speed or segment\n(calculated with locations, not reported speed)") -ggsave(file = paste0("figures/", -route, -".pdf"), -title = paste0("Metro Route Speed - ", route), -device = pdf, -height = 8.5, -width = 11, -units = "in", -create.dir = TRUE) -} -View(metro_data) -View(metro_summary) -metro_summary <- metro_data %>% -left_join(routes_categorized, by = "pid") %>% -mutate(lat_bucket = round(lat / lat_round) * lat_round, -lon_bucket = round(lon / lon_round) * lon_round) -View(metro_summary) -metro_summary <- metro_data %>% -left_join(routes_categorized, by = "pid") %>% -mutate(lat_bucket = round(lat / lat_round) * lat_round, -lon_bucket = round(lon / lon_round) * lon_round) %>% -group_by(rt, name, pid, lat_bucket, lon_bucket) %>% -summarise(spd = median(spd, na.rm = TRUE), -spd_calc = median(spd_calc, na.rm = TRUE), -pdist = median(pdist), -trip_count = length(unique(origtatripno))) -metro_data_sf <- st_as_sf(metro_data %>% filter(!is.na(lon)), coords = c("lon", "lat"), remove = FALSE) -metro_summary_sf <- st_as_sf(metro_summary %>% filter(!is.na(lon_bucket)), coords = c("lon_bucket", "lat_bucket"), remove = FALSE) -metro_segments <- metro_summary %>% -group_by(rt, pid) %>% -arrange(pdist) %>% -mutate(lat_bucket_lag = lag(lat_bucket), -lon_bucket_lag = lag(lon_bucket)) %>% -filter(!is.na(lat_bucket) & !is.na(lon_bucket) & !is.na(lat_bucket_lag) & !is.na(lon_bucket_lag)) %>% -mutate( -geometry = pmap(list(lat_bucket, lon_bucket, lat_bucket_lag, lon_bucket_lag), -~st_linestring(matrix(c(..2, ..1, ..4, ..3), ncol = 2, byrow = TRUE))) -) %>% -st_as_sf(sf_column_name = "geometry") %>% -group_by(rt, name, lat_bucket, lon_bucket) %>% -summarise(weighted.mean(spd_calc, trip_count)) -View(metro_segments) -metro_segments <- metro_summary %>% -group_by(rt, pid) %>% -arrange(pdist) %>% -mutate(lat_bucket_lag = lag(lat_bucket), -lon_bucket_lag = lag(lon_bucket)) %>% -filter(!is.na(lat_bucket) & !is.na(lon_bucket) & !is.na(lat_bucket_lag) & !is.na(lon_bucket_lag)) %>% -mutate( -geometry = pmap(list(lat_bucket, lon_bucket, lat_bucket_lag, lon_bucket_lag), -~st_linestring(matrix(c(..2, ..1, ..4, ..3), ncol = 2, byrow = TRUE))) -) %>% -st_as_sf(sf_column_name = "geometry") %>% -group_by(rt, name, lat_bucket, lon_bucket) %>% -summarise(spd_calc = weighted.mean(spd_calc, trip_count)) -View(metro_segments) -for (route in unique(routes_categorized$name)){ -route_focus <- routes_categorized %>% filter(name == route) %>% pull(pid) -ggmap(basemap) + -labs(title = paste0("Metro Route Speed - ", route), -subtitle = paste0("averaged between ", -sum(route_counts %>% filter(pid %in% route_focus) %>% pull(route_count)), -" bus trips - ", -min(date(metro_data$time)), -" to ", -max(date(metro_data$time))), -x = NULL, -y = NULL) + -theme(axis.text=element_blank(), -axis.ticks=element_blank(), -plot.caption = element_text(color = "grey")) + -geom_sf(data = metro_segments %>% filter(pid %in% route_focus), -inherit.aes = FALSE, -aes(color = spd_calc), -linewidth = 1) + -scale_color_distiller(palette = "RdYlGn", direction = "reverse", limits = c(0,70), name = "Average speed or segment\n(calculated with locations, not reported speed)") -ggsave(file = paste0("figures/", -route, -".pdf"), -title = paste0("Metro Route Speed - ", route), -device = pdf, -height = 8.5, -width = 11, -units = "in", -create.dir = TRUE) -} -for (route in unique(routes_categorized$name)){ -route_focus <- routes_categorized %>% filter(name == route) %>% pull(pid) -ggmap(basemap) + -labs(title = paste0("Metro Route Speed - ", route), -subtitle = paste0("averaged between ", -sum(route_counts %>% filter(pid %in% route_focus) %>% pull(route_count)), -" bus trips - ", -min(date(metro_data$time)), -" to ", -max(date(metro_data$time))), -x = NULL, -y = NULL) + -theme(axis.text=element_blank(), -axis.ticks=element_blank(), -plot.caption = element_text(color = "grey")) + -geom_sf(data = metro_segments %>% filter(name %in route), -ggmap(basemap) + -labs(title = paste0("Metro Route Speed - ", route), -subtitle = paste0("averaged between ", -sum(route_counts %>% filter(pid %in% route_focus) %>% pull(route_count)), -" bus trips - ", -min(date(metro_data$time)), -" to ", -max(date(metro_data$time))), -x = NULL, -y = NULL) + -theme(axis.text=element_blank(), -axis.ticks=element_blank(), -plot.caption = element_text(color = "grey")) + -geom_sf(data = metro_segments %>% filter(name %in% route), -inherit.aes = FALSE, -aes(color = spd_calc), -linewidth = 1) + -scale_color_distiller(palette = "RdYlGn", direction = "reverse", limits = c(0,70), name = "Average speed or segment\n(calculated with locations, not reported speed)") -for (route in unique(routes_categorized$name)){ -route_focus <- routes_categorized %>% filter(name == route) %>% pull(pid) -ggmap(basemap) + -labs(title = paste0("Metro Route Speed - ", route), -subtitle = paste0("averaged between ", -sum(route_counts %>% filter(pid %in% route_focus) %>% pull(route_count)), -" bus trips - ", -min(date(metro_data$time)), -" to ", -max(date(metro_data$time))), -x = NULL, -y = NULL) + -theme(axis.text=element_blank(), -axis.ticks=element_blank(), -plot.caption = element_text(color = "grey")) + -geom_sf(data = metro_segments %>% filter(name %in% route), -inherit.aes = FALSE, -aes(color = spd_calc), -linewidth = 1) + -scale_color_distiller(palette = "RdYlGn", direction = "reverse", limits = c(0,70), name = "Average speed or segment\n(calculated with locations, not reported speed)") -ggsave(file = paste0("figures/", -route, -".pdf"), -title = paste0("Metro Route Speed - ", route), -device = pdf, -height = 8.5, -width = 11, -units = "in", -create.dir = TRUE) -} -# A West -quantile(metro_segments %>% filter(pid %in% c("469")) %>% pull(spd_calc), c(0,0.25, 0.5, 0.75, 1), na.rm = TRUE) -quantile(metro_segments %>% filter(name %in% c("A_West")) %>% pull(spd_calc), c(0,0.25, 0.5, 0.75, 1), na.rm = TRUE) -metro_data <- metro_raw %>% -mutate(time = with_tz(time, "America/Chicago"), -spd = as.double(spd), -pdist = as.double(pdist), -lon = as.double(lon), -lat = as.double(lat)) %>% -group_by(pid, vid) %>% -arrange(time) %>% -mutate(pdist_lag = lag(pdist), -time_lag = lag(time)) %>% -mutate(spd_calc = case_when(pdist_lag > pdist ~ NA, -pdist_lag <= pdist ~ (pdist - pdist_lag)/as.double(difftime(time, time_lag, units = "hours"))/5280)) %>% -left_join(routes_categorized, by = "pid") -ggplot(data = metro_data %>% filter(name %in% route)) + -geom_violin(aes(x = time, -y = spd_calc)) -metro_data <- metro_raw %>% -mutate(time = with_tz(time, "America/Chicago"), -spd = as.double(spd), -pdist = as.double(pdist), -lon = as.double(lon), -lat = as.double(lat)) %>% -mutate(date = date(time)) %>% -group_by(pid, vid) %>% -arrange(time) %>% -mutate(pdist_lag = lag(pdist), -time_lag = lag(time)) %>% -mutate(spd_calc = case_when(pdist_lag > pdist ~ NA, -pdist_lag <= pdist ~ (pdist - pdist_lag)/as.double(difftime(time, time_lag, units = "hours"))/5280)) %>% -left_join(routes_categorized, by = "pid") -ggplot(data = metro_data %>% filter(name %in% route)) + -geom_violin(aes(x = time, -y = spd_calc, -group = date)) -ggplot(data = metro_data %>% filter(name %in% route)) + -geom_violin(aes(x = date, -y = spd_calc)) -ggplot(data = metro_data %>% filter(name %in% route)) + -geom_boxplot(aes(x = date, -y = spd_calc)) -library(tidyverse) -library(influxdbclient) -library(glue) -library(ggmap) -library(sf) -# parameters needed to make connection to Database -token <- substr(read_file(file = 'api_keys/influxdb_madison-metro'), 1, 88) -org <- "e2581d54779b077f" -bucket <- "madison-metro" -days <- 1 -influx_connection <- InfluxDBClient$new(url = "https://influxdb.dendroalsia.net", -token = token, -org = org) -#--- -# Fields you want to query -fields <- c("des", "spd", "pdist", "lon", "lat", "dly", "origtatripno") -# Creating an empty list to store results for each field -results <- vector("list", length(fields)) -# Loop through each field, get data, and coerce types if needed -for (i in seq_along(fields)) { -field <- fields[i] -query_string <- glue('from(bucket: "{bucket}") ', -'|> range(start: -{days}d) ', -'|> filter(fn: (r) => r["_measurement"] == "vehicle_data")', -'|> filter(fn: (r) => r["_field"] == "{field}")') -data <- influx_connection$query(query_string) -# Ensure the columns are coerced to consistent types -# (Optionally add coercion based on your expected types) -data <- bind_rows(data) %>% -mutate(value = as.character(`_value`), -field = `_field`) %>% -select(time, rt, pid, vid, value, field) -results[[i]] <- data -} -# Bind all results together -metro_raw <- bind_rows(results) -metro_raw <- pivot_wider(metro_raw, values_from = value, names_from = field) %>% -distinct(pid, vid, lat, lon, spd, .keep_all = TRUE) -routes_categorized <- read_csv(file = "routes_categorized.csv", col_types = "cc") -metro_data <- metro_raw %>% -mutate(time = with_tz(time, "America/Chicago"), -spd = as.double(spd), -pdist = as.double(pdist), -lon = as.double(lon), -lat = as.double(lat)) %>% -mutate(date = date(time)) %>% -group_by(pid, vid) %>% -arrange(time) %>% -mutate(pdist_lag = lag(pdist), -time_lag = lag(time)) %>% -mutate(spd_calc = case_when(pdist_lag > pdist ~ NA, -pdist_lag <= pdist ~ (pdist - pdist_lag)/as.double(difftime(time, time_lag, units = "hours"))/5280)) %>% -left_join(routes_categorized, by = "pid") -bucket_feet <- 500 -lat_round <- bucket_feet/364481.35 -lon_round <- bucket_feet/267203.05 -metro_summary <- metro_data %>% -mutate(lat_bucket = round(lat / lat_round) * lat_round, -lon_bucket = round(lon / lon_round) * lon_round) %>% -group_by(rt, name, pid, lat_bucket, lon_bucket) %>% -summarise(spd = median(spd, na.rm = TRUE), -spd_calc = median(spd_calc, na.rm = TRUE), -pdist = median(pdist), -trip_count = length(unique(origtatripno))) -metro_data_sf <- st_as_sf(metro_data %>% filter(!is.na(lon)), coords = c("lon", "lat"), remove = FALSE) -metro_summary_sf <- st_as_sf(metro_summary %>% filter(!is.na(lon_bucket)), coords = c("lon_bucket", "lat_bucket"), remove = FALSE) -metro_segments <- metro_summary %>% -group_by(rt, pid) %>% -arrange(pdist) %>% -mutate(lat_bucket_lag = lag(lat_bucket), -lon_bucket_lag = lag(lon_bucket)) %>% -filter(!is.na(lat_bucket) & !is.na(lon_bucket) & !is.na(lat_bucket_lag) & !is.na(lon_bucket_lag)) %>% -mutate( -geometry = pmap(list(lat_bucket, lon_bucket, lat_bucket_lag, lon_bucket_lag), -~st_linestring(matrix(c(..2, ..1, ..4, ..3), ncol = 2, byrow = TRUE))) -) %>% -st_as_sf(sf_column_name = "geometry") %>% -group_by(rt, name, lat_bucket, lon_bucket) %>% -summarise(spd_calc = weighted.mean(spd_calc, trip_count)) -# get counts of routes -route_counts <- metro_data %>% group_by(pid, rt, des) %>% summarise(route_count = length(unique(origtatripno))) -# make charts -ggplot(data = metro_summary %>% filter(pid %in% (routes_categorized %>% filter(name %in% c("B_North", "B_South")) %>% pull (pid))), -aes(x = pdist, -y = spd_calc)) + -geom_point() + -geom_smooth() + -facet_grid(paste0(rt, "-", des) ~ .) -# make charts -ggplot(data = metro_summary %>% filter(pid %in% (routes_categorized %>% filter(name %in% c("B_North", "B_South")) %>% pull (pid))), -aes(x = pdist, -y = spd_calc)) + -geom_point() + -geom_smooth() + -facet_grid(name ~ .) -library(tidyverse) -library(influxdbclient) -library(glue) -library(ggmap) -library(sf) -# parameters needed to make connection to Database -token <- substr(read_file(file = 'api_keys/influxdb_madison-metro'), 1, 88) -org <- "e2581d54779b077f" -bucket <- "madison-metro" -days <- 1 -influx_connection <- InfluxDBClient$new(url = "https://influxdb.dendroalsia.net", -token = token, -org = org) -#--- -# Fields you want to query -fields <- c("des", "spd", "pdist", "lon", "lat", "dly", "origtatripno") -# Creating an empty list to store results for each field -results <- vector("list", length(fields)) -# Loop through each field, get data, and coerce types if needed -for (i in seq_along(fields)) { -field <- fields[i] -query_string <- glue('from(bucket: "{bucket}") ', -'|> range(start: -{days}d) ', -'|> filter(fn: (r) => r["_measurement"] == "vehicle_data")', -'|> filter(fn: (r) => r["_field"] == "{field}")') -data <- influx_connection$query(query_string) -# Ensure the columns are coerced to consistent types -# (Optionally add coercion based on your expected types) -data <- bind_rows(data) %>% -mutate(value = as.character(`_value`), -field = `_field`) %>% -select(time, rt, pid, vid, value, field) -results[[i]] <- data -} -# Bind all results together -metro_raw <- bind_rows(results) -metro_raw <- pivot_wider(metro_raw, values_from = value, names_from = field) %>% -distinct(pid, vid, lat, lon, spd, .keep_all = TRUE) -routes_categorized <- read_csv(file = "routes_categorized.csv", col_types = "cc") -metro_data <- metro_raw %>% -mutate(time = with_tz(time, "America/Chicago"), -spd = as.double(spd), -pdist = as.double(pdist), -lon = as.double(lon), -lat = as.double(lat)) %>% -mutate(date = date(time)) %>% -group_by(pid, vid) %>% -arrange(time) %>% -mutate(pdist_lag = lag(pdist), -time_lag = lag(time)) %>% -mutate(spd_calc = case_when(pdist_lag > pdist ~ NA, -pdist_lag <= pdist ~ (pdist - pdist_lag)/as.double(difftime(time, time_lag, units = "hours"))/5280)) %>% -left_join(routes_categorized, by = "pid") -bucket_feet <- 500 -lat_round <- bucket_feet/364481.35 -lon_round <- bucket_feet/267203.05 -metro_summary <- metro_data %>% -mutate(lat_bucket = round(lat / lat_round) * lat_round, -lon_bucket = round(lon / lon_round) * lon_round) %>% -group_by(rt, name, pid, lat_bucket, lon_bucket) %>% -summarise(spd = median(spd, na.rm = TRUE), -spd_calc = median(spd_calc, na.rm = TRUE), -pdist = median(pdist), -trip_count = length(unique(origtatripno))) -metro_data_sf <- st_as_sf(metro_data %>% filter(!is.na(lon)), coords = c("lon", "lat"), remove = FALSE) -metro_summary_sf <- st_as_sf(metro_summary %>% filter(!is.na(lon_bucket)), coords = c("lon_bucket", "lat_bucket"), remove = FALSE) -metro_segments <- metro_summary %>% -group_by(rt, pid) %>% -arrange(pdist) %>% -mutate(lat_bucket_lag = lag(lat_bucket), -lon_bucket_lag = lag(lon_bucket)) %>% -filter(!is.na(lat_bucket) & !is.na(lon_bucket) & !is.na(lat_bucket_lag) & !is.na(lon_bucket_lag)) %>% -mutate( -geometry = pmap(list(lat_bucket, lon_bucket, lat_bucket_lag, lon_bucket_lag), -~st_linestring(matrix(c(..2, ..1, ..4, ..3), ncol = 2, byrow = TRUE))) -) %>% -st_as_sf(sf_column_name = "geometry") %>% -group_by(rt, name, lat_bucket, lon_bucket) %>% -summarise(spd_calc = weighted.mean(spd_calc, trip_count)) -# get counts of routes -route_counts <- metro_data %>% group_by(pid, rt, des) %>% summarise(route_count = length(unique(origtatripno))) -# make charts -ggplot(data = metro_summary %>% filter(pid %in% (routes_categorized %>% filter(name %in% c("B_North", "B_South")) %>% pull (pid))), -aes(x = pdist, -y = spd_calc)) + -geom_point() + -geom_smooth() + -facet_grid(name ~ .) -register_stadiamaps(key = substr(read_file(file = "api_keys/stadia_api_key"), 1, 36)) -bbox <- c(left = min(metro_data$lon), -bottom = min(metro_data$lat), -right = max(metro_data$lon), -top = max(metro_data$lat)) -#get basemap -basemap <- get_stadiamap(bbox = bbox, zoom = 13, maptype = "stamen_toner_lite") -quantile(metro_segments %>% filter(name %in% c("A_West")) %>% pull(spd_calc), c(0,0.25, 0.5, 0.75, 1), na.rm = TRUE) -for (route in unique(routes_categorized$name)){ -route_focus <- routes_categorized %>% filter(name == route) %>% pull(pid) -ggmap(basemap) + -labs(title = paste0("Metro Route Speed - ", route), -subtitle = paste0("averaged between ", -sum(route_counts %>% filter(pid %in% route_focus) %>% pull(route_count)), -" bus trips - ", -min(date(metro_data$time)), -" to ", -max(date(metro_data$time))), -x = NULL, -y = NULL) + -theme(axis.text=element_blank(), -axis.ticks=element_blank(), -plot.caption = element_text(color = "grey")) + -geom_sf(data = metro_segments %>% filter(name %in% route), -inherit.aes = FALSE, -aes(color = spd_calc), -linewidth = 1) + -scale_color_distiller(palette = "RdYlGn", direction = "reverse", limits = c(0,70), name = "Average speed or segment\n(calculated with locations, not reported speed)") -ggsave(file = paste0("figures/", -route, -"_map.pdf"), -title = paste0("Metro Route Speed - ", route), -device = pdf, -height = 8.5, -width = 11, -units = "in", -create.dir = TRUE) -ggplot(data = metro_data %>% filter(name %in% route)) + -geom_boxplot(aes(x = date, -y = spd_calc)) -ggsave(file = paste0("figures/", -route, -"_date.pdf"), -title = paste0("Metro Route Speed - ", route), -device = pdf, -height = 8.5, -width = 11, -units = "in", -create.dir = TRUE) -} -ggplot(data = metro_summary %>% filter(!is.blank(name)), -aes(x = pdist, -y = spd_calc)) + -geom_boxplot() -ggplot(data = metro_summary %>% filter(!is.na(name)), -aes(x = pdist, -y = spd_calc)) + -geom_boxplot() -ggplot(data = metro_summary %>% filter(!is.na(name)), -aes(x = name, -y = spd_calc)) + -geom_boxplot() -ggplot(data = metro_summary %>% filter(!is.na(name)), -aes(x = name, -y = spd_calc)) + -geom_violin() -ggplot(data = metro_summary %>% filter(!is.na(name)), -aes(x = name, -y = spd_calc)) + -geom_boxplot() diff --git a/madison-metro.R b/madison-metro.R index aad0eae..6c858c8 100644 --- a/madison-metro.R +++ b/madison-metro.R @@ -5,9 +5,14 @@ library(ggmap) library(sf) # parameters needed to make connection to Database -token <- substr(read_file(file = 'api_keys/influxdb_madison-metro'), 1, 88) -org <- "e2581d54779b077f" -bucket <- "madison-metro" +#token <- substr(read_file(file = 'api_keys/influxdb_madison-metro'), 1, 88) +#org <- "e2581d54779b077f" +#bucket <- "madison-metro" + +token <- substr(read_file(file = 'api_keys/influxdb_madison-metro_new'), 1, 88) +org <- "32b7fde0efd8a3b3" +bucket <- "metro_vehicles" + days <- 1