Les travaux en finance utilisent souvent des données issus des marchés financiers, et avec le développement des nouvelles technologies (et surtout d’internet) on a aujourd’hui accès à des données à haute fréquence (voire très haute fréquence), c’est-à-dire journalières. Parfois, ça peut arriver qu’on ait besoin que ces données soient hebdomadaires, mensuelles, trimestrielles ou autres pour faire des régressions avec des variables macro (comme le PIB ou l’inflation, qui sont souvent trimestriels voire annuels). On va voir ici comment agréger les données de données fréquence pour les avoir en différents formats.

On va utiliser la base de données qu’on a utilisé dans Importer des données financières depuis Yahoo Finance (et faire des beaux graphiques), donc les rendements de crypto-actifs (Bitcoin et Ethereum) issus de Yahoo Finance, grâce au package quantmod :

install.packages("quantmod")
require(quantmod)
symbols <- c("BTC-USD", "ETH-USD")
getSymbols(symbols, from="2017-11-10", to="2023-06-30", src="yahoo", periodicity="daily")

Par souci de simplicité (et parce que R a du mal à supporter les notations qui contiennent des tirets comme dans “BTC-USD”, on va renommer nos données :

BTC_USD<- `BTC-USD`
ETH_USD<-`ETH-USD`

Dans chaque objet, on a accès aux prix d’ouverture (Open), de fermeture (Close), le prix maximum (High) et minimum (Low), ainsi que le volume et le prix ajustés (Volume et Adjusted respectivement). Dans la littérature, on utilise, le plus souvent, les prix de Close donc c’est ce qu’on va faire ici, en créant un dataframe avec 3 colonnes : la date (stockée dans l’indice (index) de BTC_USD, le prix de Close du Bitcoin et le prix de Close de l’Ethereum :

crypto<-data.frame(index(BTC_USD),BTC_USD$`BTC-USD.Close`, ETH_USD$`ETH-USD.Close`)
names(crypto)<-c("date","btc","eth")
head(crypto)

Commande head( ), qui montre les 5 premières lignes d’un objet. La date est affichée deux fois, car c’est à la fois la première colonne, et l’indice temporel de l’objet.

Commande head( ), qui montre les 5 premières lignes d’un objet. La date est affichée deux fois, car c’est à la fois la première colonne, et l’indice temporel de l’objet.

Ici, nos données sont journalières, mais on peut les vouloir en hebdomadaires, mensuel ou autres. Pour cela, on va utiliser les packages tibbletime et dyplr, qu’il faudra éventuellement installer, afin de créer un objet “as_tbl_time”, dont l’indice sera la colonne “date” :

#install.packages("tibbletime")
require(tibbletime)
require(dplyr)
crypto_2 <- as_tbl_time(crypto, index=date)

Ensuite, la commande pour obtenir les données hebdomadaires (chaque semaine) s’écrit :

as_period(crypto_2, '1 week')
#ou
nouvelles_donnees <- as_period(crypto_2, '1 week')

La commande peut marcher pour d’autres formats, que ce soit mensuel, trimestriel ou annuel :

nouvelles_donnees_mensuelles <- as_period(crypto_2, '1 month')
nouvelles_donnees_trimestrielles <- as_period(crypto_2, '1 quarter')
nouvelles_donnees_annuelles <- as_period(crypto_2, '1 year')

(C’est aussi possible de prendre tous les X jours, mois ou années au besoin.

Et pour plus d’information : https://cran.r-project.org/web/packages/tibbletime/vignettes/TT-02-changing-time-periods.html