cours
Matplotlib Time series line plot (tracé de lignes de séries temporelles)
Une série chronologique est une collection d'observations de données indexées par le temps dans l'ordre chronologique. Ces observations sont généralement (mais pas nécessairement) enregistrées à intervalles de temps réguliers. Les séries chronologiques sont souvent utilisées dans les secteurs de la banque, du commerce, du marketing, de la science et d'autres industries. La représentation visuelle la plus typique des données de séries temporelles est un graphique linéaire où le temps est placé sur l'axe des x et la valeur mesurée - sur l'axe des y.
Dans ce tutoriel, nous allons explorer comment créer et personnaliser des tracés linéaires de séries temporelles dans matplotlib, une bibliothèque de traçage Python de premier plan.
Débuter avec le traçage de séries temporelles avec matplotlib
Importation des bibliothèques et chargement des données
Tout d'abord, nous allons importer les bibliothèques Python nécessaires et charger les données - un jeu de données Kaggle Daily Exchange Rates per Euro 1999-2023. Nous procéderons également à un nettoyage de base des données :
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime
df = pd.read_csv('euro-daily-hist_1999_2022.csv')
df = df.iloc[:, [0, 4, 28, -2]]
df.columns = ['Date', 'CAD', 'NZD', 'USD']
for col in ['CAD', 'NZD', 'USD']:
df = df[df[col] != '-']
df[col] = pd.to_numeric(df[col])
df = df[df['Date'] >= '2022-12-01'].reset_index(drop=True)
print(df.head(3))
print(f'\nThe date range: {df.Date.min()}/{ df.Date.max()}')
Sortie :
Date CAD NZD USD
0 2023-01-27 1.4479 1.6759 1.0865
1 2023-01-26 1.4568 1.6799 1.0895
2 2023-01-25 1.4544 1.6792 1.0878
The date range: 2022-12-01/2023-01-27
Conversion de chaînes de caractères date/heure en objets datetime
Pour travailler efficacement avec les séries temporelles, nous devons convertir les chaînes de date ou d'heure en objets datetime à l'aide de la fonction pandas.to_datetime
:
df['Date'] = pd.to_datetime(df['Date'])
print(df['Date'].dtypes)
Sortie :
datetime64[ns]
Si vous avez besoin d'une remise à niveau sur la façon de travailler avec des séries temporelles en Python, vous pouvez trouver utile le cours Manipuler des données de séries temporelles en Python.
Définition d'une colonne de date en tant qu'index de dataFrame
Définissons maintenant la colonne Date
comme index de dataframe à l'aide de la méthode set_index :
df = df.set_index('Date')
print(df.head(3))
Sortie :
CAD NZD USD
Date
2023-01-27 1.4479 1.6759 1.0865
2023-01-26 1.4568 1.6799 1.0895
2023-01-25 1.4544 1.6792 1.0878
Création d'un tracé de série temporelle matplotlib de base sur une seule ligne
Pour créer un graphique linéaire de série temporelle de base, nous utilisons la méthode standard matplotlib.pyplot.plot(x, y)
:
plt.plot(df.index, df['CAD'])
Sortie :
Création d'un tracé de séries temporelles matplotlib à lignes multiples
Pour créer un graphique de séries temporelles à lignes multiples, il suffit d'exécuter la méthode matplotlib.pyplot.plot(x, y)
le nombre de fois nécessaire :
plt.plot(df.index, df['CAD'])
plt.plot(df.index, df['NZD'])
plt.plot(df.index, df['USD'])
L'utilisation de la boucle for optimise le code ci-dessus :
for col in ['CAD', 'NZD', 'USD']:
plt.plot(df.index, df[col])
Sortie :
Personnaliser les tracés de séries temporelles de matplotlib
Pour rendre le tracé de notre série temporelle plus lisible et plus convaincant, nous devons le personnaliser. Nous pouvons lui appliquer certains ajustements courants de matplotlib, tels que la personnalisation de la taille de la figure, l'ajout et la personnalisation d'un titre de tracé et d'étiquettes d'axe, la modification des propriétés de la ligne, l'ajout et la personnalisation de marqueurs, etc. D'autres ajustements sont spécifiques aux tracés linéaires de séries temporelles, comme la personnalisation des ticks de l'axe temporel et de leurs étiquettes ou la mise en évidence de certaines périodes.
Personnalisation de la figure et des axes
En utilisant les méthodes standard de matplotlib, nous pouvons personnaliser la figure et les axes d'un graphique linéaire de série temporelle de nombreuses façons, comme décrit dans les commentaires de code ci-dessous :
# Adjusting the figure size
fig = plt.subplots(figsize=(16, 5))
# Creating a plot
plt.plot(df.index, df['CAD'])
# Adding a plot title and customizing its font size
plt.title('EUR-CAD rate', fontsize=20)
# Adding axis labels and customizing their font size
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
# Rotaing axis ticks and customizing their font size
plt.xticks(rotation=30, fontsize=15)
# Changing the plot resolution - zooming in the period from 15.12.2022 till 15.01.2023
plt.xlim(pd.Timestamp('2022-12-15'), pd.Timestamp('2023-01-15'))
Sortie :
Personnalisation des propriétés de la ligne
Comme pour les tracés courants, il est possible de modifier les propriétés des lignes d'un tracé de séries temporelles, telles que la couleur, le style ou la largeur des lignes :
plt.plot(df.index, df['CAD'], color='green', linestyle='dashed', linewidth=3)
Sortie :
Ajout et personnalisation de marqueurs
Comme pour tout tracé linéaire, nous pouvons placer des marqueurs sur un tracé linéaire de série temporelle et personnaliser leur symbole, leur couleur, la couleur de leur bord et leur taille :
plt.plot(df.index, df['CAD'], marker='o', markerfacecolor='yellow', markeredgecolor='red', markersize=8)
Personnalisation des ticks de l'axe du temps
Commençons par créer un tracé de série temporelle matplotlib de base avec quelques personnalisations essentielles :
fig = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())
Sortie :
Nous voyons que, par défaut, matplotlib affiche quelques ticks aléatoires, ainsi que leurs étiquettes. Cependant, nous pouvons souhaiter contrôler les tics affichés sur l'axe du temps. Dans ce cas, nous devons fournir à la méthode matplotlib.pyplot.xticks
une liste des dates (ou heures) nécessaires sous forme de chaînes de caractères ou de timestamps pandas :
fig = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())
# Defining and displaying time axis ticks
ticks = ['2022-12-05', '2023-01-02', '2023-01-20']
plt.xticks(ticks)
Sortie :
Ci-dessus, matplotlib a affiché les tiques sélectionnées et les a automatiquement étiquetées.
Si nous voulons afficher tous nous devons fournir une liste des indices de la série temporelle à la méthode matplotlib.pyplot.xticks
une liste d'indices de séries temporelles :
fig = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())
# Defining and displaying all time axis ticks
ticks = list(df.index)
plt.xticks(ticks, rotation=45)
Sortie :
Personnalisation des étiquettes de l'axe du temps
Les étiquettes de l'axe du temps sur le graphique en courbes ci-dessus peuvent sembler écrasantes. Il se peut que nous voulions les formater pour les rendre plus lisibles. Pour ce faire, nous pouvons utiliser la classe matplotlib.dates.DateFormatter
en lui transmettant une chaîne de format strftime reflétant la façon dont nous souhaitons voir les dates et heures. Ensuite, nous fournissons ce formateur à la méthode matplotlib.axis.XAxis.set_major_formatter
:
fig, ax = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())
ticks = list(df.index)
plt.xticks(ticks, rotation=45)
# Formatting time axis tick labels
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%b %d'))
Sortie :
Cette page de documentation fournit une liste exhaustive de tous les codes de format strftime possibles.
Mise en évidence de certaines périodes
Il arrive que l'on veuille ombrer certaines périodes sur un graphique linéaire de série temporelle. Pour ce faire, nous pouvons utiliser la méthode matplotlib.pyplot.axvspan
. Elle prend deux arguments obligatoires : les points de départ et d'arrivée d'une période d'intérêt au format datetime. La méthode peut également prendre en compte certains paramètres facultatifs pour personnaliser l'apparence d'une zone en surbrillance, tels que sa couleur, la couleur de ses bords, sa transparence, la largeur de sa ligne ou son motif de remplissage.
Appliquons cette technique au graphique de la section précédente :
fig, ax = plt.subplots(figsize=(16, 5))
plt.plot(df.index, df['CAD'])
plt.title('EUR-CAD rate', fontsize=20)
plt.xlabel('Date', fontsize=15)
plt.ylabel('Rate', fontsize=15)
plt.xlim(df.index.min(), df.index.max())
ticks = list(df.index)
plt.xticks(ticks, rotation=45)
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%b %d'))
# Highlighting the time period from 15.12.2022 to 1.01.2023 and customizing the shaded area
plt.axvspan(datetime(2022, 12, 15), datetime(2023, 1, 1), facecolor='yellow', alpha=0.5, hatch='/', edgecolor='red', linewidth=5)
Sortie :
Sauvegarde d'un tracé de série temporelle matplotlib dans un fichier
Nous pouvons choisir d'enregistrer un tracé linéaire de série temporelle dans un fichier image plutôt que de simplement l'afficher. Pour ce faire, nous utilisons la méthode matplotlib.pyplot.savefig en indiquant le nom du fichier. Par exemple, revenons à notre premier graphique de base :
plt.plot(df.index, df['CAD'])
# Saving the resulting plot to a file
plt.savefig('time series line plot.png')
Ci-dessus, nous avons enregistré le tracé dans un fichier appelé tracé des lignes de la série temporelle.png et situé au même endroit que notre programme actuel.
Conclusion
En résumé, dans ce tutoriel, nous avons vu comment créer et personnaliser des tracés de séries temporelles dans matplotlib, en utilisant à la fois les méthodes courantes de matplotlib et des méthodes plus avancées, spécifiques aux visualisations de séries temporelles.
Après avoir appris ces techniques fondamentales, vous voudrez peut-être vous plonger plus profondément dans le travail avec des données de séries temporelles et leur visualisation en Python. Dans ce cas, envisagez d'explorer les ressources suivantes, complètes et faciles à utiliser pour les débutants :
Cours de Python
cours