--- title: "Show Analysis: 24" author: "Lukas Burk" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteEncoding{UTF-8} %\VignetteIndexEntry{Show Analysis: 24} %\VignetteEngine{knitr::rmarkdown} editor_options: chunk_output_type: console --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", message = FALSE, warning = FALSE, error = FALSE, out.width = "100%" ) ``` ```{r startup} library(tRakt) library(tibble) # For glimpse() ``` ## Step 1: Search Use the search function to find the show you're looking for. ```{r 24_search} show_info <- search_query("24", type = "show") show_info ``` ## Step 2: Use the ID Use the `trakt` ID (recommended over other IDs) for subsequent API calls. In this case, we'll use `seasons_summary()` to get data for all seasons of the show, while also getting an additional list-column containing all episode data, which includes user ratings. ```{r 24_getting_seasons} seasons <- seasons_summary(show_info$trakt, extended = "full", episodes = TRUE) glimpse(seasons) ``` ## Step 3: Tidying up We're interested in the `episodes` list-column, which needs unnesting. In this case we can simply use `dplyr::bind_rows` to take the list of `tbls` that is `seasons$episodes` and basically `rbind` them all together, meaning the result is a `tibble` of the episode data we care about. ```{r 24_episodes_unnesting} library(dplyr) episodes <- bind_rows(seasons$episodes) glimpse(episodes) ``` ## Step 4: Graph! Now we have our episode data in a tidy form, might as well look at it. ```{r 24_episodes_plot} library(ggplot2) ggplot(data = episodes, aes(x = episode, y = rating, color = votes)) + geom_point(size = 3, alpha = 2 / 3) + facet_wrap(~season, nrow = 1, scales = "free_x") + scale_x_continuous(breaks = c(1, 10, 20), expand = c(0, 3)) + scale_y_continuous(breaks = seq(0, 10, .5), minor_breaks = seq(0, 10, .25), limits = c(7, 9)) + scale_color_viridis_c() + guides(color = guide_colorbar(barwidth = unit(6, "cm"), title.vjust = .75)) + labs( title = "24: Episode Ratings on trakt.tv", subtitle = "Episode ratings by trakt.tv users by season", x = "Episode Number", y = "Rating (1-10)", color = "# of Votes", caption = "jemus42.github.io/tRakt" ) + theme_minimal() + theme( legend.position = "bottom" ) ```