diff --git a/.gitignore b/.gitignore index 599f426..b349772 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,19 @@ .Rproj* - data/addresses/* api_keys/* figures/* - .Rhistory .Rproj.user +*.md +.DS_Store +!README.md +.Rhistory +*\.\#* +data +!data/ +.RData +data-bkup/ +data-bkup +*.R +*.bak +archive/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..bfc6f18 --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ +route_analysis: R/route_analysis.Rmd + R -e 'library("rmarkdown"); old_path <- Sys.getenv("PATH"); Sys.setenv(PATH = paste(old_path, "/usr/local/bin", sep = ":")); rmarkdown::render(knit_root_dir = "./", output_dir = "./html", input = "./R/route_analysis.Rmd", output_file = "./html/route_analysis.html")' + +clean: clean-data clean-figure clean-script + +clean-data: + rm -vf ./R/data/*.rds + +clean-script: + rm -rvf ./*.md + +clean-figure: + rm -rvf ./figure/ + +.PHONY: data diff --git a/route_analysis.R b/R/route_analysis.Rmd similarity index 83% rename from route_analysis.R rename to R/route_analysis.Rmd index 24ad135..f391e28 100644 --- a/route_analysis.R +++ b/R/route_analysis.Rmd @@ -1,3 +1,17 @@ +--- +title: "Route Analysis" +output: + html_document: + toc: true + toc_depth: 5 + toc_float: + collapsed: false + smooth_scroll: true +--- + +```{r libs, eval = TRUE, echo = TRUE, results = "show", warning = FALSE, error = TRUE, message = FALSE} +date() +rm(list=ls()) library(tidyverse) library(ggmap) library(sf) @@ -5,8 +19,13 @@ library(osrm) library(smoothr) library(magick) library(ggnewscale) +fig.height <- 6 +set.seed(1) +``` +# Main R script +```{r Rscript, eval = TRUE, echo = TRUE, results = "show", warning = FALSE, error = TRUE, message = FALSE} ## school focus school_focus <- data.frame(name = c("East High School"), NCES_CODE = c("550852000925")) @@ -14,10 +33,10 @@ school_focus <- data.frame(name = c("East High School"), NCES_CODE = c("55085200 walk_boundary_m <- 1.5 * 1609 ## load school locations -WI_schools <- st_read(dsn = "data/Schools/WI_schools.gpkg") +WI_schools <- st_read(dsn = "../data/Schools/WI_schools.gpkg") ## load addresses -addresses <- read_csv(file="data/addresses/Addresses_Students_EastHS_2024_GeocodeResults.csv") %>% +addresses <- read_csv(file="../data/addresses/Addresses_Students_EastHS_2024_GeocodeResults.csv") %>% filter(lat > 0) %>% st_as_sf(coords=c("lon","lat"), crs=4326) # remember x=lon and y=lat @@ -25,7 +44,7 @@ addresses <- read_csv(file="data/addresses/Addresses_Students_EastHS_2024_Geocod options(osrm.server = "http://127.0.0.1:5000/") options(osrm.profile = "walk") -register_stadiamaps(key = substr(read_file(file = "api_keys/stadia_api_key"), 1, 36)) +register_stadiamaps(key = substr(read_file(file = "../api_keys/stadia_api_key"), 1, 36)) ## subset addresses within 1.5 miles walk_boundary_poly <- fill_holes(st_make_valid(osrmIsodistance( @@ -37,7 +56,7 @@ walk_boundary_poly <- fill_holes(st_make_valid(osrmIsodistance( addresses_near <- st_intersection(addresses, walk_boundary_poly) ## load bike tls -bike_lts <- st_read("data/bike_lts/bike_lts_DANE.geojson") +bike_lts <- st_read("../data/bike_lts/bike_lts_DANE.geojson") bike_lts[["lts"]] <- as.factor(bike_lts$LTS_F) bike_lts_scale <- data.frame(code = c(1, 2, 3, 4, 9), @@ -58,7 +77,7 @@ for(i in addresses_near$number) { routes <- bind_rows(routes) ## combine routes -bike_lts_buffer <- st_buffer(st_intersection(bike_lts, walk_boundary_poly), 10) +bike_lts_buffer <- st_buffer(st_intersection(bike_lts, walk_boundary_poly), 20) bike_lts_buffer["student_use"] <- unlist(lapply(st_intersects(bike_lts_buffer, routes), length)) @@ -66,14 +85,14 @@ bike_lts <- st_join(bike_lts, bike_lts_buffer %>% select(OBJECTID, student_use)) ## make maps # load logo -logo <- image_read(path = "other/BFW_Logo_180_x_200_transparent_background.png") -school_symbol <- image_read_svg(path = "other/school_FILL0_wght400_GRAD0_opsz24.svg") +logo <- image_read(path = "../other/BFW_Logo_180_x_200_transparent_background.png") +school_symbol <- image_read_svg(path = "../other/school_FILL0_wght400_GRAD0_opsz24.svg") bbox <- st_bbox(st_transform(st_buffer(addresses_near, dist = 500), crs = 4326)) -bbox <- c(left = as.double(bbox[1]), - bottom = as.double(bbox[2]), - right = as.double(bbox[3]), +bbox <- c(left = as.double(bbox[1]), + bottom = as.double(bbox[2]), + right = as.double(bbox[3]), top = as.double(bbox[4])) #get basemap @@ -87,7 +106,7 @@ ggmap(basemap) + x = NULL, y = NULL, color = NULL, - linewidth = "How many students can use road") + + linewidth = "Potential student walkers") + theme(axis.text=element_blank(), axis.ticks=element_blank(), plot.caption = element_text(color = "grey")) + @@ -117,8 +136,8 @@ ggmap(basemap) + label.size = 0.04, size = 2) -ggsave(file = paste0("figures/", - school_focus %>% pull(name), +ggsave(file = paste0("../figures/", + school_focus %>% pull(name), " Routes.pdf"), title = paste0(school_focus %>% pull(name), " Walking Routes"), device = pdf, @@ -131,11 +150,11 @@ ggsave(file = paste0("figures/", ggmap(basemap) + labs(title = paste0("Walking routes for students at ", school_focus %>% pull(name)), - subtitle = "only showing routes within the 1.5 walk boundary", + subtitle = "only showing routes within the walk boundary", x = NULL, y = NULL, color = NULL, - linewidth = "How many students can use road") + + linewidth = "Potential student walkers") + theme(axis.text=element_blank(), axis.ticks=element_blank(), plot.caption = element_text(color = "grey")) + @@ -164,8 +183,8 @@ ggmap(basemap) + nudge_y = 0.0015, label.size = 0.04, size = 2) -ggsave(file = paste0("figures/", - school_focus %>% pull(name), +ggsave(file = paste0("../figures/", + school_focus %>% pull(name), " Routes - Traffic Stress.pdf"), title = paste0(school_focus %>% pull(name), " Walking Routes - Traffic Stress"), device = pdf, @@ -208,8 +227,8 @@ ggmap(basemap) + nudge_y = 0.0015, label.size = 0.04, size = 2) -ggsave(file = paste0("figures/", - school_focus %>% pull(name), +ggsave(file = paste0("../figures/", + school_focus %>% pull(name), " Addresses.pdf"), title = paste0(school_focus %>% pull(name), " Addresses"), device = pdf, @@ -217,3 +236,13 @@ ggsave(file = paste0("figures/", width = 11, units = "in", create.dir = TRUE) + + +``` + +# Appendix + +```{r chunklast, eval = TRUE, echo = TRUE, results = "show", warning = TRUE, error = TRUE, message = TRUE} +date() +sessionInfo() +``` diff --git a/route_analysis.Rproj b/R/route_analysis.Rproj similarity index 100% rename from route_analysis.Rproj rename to R/route_analysis.Rproj diff --git a/README.md b/README.md index 2e4d3e9..5354ae9 100644 --- a/README.md +++ b/README.md @@ -15,3 +15,7 @@ This script will generate a few figures: ### A map of those routes colored by the level of traffic stress to bike ![example routes-lts figure](examples/example-routes-lts.png) + +## Using make +The command `make route_analysis` will run *route_analysis.Rmd* which +is an R markdown file containing the original R script *route_analysis.R* diff --git a/html/.gitignore b/html/.gitignore new file mode 100644 index 0000000..5e7d273 --- /dev/null +++ b/html/.gitignore @@ -0,0 +1,4 @@ +# Ignore everything in this directory +* +# Except this file +!.gitignore