20 Séries temporelles
Ce chapitre a été réalisé dans le cadre d’une collaboration communautaire créée par HaiqingXu
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.
20.1 Vue d’ensemble
Cette section présente les graphiques qui peuvent être utilisés pour représenter des séries temporelles.
20.2 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, sous l’hypothèse qu’il n’y a pas de données pour les heures/minutes/secondes.
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.
## Parsed with column specification:
## cols(
## DATE = col_date(format = ""),
## `5/1 ARM` = col_double(),
## `15 YR FIXED` = col_double(),
## `30 YR FIXED` = col_double()
## )
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:
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.
20.3 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.
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:
20.4 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.)
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.
20.5 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().
# 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.
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
with