-
Notifications
You must be signed in to change notification settings - Fork 2
/
timeseriesbasic.Rmd
148 lines (110 loc) · 5.73 KB
/
timeseriesbasic.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
# Séries temporelles {#timeseriesbasic}
![](images/banners/banner_timeseriesbasic.png)
*Ce chapitre a été réalisé dans le cadre d'une collaboration communautaire créée par [HaiqingXu](https://github.com/xhqkatrina){target="_blank"}*
*Cette page est un travail en cours. Nous apprécions tout commentaire ou feedback. Si vous voulez nous aider à améliorer cette page, vous pouvez [contribuer à notre repo](contribute.html).*
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## Vue d'ensemble
Cette section présente les graphiques qui peuvent être utilisés pour représenter des séries temporelles.
## Séries temporelles simples/multiples
On peut représenter les séries temporelles en utilisant **geom_line()** avec le temps représenté sur l'axe x. Cet axe doit être un objet de la [classe Date](dates.html), sous l'hypothèse qu'il n'y a pas de données pour les heures/minutes/secondes.
```{r, message = FALSE, warning = FALSE}
library(tidyverse)
ggplot(data = economics, aes(x = date, y = pop))+
geom_line(color = "blue") +
ggtitle("US Population, in Thousands") +
labs(x = "year", y = "population")
```
Nous pouvons également représenter plusieurs séries temporelles sur un même graphique pour pouvoir les comparer.
```{r}
df <- read_csv("data/mortgage.csv")
df <- df %>% gather(key = TYPE, value = RATE, -DATE) %>%
mutate(TYPE = forcats::fct_reorder2(TYPE, DATE, RATE)) # puts legend in correct order
g <- ggplot(df, aes(DATE, RATE, color = TYPE)) + geom_line() +
ggtitle("U.S. Mortgage Rates") +
labs (x = "", y = "percent") +
theme_grey(16) +
theme(legend.title = element_blank())
g
```
L'exemple suivant représente le prix de clôture pour quatre grandes entreprises tech aux Etats-Unis. Lorsque l'on analyse le GDP, niveau de salaire et prix des actions, il est parfois difficile de comparer des tendances puisque les échelles sont totalement différentes. Par exemple, puisque les prix par action de AAPL et MSFT sont tellement basses comparées au prix par action de GOOG, il est difficile de discerner des tendances dans les données:
```{r, message = FALSE, warning = FALSE}
library(tidyquant)
stocks <- c("AAPL", "GOOG", "IBM", "MSFT")
df <- tq_get(stocks, from = as.Date("2013-01-01"),
to = as.Date("2013-12-31"))
ggplot(df, aes(date, y = close,
color = fct_reorder2(symbol, date, close))) +
geom_line() + xlab("") + ylab("") +
theme(legend.title = element_blank())
```
Dans ce cas-là, il peut être utile de redimensionner les données. On peut faire ceci de façon à ce que chaque prix par action pour chacune de ces entreprises ait un prix de 100 en janvier 2013.
```{r}
df <- df %>% group_by(symbol) %>%
mutate(rescaled_close = 100*close / close[1])
ggplot(df, aes(date, y = rescaled_close,
color = fct_reorder2(symbol, date, rescaled_close))) +
geom_line() + xlab("") + ylab("") +
theme(legend.title = element_blank())
```
## Tendance générale
Au lieu de regarder les observations dans le temps, on veut souvent connaître la tendance générale à long terme de nos séries temporelles. Dans ce cas-ci, on peut utiliser geom_smooth(). On utilisera le [lissage Loess](https://en.wikipedia.org/wiki/Local_regression){target="_blank"}.
```{r}
AAPL <- df %>% filter(symbol == "AAPL")
g <- ggplot(AAPL, aes(date, close)) + geom_point()
g + geom_line(color = "grey50") +
geom_smooth(method = "loess", se = FALSE, lwd = 1.5) +
ggtitle("Loess Smoother for Apple Stock Price") +
labs(x = "Date", y = "Price")
```
Une expérience avec différents paramètres de lissage:
```{r}
g + geom_smooth(method = "loess", span = .5, se = FALSE)
```
## Tendance saisonnière
En plus de la tendance générale, il y a aussi des tendances saisonnières dans les séries temporelles. Une façon de les visualiser est d'utiliser des faits de saison (jour du mois, jour de la semaine, etc.)
```{r, message = FALSE}
library(lubridate)
dfman <- read_csv("data/ManchesterByTheSea.csv")
ggplot(dfman, aes(Date, Gross)) +
geom_line() +
facet_grid(wday(Date, label = TRUE)~.)
```
Ou, on peut créer un graphique qui montre le résultat pour chaque mois.
```{r}
monthplot(AirPassengers)
```
## Fréquence des données
Et si on voulait observer la fréquence des séries temporelles? Facile: utilisez **geom_point()** en plus de **geom_line()**.
```{r, message = FALSE}
# read file
mydat <- read_csv("data/WA_Sales_Products_2012-14.csv") %>%
mutate(Revenue = Revenue/1000000)
# convert Quarter to a single numeric value Q
mydat$Q <- as.numeric(substr(mydat$Quarter, 2, 2))
# convert Q to end-of-quarter date
mydat$Date <- as.Date(paste0(mydat$Year, "-",
as.character(mydat$Q*3),
"-30"))
Methoddata <- mydat %>% group_by(Date, `Order method type`) %>%
summarize(Revenue = sum(Revenue))
g <- ggplot(Methoddata, aes(Date, Revenue,
color = `Order method type`)) +
geom_line(aes(group = `Order method type`)) +
scale_x_date(limits = c(as.Date("2012-02-01"), as.Date("2014-12-31")),
date_breaks = "6 months", date_labels = "%b %Y") +
ylab("Revenue in mil $")
g + geom_point()
```
C'est possible qu'il y ait des valeurs manquantes dans les séries temporelles. Utiliser **geom_point()** avec **geom_line()** est une façon de les détecter. Ici nous introduisons une méthode alternative: laisser des gaps.
```{r}
Methoddata$Date[year(Methoddata$Date)==2013] <- NA
g <- ggplot(Methoddata, aes(Date, Revenue,
color = `Order method type`)) +
geom_path(aes(group = `Order method type`)) +
scale_x_date(limits = c(as.Date("2012-02-01"), as.Date("2014-12-31")),
date_breaks = "6 months", date_labels = "%b %Y") +
ylab("Revenue in mil $")
g
```