Today we are going to take a look at the BART website and look at the visualizations presented on the website analytics.bart.gov.

We will take a look at json formatted data, which is a very common data format for sharing data on the internet.

Directions:

  1. Create an R Project call it BART.
  2. Download the devices data into your project.
  3. Try the following R code to make the bar graph for the devices used to access the BART website. (It may be that the website is not updating properly, so try to select the latest date that is available.)

Load the libraries used.

library(pacman)
p_load(tidyverse, lubridate, jsonlite)

Read in the json data.

json_file <- "devices.json"

json_data <- fromJSON(json_file)
json_data

To view the .json file, click on the devices.json in the Files.

Fix the date variable so that it is a date value. Fix the visits column so that it is a numeric value. Note all of the columns read in a character variables. In general, when reading .json files, variables that are numeric need to have their type changed to numeric. Same for dates.

json_data <- json_data %>% mutate(date = as_date(date), visits = parse_number(visits))
json_data

Make a table of the most recent day’s data..

json_data %>% filter( date == "2020-09-11" ) %>%
  group_by(device) 

Make a bar plot.

json_data %>% filter( date == "2020-09-11" ) %>%
  ggplot(aes(y = visits, x = device)) +
  geom_bar(stat="identity")

Make a bar plot using percentages.

json_data <- json_data %>% filter( date == "2020-09-11" ) %>%
  mutate(visits_percentage = 100*visits/sum(visits))
json_data
json_data %>% ggplot(aes(y = visits_percentage, x = device)) +
  geom_bar(stat="identity") +
  coord_flip()

