-
Notifications
You must be signed in to change notification settings - Fork 7
/
9844-respostas-lubridate.Rmd
158 lines (119 loc) · 4.36 KB
/
9844-respostas-lubridate.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
```{r, include=FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
fig.align = "center"
)
```
## O pacote lubridate
```{r, message = FALSE, warning = FALSE}
library(dplyr)
library(lubridate)
library(ggplot2)
lakers <- tibble::as_tibble(lakers)
```
**1.** Repare que a coluna `date` no data.frame é um vetor de inteiros. Transforme essa coluna em um vetor de valores com classe `date`.
```{r}
lakers %>%
mutate(date = ymd(date))
```
Repare que `as_date()` não funciona neste caso.
```{r}
lakers %>%
mutate(date = as_date(date))
```
Para entender porque a função devolveu um dia do ano 56949, rode os códigos abaixo.
```{r}
as_date(0)
as_date(-3:3)
as_date(20081027:20081029)
```
---
**2.** Crie uma coluna que junte as informações de data e hora (colunas `date` e `time`) em objetos da classe `date`.
```{r}
lakers %>%
mutate(date_time = paste0(date, " 00:", time) %>% ymd_hms) %>%
select(date_time)
```
---
**3.** Crie as colunas `dia`, `mes` e `ano` com as respectivas informações sobre a data do jogo.
```{r}
lakers %>%
mutate(
date = ymd(date),
dia = day(date),
mes = month(date),
ano = year(date)
) %>%
select(date, dia, mes, ano)
```
---
**4.** Em média, quanto tempo o Lakers demora para arremessar a primeira bola no primeiro período?
**Dicas**: arremessos são representados pela categoria `shot` da coluna `etype` e cada período tem 12 minutos.
```{r}
lakers %>%
dplyr::filter(etype == "shot", period == 1, team == "LAL") %>%
dplyr::mutate(
time = hms(paste0("00:", time)),
cronometro = 12*60 - minute(time)*60 - second(time)
) %>%
dplyr::group_by(date) %>%
dplyr::filter(cronometro == min(cronometro)) %>%
dplyr::ungroup() %>%
dplyr::summarise(media = mean(cronometro))
```
O que foi feito:
- Primeiro filtramos a base para arremessos, `etype == "shot"`, do primeiro período, `period == `, que fossem do Lakers, `team == "LAL"`.
- Em seguida, mudamos a classe da coluna `time`, de `character` para `period`, e criamos a coluna `cronometro`, que contém o tempo passado (em segundos) até o instante do evento.
- Então agrupamos a base pelo dia e a filtramos apenas para o primeiro evento de cada dia, isto é, o evento que tem o menor valor na coluna `cronometro`. Assim, a coluna `cronometro` da base resultante terá o tempo do primeiro arremesso de cada jogo.
- Por fim, desagrupamos a base e calculamos a média da coluna `cronometro`.
---
**5.** Em média, quanto tempo demora para sair a primeira cesta de três pontos em cada um dos quatro períodos? Considere toda a base, e cestas de ambos os times.
```{r}
lakers %>%
dplyr::filter(etype == "shot", period %in% 1:4, points == "3") %>%
dplyr::mutate(time = hms(paste0("00:", time)),
cronometro = 12*60 - minute(time)*60 - second(time)) %>%
dplyr::group_by(date, period) %>%
dplyr::filter(cronometro == min(cronometro)) %>%
dplyr::ungroup() %>%
dplyr::group_by(period) %>%
dplyr::summarise(media = mean(cronometro))
```
A resolução desse exercício é análoga ao anterior, só mudamos o filtro inicial e o agrupamento. Se você ficou com dúvidas, consulte o passo a passo na resolução do exercício 4.
Repare que não precisarímos filtrar por `etype == "shot"`, já que o único evento que gera 3 pontos é a cesta de 3 pontos.
---
**6.** Construa boxplots do tempo entre pontos consecutivos para cada períodos. Considere toda a base de dados e apenas pontos do Lakers.
```{r}
lakers %>%
filter(points > 0, team == "LAL") %>%
dplyr::mutate(
time = hms(paste0("00:", time)),
tempo_segundos = 60 * minute(time) + second(time),
dif = tempo_segundos - lead(tempo_segundos),
period = as.character(period)
) %>%
filter(dif >= 0) %>%
ggplot(aes(x = period, y = dif)) +
geom_boxplot()
```
---
**7.** Qual foi o dia e mês do jogo que o Lakers demorou mais tempo para fazer uma cesta? Quanto tempo foi?
```{r}
cesta_demorada <- lakers %>%
filter(points > 0, team == "LAL", period == 1) %>%
dplyr::mutate(
time = hms(paste0("00:", time)),
time = 60 * minute(time) + second(time),
date = ymd(date),
dia = day(date),
mes = month(date),
) %>%
group_by(date) %>%
filter(time == max(time)) %>%
ungroup() %>%
slice_min(time)
cesta_demorada %>%
select(date, opponent, dia, mes)
tempo_seg <- 12*60 - cesta_demorada$time
seconds_to_period(tempo_seg)
```