---
title: "NFL Punt Analytics Competition"
output:
  html_document:
    number_sections: false
    fig_caption: true
    toc: true
    fig_width: 7
    fig_height: 4.5
    theme: cosmo
    highlight: tango
    code_folding: hide
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE, fig.height = 6)
library(reshape2)
library(lubridate)
library(scales)
library(plotly)
library(shiny)

library(tidyverse) # metapackage with lots of helpful functions
library(feather)
library(readr)

ngs <- "convert-to-feather-for-use-in-other-kernels/ngs.feather"
non_ngs <- "/NFL-Punt-Analytics-Competition/"
path <- "../input/"
uploaded <- "punt-position-side/punt_position_side.csv"
play_by_play <-"nflplaybyplay2009to2016/NFL Play by Play 2009-2018 (v5).csv"

df <- read_feather(paste0(path,ngs))
```

```{r, prepare_data}

play_player_role_data <- read.csv(paste0(path, non_ngs, "play_player_role_data.csv")) %>% 
    mutate(u_play_id = paste0(GameKey,"-",PlayID))
    
punt_position_side <- read.csv(paste0(path, uploaded))

options(digits.secs = 3)

video_footage_injury <- read.csv(paste0(path, non_ngs, "video_footage-injury.csv")) %>% 
    mutate(u_play_id = paste0(gamekey, "-", playid))

injury_plays <- paste0(video_footage_injury$gamekey, "-", video_footage_injury$playid)

video_review <- read.csv(paste0(path, non_ngs, "video_review.csv")) %>% 
    mutate(u_play_id = paste0(GameKey,"-",PlayID)) %>% rename(injured_GSISID = GSISID) %>%
    mutate(Primary_Partner_GSISID = as.numeric(as.character(Primary_Partner_GSISID))) %>%
    mutate(injured_GSISID_2 = injured_GSISID) %>%
    mutate(Primary_Partner_GSISID_2 = Primary_Partner_GSISID)
    
injury_play_gsisid <- df %>% 
    filter(!is.na(Event)) %>%
    mutate(u_play_id = paste0(GameKey,"-",PlayID)) %>%
    group_by(u_play_id) %>% mutate(play_start_time = min(Time)) %>%
    ungroup() %>% mutate(time_elapsed_from_play_start = Time - play_start_time) %>%
    inner_join(play_player_role_data) %>% filter(u_play_id %in% injury_plays) %>%
    inner_join(punt_position_side) %>%
    left_join(video_review %>% dplyr::select(u_play_id, injured_GSISID, injured_GSISID_2), by = c("u_play_id" = "u_play_id", "GSISID" = "injured_GSISID")) %>%
    left_join(video_review %>% dplyr::select(u_play_id, Primary_Partner_GSISID, Primary_Partner_GSISID_2), by = c("u_play_id" = "u_play_id", "GSISID" = "Primary_Partner_GSISID")) %>%
    mutate(injury_flag = case_when(
      !is.na(injured_GSISID_2) ~ "injured",
      !is.na(Primary_Partner_GSISID_2) ~ "partner",
      TRUE ~ "other",)) %>%
    dplyr::select(x, y, Event, time_elapsed_from_play_start, GSISID, Role, Side, u_play_id, injury_flag) %>%
    group_by(u_play_id) %>%
    arrange(time_elapsed_from_play_start) %>% mutate(rn = dense_rank(time_elapsed_from_play_start)) %>%
    mutate(Event_numbered = paste0(ifelse(rn < 10, "0", ""), rn, "-", Event))  
    
review_play <- function(id, dataset) {
    dataset %>% filter(u_play_id == id) %>% 
    ggplot(aes(x, y, color = Side, label = GSISID, shape = injury_flag)) + 
    geom_point(alpha = .4) + facet_grid(Event_numbered ~ u_play_id) + 
    xlim(0,120) + ylim(0,53.3) + coord_fixed(1/2.25) + 
    theme(strip.text.y = element_text(angle = 360)) + scale_shape(solid=FALSE)
}

grab_video_link <- function(id) {
    video_footage_injury$`PREVIEW.LINK..5000K.`[video_footage_injury$u_play_id == id]
}

grab_play_description <- function(id) {
    video_footage_injury$PlayDescription[video_footage_injury$u_play_id == id]
}

library("clue")
library("fields")
library("raster")