LS0tCnRpdGxlOiAiQkFSVCBhbmQganNvbiBkYXRhIgpvdXRwdXQ6CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgd29yZF9kb2N1bWVudDogZGVmYXVsdAogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKLS0tCgpUb2RheSB3ZSBhcmUgZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIEJBUlQgd2Vic2l0ZSBhbmQgbG9vayBhdCB0aGUgdmlzdWFsaXphdGlvbnMgcHJlc2VudGVkIG9uIHRoZSB3ZWJzaXRlIFthbmFseXRpY3MuYmFydC5nb3ZdKGh0dHBzOi8vYW5hbHl0aWNzLmJhcnQuZ292L2JhcnQpLgoKV2Ugd2lsbCB0YWtlIGEgbG9vayBhdCAqanNvbiogZm9ybWF0dGVkIGRhdGEsIHdoaWNoIGlzIGEgdmVyeSBjb21tb24gZGF0YSBmb3JtYXQgZm9yIHNoYXJpbmcgZGF0YSBvbiB0aGUgaW50ZXJuZXQuCgojIyBEaXJlY3Rpb25zOgoKMS4gQ3JlYXRlIGFuIFIgUHJvamVjdCBjYWxsIGl0IEJBUlQuCjIuIERvd25sb2FkIHRoZSBbZGV2aWNlc10oaHR0cHM6Ly93d3cuYmFydC5nb3Yvc2l0ZXMvZGVmYXVsdC9maWxlcy9hbmFseXRpY3MvZGV2aWNlcy5qc29uKSBkYXRhIGludG8geW91ciBwcm9qZWN0LgozLiBUcnkgdGhlIGZvbGxvd2luZyBSIGNvZGUgdG8gbWFrZSB0aGUgYmFyIGdyYXBoIGZvciB0aGUgZGV2aWNlcyB1c2VkIHRvIGFjY2VzcyB0aGUgQkFSVCB3ZWJzaXRlLiAgKEl0IG1heSBiZSB0aGF0IHRoZSB3ZWJzaXRlIGlzIG5vdCB1cGRhdGluZyBwcm9wZXJseSwgc28gdHJ5IHRvIHNlbGVjdCB0aGUgbGF0ZXN0IGRhdGUgdGhhdCBpcyBhdmFpbGFibGUuKQoKTG9hZCB0aGUgbGlicmFyaWVzIHVzZWQuCgpgYGB7cn0KbGlicmFyeShwYWNtYW4pCnBfbG9hZCh0aWR5dmVyc2UsIGx1YnJpZGF0ZSwganNvbmxpdGUpCmBgYAoKUmVhZCBpbiB0aGUganNvbiBkYXRhLgoKYGBge3J9Cmpzb25fZmlsZSA8LSAiZGV2aWNlcy5qc29uIgoKanNvbl9kYXRhIDwtIGZyb21KU09OKGpzb25fZmlsZSkKanNvbl9kYXRhCmBgYAoKVG8gdmlldyB0aGUgLmpzb24gZmlsZSwgY2xpY2sgb24gdGhlICpkZXZpY2VzLmpzb24qIGluIHRoZSBGaWxlcy4KCkZpeCB0aGUgKmRhdGUqIHZhcmlhYmxlIHNvIHRoYXQgaXQgaXMgYSBkYXRlIHZhbHVlLiAgRml4IHRoZSAqdmlzaXRzKiBjb2x1bW4gc28gdGhhdCBpdCBpcyBhIG51bWVyaWMgdmFsdWUuICBOb3RlIGFsbCBvZiB0aGUgY29sdW1ucyByZWFkIGluIGEgKmNoYXJhY3RlciogdmFyaWFibGVzLiAgSW4gZ2VuZXJhbCwgd2hlbiByZWFkaW5nIC5qc29uIGZpbGVzLCB2YXJpYWJsZXMgdGhhdCBhcmUgKm51bWVyaWMqIG5lZWQgdG8gaGF2ZSB0aGVpciB0eXBlIGNoYW5nZWQgdG8gbnVtZXJpYy4gIFNhbWUgZm9yIGRhdGVzLgoKYGBge3J9Cmpzb25fZGF0YSA8LSBqc29uX2RhdGEgJT4lIG11dGF0ZShkYXRlID0gYXNfZGF0ZShkYXRlKSwgdmlzaXRzID0gcGFyc2VfbnVtYmVyKHZpc2l0cykpCmpzb25fZGF0YQpgYGAKCk1ha2UgYSB0YWJsZSBvZiB0aGUgbW9zdCByZWNlbnQgZGF5J3MgZGF0YS4uCgpgYGB7cn0KanNvbl9kYXRhICU+JSBmaWx0ZXIoIGRhdGUgPT0gIjIwMjAtMDktMTEiICkgJT4lCiAgZ3JvdXBfYnkoZGV2aWNlKSAKYGBgCgpNYWtlIGEgYmFyIHBsb3QuCgpgYGB7cn0KanNvbl9kYXRhICU+JSBmaWx0ZXIoIGRhdGUgPT0gIjIwMjAtMDktMTEiICkgJT4lCiAgZ2dwbG90KGFlcyh5ID0gdmlzaXRzLCB4ID0gZGV2aWNlKSkgKwogIGdlb21fYmFyKHN0YXQ9ImlkZW50aXR5IikKYGBgCgpNYWtlIGEgYmFyIHBsb3QgdXNpbmcgcGVyY2VudGFnZXMuCgpgYGB7cn0KanNvbl9kYXRhIDwtIGpzb25fZGF0YSAlPiUgZmlsdGVyKCBkYXRlID09ICIyMDIwLTA5LTExIiApICU+JQogIG11dGF0ZSh2aXNpdHNfcGVyY2VudGFnZSA9IDEwMCp2aXNpdHMvc3VtKHZpc2l0cykpCmpzb25fZGF0YQpgYGAKCmBgYHtyfQpqc29uX2RhdGEgJT4lIGdncGxvdChhZXMoeSA9IHZpc2l0c19wZXJjZW50YWdlLCB4ID0gZGV2aWNlKSkgKwogIGdlb21fYmFyKHN0YXQ9ImlkZW50aXR5IikgKwogIGNvb3JkX2ZsaXAoKQpgYGA=