library(fst)

events <- read.fst('../data/events-20181231.fst')
matches <- read.fst('../data/matches-20181231.fst')

Tempo de reação defensiva (Vogelbein et al., 2014)

Tempo total de duração da fase defensiva de um time (Barreira et al., 2013)

library(data.table)
library(dplyr)
library(ggplot2)

events.phased <- events %>%
  group_by(OffensivePhase=rleid(match_id, period, possession_team.id)) %>%
  mutate(TimeInOffensivePhase=max(ElapsedTime) - min(ElapsedTime)) %>%
  ungroup()

offensive.phases <- unique(events.phased[,c('match_id', 'possession_team.name', 'OffensivePhase', 'TimeInOffensivePhase')])
row.names(offensive.phases) <- offensive.phases$OffensivePhase

events.phased$TimeInLastDefensivePhase <- add_row(
  offensive.phases[events.phased$OffensivePhase-1, 'TimeInOffensivePhase'],
  TimeInOffensivePhase=rep(0, tally(events.phased[events.phased$OffensivePhase == 1,])$n),
  .before=1
)$TimeInOffensivePhase

first.period.phases <- events.phased %>%
  group_by(match_id, period) %>%
  summarize(FirstPhase=first(OffensivePhase)) %>%
  pull(FirstPhase)
events.phased[events.phased$OffensivePhase %in% first.period.phases, 'TimeInLastDefensivePhase'] <- 0

events.phased %>%
  filter(shot.outcome.name == 'Goal') %>%
  ggplot(aes(x=TimeInLastDefensivePhase)) + geom_density()

Mas talvez isso valha pra todos os chutes, não só os que deram em gol?

ggplot() +
  geom_density(data=filter(events.phased, type.name == 'Shot'), aes(x=TimeInLastDefensivePhase), colour='blue') +
  geom_density(data=filter(events.phased, shot.outcome.name == 'Goal'), aes(x=TimeInLastDefensivePhase), colour='green')
offensive.phases <- offensive.phases %>%
  group_by(match_id) %>%
  mutate(TotalPossessionTime=cumsum(TimeInOffensivePhase) - TimeInOffensivePhase) %>%
  group_by(possession_team.name, add=TRUE) %>%
  mutate(TimeInPreviousOffensivePhases=cumsum(TimeInOffensivePhase) - TimeInOffensivePhase) %>%
  ungroup()

events.phased <- left_join(events.phased, offensive.phases) %>%
  mutate(PossessionRate=(TimeInPreviousOffensivePhases+TimeInPoss) / (TotalPossessionTime+TimeInPoss))

events.phased <- events.phased %>%
  filter(team.id == possession_team.id) %>%
  group_by(PlayerPossession=rleid(OffensivePhase, player.id)) %>%
  transmute(id, PlayerPossessionTime=max(ElapsedTime) - min(ElapsedTime)) %>%
  ungroup() %>%
  right_join(events.phased, 'id')


ElSaico/ettie documentation built on Nov. 8, 2019, 1:32 p.m.