p <- df %>% 
    filter(!is.na(Event)) %>%
    mutate(u_play_id = paste0(GameKey,"-",PlayID)) %>%
    group_by(u_play_id) %>% mutate(play_start_time = min(Time)) %>%
    ungroup() %>% mutate(time_elapsed_from_play_start = Time - play_start_time) %>%
    inner_join(play_player_role_data) %>% 
    inner_join(punt_position_side) %>%
    dplyr::select(x, y, Event, time_elapsed_from_play_start, GSISID, Role, Side, u_play_id) %>%
    group_by(u_play_id) %>%
    arrange(time_elapsed_from_play_start) %>% mutate(rn = dense_rank(time_elapsed_from_play_start)) %>%
    mutate(Event_numbered = paste0(ifelse(rn < 10, "0", ""), rn, "-", Event)) %>% filter(Event == "punt_received")

player_spread <- function(id, df) {

    p <- df %>% filter(u_play_id %in% c(id))
    if(nrow(p) != 22) {
        return(list(NaN, NaN))
    }
    x1y1.data <- p[p$Side == "PR", c("x", "y")]
    x2y2.data <- p[p$Side == "PC", c("x", "y")]
    
    distances <- rdist(x1y1.data, x2y2.data)
    sol <- solve_LSAP(t(distances))
    avg_space <- mean(pointDistance(x1y1.data[sol, ], x2y2.data, lonlat = FALSE)) 
    median_space <- median(pointDistance(x1y1.data[sol, ], x2y2.data, lonlat = FALSE))
    return(c(avg_space, median_space))
}

player_spread_plot <- function(id, df) {

    p <- df %>% filter(u_play_id %in% c(id))
    if(nrow(p) != 22) {
        return(list(NaN, NaN))
    }
    x1y1.data <- p[p$Side == "PR", c("x", "y")]
    x2y2.data <- p[p$Side == "PC", c("x", "y")]
    
    distances <- rdist(x1y1.data, x2y2.data)
    sol <- solve_LSAP(t(distances))
    ggplot() + geom_point(data = data.frame(x1y1.data), aes(x= x, y = y), colour = "blue") + 
      geom_point(data = data.frame(x2y2.data), aes(x= x, y = y), colour = "red") +
      geom_segment(data = data.frame(cbind(x1y1.data[sol, ], x2y2.data)), aes(x = x, y = y, xend=`x.1`, yend=`y.1`)) +
      xlim(0,120) + ylim(0,53.3) + coord_fixed(1/2.25) + 
      ggtitle(paste0("Play Spread Chart at Punt Return Event for play ", id, "\n", "Blue is return team"))
}

play_ids <- p %>% 
    dplyr::select(u_play_id) %>% 
    group_by(u_play_id) %>% summarize() 
    
u_play_ids <- unique(play_ids$u_play_id)

spread_list <- list()
for (i in 1:length(u_play_ids)) {
    spread_list[[u_play_ids[i]]] <- player_spread(u_play_ids[i], p)
}

spread_df <- data.frame(do.call(rbind, spread_list)) %>% tibble::rownames_to_column("id") %>% rename(mean_spread = X1, median_spread = X2)
spread_df <- spread_df %>% unnest() %>% mutate(injury = ifelse(id %in% injury_plays, 1, 0))

spread_df %>% group_by(injury) %>% summarize(mean(mean_spread, na.rm = T), mean(median_spread, na.rm = T))

