setwd("/Users/connorwilliams/Documents/SportsAn/NFLBDB22")
source("https://raw.githubusercontent.com/ptallon/SportsAnalytics_Fall2026/refs/heads/main/SharedCode.R")
library(data.table)
##
## Attaching package: 'data.table'
## The following object is masked from 'package:base':
##
## %notin%
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:data.table':
##
## between, first, last
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(av)
library(sf)
## Linking to GEOS 3.13.0, GDAL 3.8.5, PROJ 9.5.1; sf_use_s2() is TRUE
library(knitr)
library(kableExtra)
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
library(ggimage)
library(stringr)
library(scales)
library(hms)
library(gganimate)
library(gifski)
library(ggforce)
y1 <- fread("tracking2018.csv")
y2 <- fread("tracking2019.csv")
y3 <- fread("tracking2020.csv")
tracking_df <- rbind(y1, y2, y3)
rm(y1, y2, y3)
setwd("/Users/connorwilliams/Documents/SportsAn/NFLBDB22")
plays <- fread("plays.csv")
players <- fread("players.csv")
games <- fread("games.csv")
plays_df <- left_join(plays, players, by = c("kickerId" = "nflId"))
plays_df <- left_join(plays_df, games, by = c("gameId"))
df <- tracking_df |>
filter(gameId == 2018123000, playId == 36) |>
left_join(plays |> select(gameId, playId,
absoluteYardlineNumber, playDescription),
by = c("gameId", "playId")) |>
data.frame()
More Blurb
setwd("/Users/connorwilliams/Documents/SportsAn/NFLBDB22")
source("https://raw.githubusercontent.com/mlfurman3/gg_field/main/gg_field.R")
ggplot(df) +
scale_size_manual(values = c(6, 4, 6), guide = "none") +
scale_shape_manual(values = c(21, 16, 21), guide = "none") +
scale_fill_manual(values = c("firebrick1", "black", "purple"), guide = "none") +
scale_color_manual(values = c("black", "#663300", "black"), guide = "none" ) +
# Visualize the field of play
gg_field(yardmin = max(-5, min(df$x)-5), yardmax = min(125, max(df$x)+5)) +
# Add points for each players and the ball
geom_point(aes(x = x, y = y, shape = team, color = team,
size = team, fill = team))
