Formateur d'échelle personnalisé pour les séries temporelles

PythonPythonBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Lorsque l'on trace des données quotidiennes telles que des séries temporelles financières, on a souvent envie d'exclure les jours où il n'y a pas de données, comme les week-ends. Cela permet de tracer les données à intervalles réguliers sans avoir de trous pour les jours sans données. Dans ce laboratoire, nous allons apprendre à utiliser un "formateur d'index" pour obtenir le tracé souhaité.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter Notebook pour pratiquer.

Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter Notebook se charge complètement. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous résoudrons rapidement le problème pour vous.

Importation des bibliothèques et des données requises

Nous devons tout d'abord importer les bibliothèques requises, qui sont matplotlib, numpy et matplotlib.cbook. Nous devons également charger un tableau enregistré numpy à partir de données csv de Yahoo avec les champs date, ouverture, haut, bas, fermeture, volume, fermeture ajustée à partir du répertoire mpl-data/sample_data. Le tableau enregistré stocke la date sous forme d'un np.datetime64 avec une unité de jour ('D') dans la colonne date. Nous utiliserons ces données pour tracer la série temporelle financière.

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cbook as cbook

## Charger les données à partir du répertoire sample_data
r = cbook.get_sample_data('goog.npz')['price_data'].view(np.recarray)
r = r[:9]  ## prendre les 9 premiers jours

Traçage des données avec des trous par défaut le week-end

Nous allons tout d'abord tracer les données avec les trous par défaut le week-end en utilisant la fonction plot de matplotlib. Nous mettrons également en évidence les trous dans les données quotidiennes en utilisant des lignes pointillées blanches.

## Tracer les données avec des trous le week-end
fig, ax1 = plt.subplots(figsize=(6, 3))
ax1.plot(r.date, r.adj_close, 'o-')

## Mettre en évidence les trous dans les données quotidiennes
gaps = np.flatnonzero(np.diff(r.date) > np.timedelta64(1, 'D'))
for gap in r[['date', 'adj_close']][np.stack((gaps, gaps + 1)).T]:
    ax1.plot(gap.date, gap.adj_close, 'w--', lw=2)
ax1.legend(handles=[ml.Line2D([], [], ls='--', label='Gaps in daily data')])

ax1.set_title("Plotting Data with Default Gaps on Weekends")
ax1.xaxis.set_major_locator(DayLocator())
ax1.xaxis.set_major_formatter(DateFormatter('%a'))

Création d'un formateur d'index personnalisé

Pour tracer les données en fonction d'un index allant de 0, 1,... len(data), nous allons créer un formateur d'index personnalisé. Ce formateur formatera les repères d'échelle en tant que dates au lieu d'entiers.

## Créer un formateur d'index personnalisé
fig, ax2 = plt.subplots(figsize=(6, 3))
ax2.plot(r.adj_close, 'o-')

## Formater l'axe x en tant que dates
def format_date(x, _):
    try:
        ## convertir datetime64 en datetime, et utiliser la méthode strftime de datetime :
        return r.date[round(x)].item().strftime('%a')
    except IndexError:
        pass

ax2.set_title("Creating Custom Index Formatter")
ax2.xaxis.set_major_formatter(format_date)  ## crée internement un FuncFormatter

Utilisation d'un objet appelable pour le formateur

Au lieu de passer une fonction à .Axis.set_major_formatter, nous pouvons utiliser tout autre objet appelable, tel qu'une instance d'une classe qui implémente __call__. Dans cette étape, nous allons créer une classe MyFormatter qui formatera les repères d'échelle en tant que dates.

## Utiliser un objet appelable pour le formateur
class MyFormatter(Formatter):
    def __init__(self, dates, fmt='%a'):
        self.dates = dates
        self.fmt = fmt

    def __call__(self, x, pos=0):
        """Retourne l'étiquette pour l'heure x à la position pos."""
        try:
            return self.dates[round(x)].item().strftime(self.fmt)
        except IndexError:
            pass

ax2.xaxis.set_major_formatter(MyFormatter(r.date, '%a'))

Affichage du graphique

Nous allons maintenant afficher le graphique en utilisant la fonction show de matplotlib.

plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à utiliser un formateur d'index personnalisé pour tracer des séries temporelles financières sans trous le week-end. Nous avons également appris à utiliser un objet appelable pour le formateur au lieu d'une fonction. En utilisant ces techniques, nous pouvons créer des graphiques plus attrayants visuellement des données quotidiennes.