```
# Proposed rule change 

* All members of the kicking team cannot go beyond the line of scrimmage until the ball is kicked. (This was proposed and nearly implemented in 1974)
* Members of the receiving team must stay within 5 yds of the line scrimmage until the ball is kicked except for one designated punt returner.

## Strengths

* The "Gunner" role is eliminated. This position is often involved in injury plays.
    + The gunner often overpursues the play and is susceptible to blind blocks at they try to get back into the play.
    + If the gunner gets a clean release prior to the punt reception, he's likely to collide with the returner at high speed. (In this dataset the gunner is more likely to injure himself than the man he collides with).
* Opposing players are more tightly coupled and directionally similar in their movement down the field. Force of collisions will be reduced.

## Objections

* Without gunners getting a headstart down the field, there will be more returns and more will put the return man at higher risk.
    + Returner risk is overstated compared to is representation in the dataset.
    + Empowering the returner with more space will force defenders to slow down in order to have a better chance to contain him.
* Punt coverage will be more difficult
    + This can be seen as a strenth if return yardage increases and injury risk declines.
* Fake punt pass plays will be less viable
    + Fake punt pass plays are rarely used and there is not good evidence that they improve 4th down conversion likelihood.        

# Research Approach

Each play was analyzed by a combination of video and gsisid data at event points.

## Example

### Unique Play ID 5-3129 (Gamekey - PlayId) 

* Notes
	+ 2 men deep
	+ Everyone else goes for block
	+ Partner is punt returner
	+ Injured guy is off the line
	+ Returner got some space
	+ Punt was returned
	+ *Why injured? Full speed lunging tackler injured himself by propelling himself at high speed in open space*
* Play Chart
    + 
```{r, echo = FALSE} 
review_play("5-3129", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("5-3129")`)    
    + `r grab_play_description("5-3129")`

* 38 designated injury plays was a small enough set to watch each video and study the GSISID data for patterns. I watched the plays, visualized them and manually annotated and classified them rather than use a statistical tool.
* I had a strong prior that the greater risks posed by punt plays are similar to the risks posed by kickoff plays. Athletes are spaced out and the play changes direction rapidly simulataneously giving players both the ability to generate more force and putting them in potentially vulnerable positions.
* Prevalent injury patterns observed in this analysis
    + As expected, almost all injuries occur after the punt is received
    + Players injured themselves by diving at the return man at high speed. (but the return man was rarely injured from these manuevers)
    + Late arriving return team players (often those who pressured the punt) deliver dangerous blindside blocks on punt coverage team members (often the gunner or players who have overpursued the play)
    + Late arriving punt coverage players run into a crowd at high speed
* Broad strokes causal statement. Punt returns become riskier for all players when players are more spread out at the time of the catch. When players are spread out they eventually come back together at unusually unsafe levels of speed.
* I attempt to find evidence in support of the causal statement by taking a measurement of the spread of players at the catch point and compare plays with injuries to the rest of the data set.
* There is directional support from the measurment but the data from that measurement is too noisy to make bold statements.
* I believe techniques that can classify the player maps at the "punt_received" point will find that it's an excellent place to measure for player safety risk on punts.
* New rules that can minimize spread (and/or improve the player map at the putn_return point) can be effective in improving player safety while 

## Player spread

In reviewing the plays, I observed a pattern of excessive spread at the "punt_return" event appeared to correlate with injury plays. 
The thinking is that when players are closer together their force for collisions is limited which reduces injury risk. 

There are many possibilities ways the measure spread. This study uses the [Hungarian Method](https://en.wikipedia.org/wiki/Hungarian_algorithm) to match players up at the "punt_return" point. Median and mean distance between assigned players is taken. This metric is then used to compare the injury plays to the non-injury plays. Only punts with returns are examined.

Here's an example from the injury set.
```{r, echo = FALSE}
player_spread_plot("289-2341", p)
```
There is some evidence that directionally supports this hypothesis. Player spread by this measure is greater than in the injury plays, but it's too noisy to make strong claims. I'm interested in looking into more ways to measure spread and also to take other measurments of positioning at return point. I believe this is the critical snapshot that a rule change should try to impact. 

```{r, echo = FALSE}
spread_df %>% filter(!is.na(median_spread)) %>% 
    ggplot(aes(x=median_spread, group = factor(injury), col = factor(injury))) + 
    stat_ecdf() + 
    coord_cartesian(xlim=c(0, 20)) +
    ggtitle("Percentage of plays that have median spread yards less than or equal to x")
```

## Fake Punt Efficacy

As this rule change would impact fake punt strategy, I take a look here at the prevalence and efficacy of fake punts. The revelation is that fake punt passes are rare and that fake punts do not have a statistically significant influence on 4th down conversion when reasonable covariates are included in the model.

```{r, echo = FALSE}
d <- read_csv(paste0(path, play_by_play))

fourth_down_data <- d %>%
  filter(down == 4 & play_type %in% c("run", "pass")) %>%
  filter(!str_detect(desc, "Abort")) %>% 
  mutate(play_type_2 = case_when(
    str_detect(desc, "(Punt formation|Fake punt|fake punt)") ~ "Fake punt",
    str_detect(desc, "(Field Goal formation|Fake field goal|fake field goal)") ~ "Fake FG",
    TRUE ~ "No Fake")) %>%
  dplyr::select(desc, yrdln, yardline_100,ydstogo, down, play_type_2, play_type, fourth_down_converted, qtr, time, score_differential, quarter_seconds_remaining) %>% 
  mutate(score_discrete = factor(case_when(
    score_differential <= -9 ~ "down 9+",
    score_differential <= -1 ~ "down 1-8",
    score_differential == 0 ~ "tied",
    score_differential >= 9 ~ "up 9+",
    score_differential >= 1 ~ "up 1-8"))) %>%
  mutate(play_type = factor(play_type)) %>%
  mutate(qtr = factor(qtr))

fourth_down_data %>% group_by(play_type_2, play_type) %>% summarize(conversion_rate = mean(fourth_down_converted), plays = n())

summary(glm(fourth_down_converted ~ ydstogo + yardline_100 + score_differential + qtr + quarter_seconds_remaining + play_type + play_type_2, data = fourth_down_data, family = binomial(link = "logit")))
```

## Injury Play Reviews

### 5-3129
* Notes
	+ 2 men deep
	+ Everyone else goes for block
	+ Partner is punt returner
	+ Injured guy is off the line
	+ Returner got some space
	+ Punt was returned
	+ *Why injured? Full speed lunging tackler injured himself by propelling himself at high speed in open space*
* Play Chart
    + 
```{r, echo = FALSE} 
review_play("5-3129", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("5-3129")`)    
    + `r grab_play_description("5-3129")`

### 21-2587
* Notes
	+ 1 deep, but 3 drop back
	+ Injured guy is a gunner
	+ Partner is one of the drop guys
	+ Illegal blindside block by partner
	+ Was downed
	+ *Why injured? Injured gunner was blindsided by one of 3 droppers*
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("21-2587", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("21-2587")`)    
    + `r grab_play_description("21-2587")`	

### 29-538
* Notes
	+ 1 deep, everyone else goes for block
	+ Partner is returner
	+ Injured guy is gunner
	+ Why injured? Injured gunner beat his man a dives into returner at catch
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("29-538", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("29-538")`)    
    + `r grab_play_description("29-538")`	

### 45-1212
* Notes
	+ 1 deep, 3 drop
	+ Partner is returner
	+ Injured guy is DL
	+ Why injured? This one is just that the returner had a nice return and big player got back into the play late
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("45-1212", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("45-1212")`)    
    + `r grab_play_description("45-1212")`	

### 54-1045
* Notes
	+ 1 deep, sloppy drop
	+ Double team gunners
	+ Partner is gunner
	+ Injured guy is pc lineman
	+ Why injured? Sprinting player runs into a crowd at high speed
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("54-1045", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("54-1045")`)    
    + `r grab_play_description("54-1045")`		

### 60-905
* Notes
	+ 1 deep, kind of went for the block
	+ Doubled gunners
	+ Why injured? Dirty block as two big player jostle down field
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("60-905", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("60-905")`)    
    + `r grab_play_description("60-905")`		

### 144-2342
* Notes
	+ 1 deep, dropped a few players
	+ Doubled 1 ginner
	+ Gunner injured
	+ Why injured? Gunner gets blocked by a sprinter post catch
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("144-2342", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("144-2342")`)    
    + `r grab_play_description("144-2342")`		

### 149-3663
* Notes
	+ 2 deep, others blocked
	+ Why injured? The non return deep man is hit by another guy running down while he’s engaged in a block
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("149-3663", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("149-3663")`)    
    + `r grab_play_description("149-3663")`	

### 189-3509
* Notes
	+ 1 deep
	+ Return man injured by a guy who was pretty far behind the play
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("189-3509", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("189-3509")`)    
    + `r grab_play_description("189-3509")`		

### 218-3468
* Notes
	+ 1 deep
	+ Off the ball injury not a fast speed not sure what happened
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("218-3468", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("218-3468")`)    
    + `r grab_play_description("218-3468")`		

### 234-3278
* Notes
	+ 1 deep
	+ Not well shown on diagram
	+ D tried to down the ball but didn’t secure. Returner picked up and then a big player injured himself colliding with the return man
	+ Returner is partner
	+ Injured guy is large pursuer
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("234-3278", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("234-3278")`)    
    + `r grab_play_description("234-3278")`	

### 231-1976
* Notes
	+ 1 deep not much rush
	+ Injury is caused by a blindside block during the return
	+ Stats call it friendly fire but punt return team blocker caused the injury
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("231-1976", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("231-1976")`)    
    + `r grab_play_description("231-1976")`		

### 266-2902
* Notes
	+ Return man injured by gunner
	+ Gunner got there early and blew him up
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("266-2902", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("266-2902")`)    
    + `r grab_play_description("266-2902")`		

### 280-2918
* Notes
	+ Injury between lineman pre punt
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("280-2918", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("280-2918")`)    
    + `r grab_play_description("280-2918")`	

### 280-3746
* Notes
	+ Gunner is injured in pile up of tackling return man
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("280-3746", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("280-3746")`)    
    + `r grab_play_description("280-3746")`	

### 289-2341
* Notes
	+ Gunner hit with blindside block during return
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("289-2341", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("289-2341")`)    
    + `r grab_play_description("289-2341")`		

### 274-3609
* Notes
	+ Fake punt. Punter injured at end of play.
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("274-3609", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("274-3609")`)    
    + `r grab_play_description("274-3609")`		

### 281-1526
* Notes
	+ Two punt cover guys run into each other
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("281-1526", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("281-1526")`)    
    + `r grab_play_description("281-1526")`	

### 296-2667
* Notes
	+ Gunner collision on tackle
	+ Gunners not doubled and they both beat their guys down field
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("296-2667", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("296-2667")`)    
    + `r grab_play_description("296-2667")`		

### 357-3630
* Notes
	+ Lineman injures himself running into return man
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("357-3630", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("357-3630")`)    
    + `r grab_play_description("357-3630")`	

### 364-2489
* Notes
	+ Big players colliding near catch point
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("364-2489", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("364-2489")`)    
    + `r grab_play_description("364-2489")`	

### 364-2764
* Notes
	+ Big players colliding in tackle
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("364-2764", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("364-2764")`)    
    + `r grab_play_description("364-2764")`	

### 384-183
* Notes
	+ Big players colliding near tackle
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("384-183", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("384-183")`)    
    + `r grab_play_description("384-183")`	

### 392-1088
* Notes
	+ Huge guy blown up on TD return
	+ Maybe this should be illegal. Initiating block when you’re running  back into the play
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("392-1088", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("392-1088")`)    
    + `r grab_play_description("392-1088")`		

### 397-1526
* Notes
	+ Returner is partner
	+ Other guy is interior player
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("397-1526", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("397-1526")`)    
    + `r grab_play_description("397-1526")`	

### 399-3312
* Notes
	+ Returner is injured by big player.
	+ Short punt caught in traffic. Big player comes in from the side
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("399-3312", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("399-3312")`)    
    + `r grab_play_description("399-3312")`		

### 414-1262
* Notes
	+ Solo injury of big player pursuing return man on good return
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("414-1262", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("414-1262")`)    
    + `r grab_play_description("414-1262")`		

### 448-2792
* Notes
	+ Big players blocking. After the catch lineman from return team gets back into play from a long distance away and blow someone up
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("448-2792", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("448-2792")`)    
    + `r grab_play_description("448-2792")`		

### 473-2072
* Notes
	+ After a punt block attempt. Large men barrel down the field from the coverage unit and collide head to body after failing to make tackle
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("473-2072", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("473-2072")`)    
    + `r grab_play_description("473-2072")`		

### 506-1988
* Notes
	+ Return man injured by flying bodying after dropping fair catch picking it up and running with it
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("506-1988", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("506-1988")`)    
    + `r grab_play_description("506-1988")`	

### 553-1683
* Notes
	+ Blindsided block by big player coming back into the play pretty late
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("553-1683", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("553-1683")`)    
    + `r grab_play_description("553-1683")`		

### 567-1407
* Notes
	+ Gunner injures a guy who dropped back. 
	+ Not high speed play really. The blocker basically does a jumping headbutt into gunner during a return with a lot of lateral movement
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("567-1407", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("567-1407")`)    
    + `r grab_play_description("567-1407")`		

### 585-733
* Notes
	+ Punt coverage rusher pursues long distance to make tackle
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("585-733", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("585-733")`)    
    + `r grab_play_description("585-733")`			

### 585-2208
* Notes
	+ Return man injured by punt protector
	+ The blow deliverer avoided blocks to make big hit
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("585-2208", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("585-2208")`)    
    + `r grab_play_description("585-2208")`		

### 601-602
* Notes
	+ The inverse of 585-2208
	+ Punt protector runs down field and deliver big hit on returner and is then injured
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("601-602", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("601-602")`)    
    + `r grab_play_description("601-602")`		

### 607-978
* Notes
	+ Injury occurs in backfield before kick
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("607-978", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("607-978")`)    
    + `r grab_play_description("607-978")`	

### 618-2792
* Notes
	+ Big player runs back into play for return team to deliver a block
* Play Chart
	+	
```{r, echo = FALSE} 
review_play("618-2792", injury_play_gsisid)
```
* [Play Video](`r grab_video_link("618-2792")`)    
    + `r grab_play_description("618-2792")`	

