Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
eval = FALSE
)
## ----cran-install-------------------------------------------------------------
# install.packages("mobdb")
## ----runiverse-install--------------------------------------------------------
# # install from r-universe
# install.packages("mobdb", repos = c("https://jasonad123.r-universe.dev", "https://cloud.r-project.org"))
## ----installation-------------------------------------------------------------
# # install.packages("pak")
# pak::pak("jasonad123/mobdb")
## ----auth-setup---------------------------------------------------------------
# library(mobdb)
#
# # Shortcut to launch the Mobility Database in your browser
# mobdb_browse()
#
# # Set your API refresh token (do this once)
# # mobdb_set_key("your-refresh-token-here")
#
# # Check if authentication is configured
# mobdb_has_key()
# #> [1] TRUE
## ----auth-storage-------------------------------------------------------------
# usethis::edit_r_environ()
# # Add this line:
# # MOBDB_REFRESH_TOKEN=your-refresh-token-here
# # Then restart your R session
## ----discover-feeds-----------------------------------------------------------
# # Find all feeds in California
# ca_feeds <- feeds(
# country_code = "US",
# subdivision_name = "California",
# data_type = "gtfs"
# )
#
# # View results
# head(ca_feeds)
# #> # A tibble: 6 × 10
# #> id data_type status provider feed_name location...
#
# # Search by provider name
# bart_feeds <- feeds("BART")
# bart_feeds
## ----download-feed------------------------------------------------------------
# # Download by feed ID (Bay Area Rapid Transit)
# bart <- download_feed("mdb-53")
#
# # Or search and download in one step (use full name for better results)
# bart <- download_feed(provider = "Bay Area Rapid Transit")
#
# # The result is a gtfs object (from tidytransit)
# class(bart)
# #> [1] "tidygtfs" "gtfs" "list"
#
# names(bart)
# #> [1] "agency" "calendar" "calendar_attributes" "calendar_dates" "directions" ...
## ----analyze-with-tidytransit-------------------------------------------------
# library(tidytransit)
#
# # Validate the feed
# validation <- validate_gtfs(bart)
# summary(validation)
#
# # Calculate stop frequencies
# stop_freq <- get_stop_frequency(bart)
# head(stop_freq)
#
# # Calculate route frequencies
# route_freq <- get_route_frequency(bart)
# head(route_freq)
#
# # Convert to spatial features
# bart_sf <- gtfs_as_sf(bart)
# plot(bart_sf$stops)
## ----location-search----------------------------------------------------------
# # Find feeds in a specific municipality
# seattle_feeds <- feeds(municipality = "Seattle", data_type = "gtfs")
#
# # Find feeds in a country
# canada_feeds <- feeds(country_code = "CA", data_type = "gtfs")
#
# # Combine filters
# bc_feeds <- feeds(
# country_code = "CA",
# subdivision_name = "British Columbia",
# status = "active",
# data_type = "gtfs"
# )
## ----multiple-feeds-----------------------------------------------------------
# # Get feeds for several cities
# agencies <- c("TriMet", "King County Metro", "TransLink Vancouver")
# feeds_list <- lapply(agencies, function(agency) {
# feeds <- feeds(provider = agency, data_type = "gtfs")
# if (nrow(feeds) > 0) {
# download_feed(feeds$id[1])
# }
# })
#
# # Analyze each feed with tidytransit
# library(tidytransit)
# frequencies <- lapply(feeds_list, function(gtfs) {
# if (!is.null(gtfs)) get_stop_frequency(gtfs)
# })
## ----local-download-----------------------------------------------------------
# # Find feeds in a specific municipality or jurisdiction
# seattle_feeds <- feeds(municipality = "Seattle", data_type = "gtfs")
# pdx_feeds <- feeds(municipality = "Portland", data_type = "gtfs")
#
# # Download a feed directly to disk
# seattle_dl <- download_feed("mdb-1080", export_path = "data/gtfs/seattle.zip")
#
# # Download the raw feed, bypassing any processing by tidytransit
# pdx_dl <- download_feed("mdb-247", export_path = "data/gtfs/portland.zip", raw = TRUE)
## ----complete-example---------------------------------------------------------
# library(mobdb)
# library(tidytransit)
# library(ggplot2)
# library(tidyverse)
# library(sf)
#
# # 1. DISCOVER: Find feeds in Vancouver, BC, Canada
# vancouver_feeds <- feeds(
# provider = "TransLink",
# municipality = "Vancouver",
# country_code = "CA",
# data_type = "gtfs"
# )
#
# # 2. DOWNLOAD: Get the sixth feed (TransLink)
# translink <- download_feed(vancouver_feeds$id[1])
#
# # 3. VALIDATE: Check feed quality (tidytransit)
# validation <- validate_gtfs(translink)
# print(validation)
#
# # 3a. VALIDATE (another way): Check feed quality (using the Mobility Database report)
# vancouver_datasets <- mobdb_datasets(vancouver_feeds$id[1])
# feed_report <- get_validation_report(vancouver_datasets)
# print(feed_report)
#
# # 4. ANALYZE: Calculate AM route frequencies (tidytransit)
# am_route_freq <- get_route_frequency(translink,
# start_time = 6 * 3600, end_time = 10 * 3600)
# head(am_route_freq) %>%
# knitr::kable()
#
# # get_route_geometry needs a gtfs object that includes shapes as simple feature data frames
# translink <- gtfs_as_sf(translink)
# routes_sf <- get_route_geometry(translink)
#
# routes_sf <- routes_sf %>%
# inner_join(am_route_freq, by = "route_id")
#
# # 5. VISUALIZE: Plot routes with (tidytransit + ggplot2)
# # convert to an appropriate coordinate reference system
# routes_sf_crs <- sf::st_transform(routes_sf, 26910)
#
# routes_sf_crs %>%
# filter(median_headways < 10 * 60) %>%
# ggplot() +
# geom_sf(aes(colour = as.factor(median_headways))) +
# labs(color = "Headways") +
# geom_sf_text(aes(label = route_id)) +
# theme_bw()
#
# routes_sf_buffer <- st_buffer(routes_sf, dist = routes_sf$total_departures / 1e6)
#
# routes_sf_buffer %>%
# ggplot() +
# geom_sf(colour = alpha("white", 0), fill = alpha("blue", 0.5)) +
# theme_bw()
## ----historical-datasets------------------------------------------------------
# versions <- download_feed("mdb-53", latest = FALSE) # BART
# nrow(versions)
# head(versions$id, n = 10)
#
# # Download a specific historical version
# historical <- download_feed(dataset_id = "mdb-53-202507240047")
#
# # Compare validation across versions
# recent_versions <- versions[1:3, ]
# sapply(1:3, function(i) {
# get_validation_report(recent_versions[i, ])$total_error
# })
## ----feed-validation----------------------------------------------------------
# # Get validation report for a feed
# datasets <- mobdb_datasets("mdb-482") # Alexandria DASH
# validation <- get_validation_report(datasets)
# validation
#
# # View detailed validation report in browser
# view_validation_report("mdb-482")
#
# # Check feed quality, then download if clean
# if (validation$total_error == 0) {
# gtfs <- download_feed("mdb-482")
# }
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.