cours
Introduction au traçage avec Matplotlib en Python
Matplotlib est une bibliothèque de visualisation de données puissante et très populaire en Python. Dans ce tutoriel, nous verrons comment créer des graphiques linéaires, des graphiques à barres et des graphiques de dispersion dans Matplotlib en utilisant les données du marché boursier en 2022. Il s'agit des tracés fondamentaux qui vous permettront de commencer à comprendre, à visualiser et à raconter des histoires à propos des données. La visualisation des données est une compétence essentielle pour tous les analystes de données et Matplotlib est l'une des bibliothèques les plus populaires pour créer des visualisations.
Ce tutoriel suppose quelques connaissances préalables de base sur les tableaux NumPy et les DataFrames pandas. Lorsque nous utiliserons ces bibliothèques, nous expliquerons rapidement ce que nous faisons. Ce tutoriel se concentre principalement sur Matplotlib, qui travaille sur ces structures de données pour créer des visualisations.
Matplotlib est très flexible et personnalisable pour la création de graphiques. Il faut beaucoup de code pour réaliser des tracés plus basiques avec peu de personnalisations. Si vous travaillez dans un environnement où l'analyse exploratoire des données est l'objectif principal, nécessitant de nombreux graphiques rapidement dessinés sans mettre l'accent sur l'esthétique, la bibliothèque seaborn est une excellente option car elle s'appuie sur Matplotlib pour créer des visualisations plus rapidement. Consultez plutôt notre tutoriel Python pour débutants si l'analyse exploratoire des données ou la création rapide et facile de graphiques est votre principale priorité.
Exemples de Matplotlib
À la fin de ce tutoriel, vous serez en mesure de réaliser de belles visualisations avec Matplotlib. Nous nous concentrerons sur la création de diagrammes linéaires, de diagrammes en barres et de diagrammes de dispersion. Nous nous concentrerons également sur la manière de prendre des décisions de personnalisation, telles que l'utilisation de la couleur, la manière d'étiqueter les graphiques et la manière de les organiser de façon claire pour raconter une histoire convaincante.
L'ensemble de données
Matplotlib est conçu pour fonctionner avec les tableaux NumPy et les dataframes pandas. La bibliothèque facilite la création de graphiques à partir de données tabulaires. Pour ce tutoriel, nous utiliserons les prix historiques de l'indice Dow Jones Industrial Average (DJIA) du 2022-01-01 au 2022-12-31(trouvés ici). Vous pouvez définir la plage de dates sur la page, puis cliquer sur le bouton "Télécharger une feuille de calcul".
Nous allons charger le fichier csv, nommé HistoricalPrices.csv
, à l'aide de la bibliothèque pandas
et afficher les premières lignes à l'aide de la méthode .head()
.
import pandas as pd
djia_data = pd.read_csv('HistoricalPrices.csv')
djia_data.head()
Nous voyons que les données comprennent 4 colonnes, une date, une ouverture, un haut, un bas et une clôture. Les 4 derniers sont liés au prix de l'indice au cours de la journée de négociation. Vous trouverez ci-dessous une brève explication de chaque variable.
- Date : Le jour que représente l'information sur le cours de l'action.
- Ouvrir : Le prix du DJIA à 9h30 ET à l'ouverture du marché boursier.
- Haut : Le prix le plus élevé atteint par le DJIA au cours de la journée.
- Faible : Le prix le plus bas atteint par le DJIA au cours de la journée.
- Fermer : Le prix du DJIA lorsque le marché a cessé d'être négocié à 4:00 PM ET.
En guise de nettoyage rapide, nous devrons également utiliser la méthode rename()
dans pandas
car l'ensemble de données que nous avons téléchargé contient un espace supplémentaire dans les noms de colonnes.
djia_data = djia_data.rename(columns = {' Open': 'Open', ' High': 'High', ' Low': 'Low', ' Close': 'Close'})
Nous veillerons également à ce que la variable Date soit une variable de type datetime et à ce qu'elle soit triée par ordre croissant de date.
djia_data['Date'] = pd.to_datetime(djia_data['Date'])
djia_data = djia_data.sort_values(by = 'Date')
Chargement de Matplotlib
Ensuite, nous chargerons le sous-module pyplot
de Matplotlib afin de pouvoir dessiner nos graphiques. Le module pyplot
contient toutes les méthodes dont nous aurons besoin pour créer des graphiques et les styliser. Nous utiliserons l'alias conventionnel plt
. Nous chargerons également pandas, numpy et datetime pour les prochaines parties de ce tutoriel.
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from datetime import datetime
Tracés de lignes
Le premier graphique que nous créerons sera un graphique linéaire. Les tracés linéaires sont un type de tracé très important car ils permettent d'afficher des données de séries temporelles. Il est souvent important de visualiser l'évolution des indicateurs de performance clés dans le temps afin de comprendre les schémas de données sur lesquels il est possible d'agir.
Graphiques linéaires avec une seule ligne
- Montrez comment dessiner un graphique linéaire simple avec une seule ligne.
- Veillez à mettre l'accent sur l'utilisation de plt.show() pour que le graphique s'affiche réellement.
- Commentez brièvement l'intrigue, y compris l'interprétation.
Nous pouvons créer un graphique linéaire dans matplotlib en utilisant la méthode plt.plot()
où le premier argument est la variable x et le second argument est la variable y de notre graphique linéaire. Chaque fois que nous créons un graphique, nous devons nous assurer d'appeler plt.show()
pour voir le graphique que nous avons créé. Nous allons visualiser le prix de clôture du DJIA au fil du temps.
plt.plot(djia_data['Date'], djia_data['Close'])
plt.show()
Nous pouvons constater qu'au cours de l'année, le prix de l'indice a commencé à sa valeur la plus élevée, suivie de quelques fluctuations à la hausse et à la baisse tout au long de l'année. Nous constatons que le prix est le plus bas vers le mois d'octobre, suivi d'une forte augmentation à la fin de l'année.
Graphiques linéaires avec plusieurs lignes
Nous pouvons visualiser plusieurs lignes sur le même graphique en ajoutant un autre appel à plt.plot()
avant la fonction plt.show()
.
plt.plot(djia_data['Date'], djia_data['Open'])
plt.plot(djia_data['Date'], djia_data['Close'])
plt.show()
Au cours de l'année, nous constatons que les cours d'ouverture et de clôture du DJIA ont été relativement proches l'un de l'autre pour chaque jour donné, sans qu'il y ait de tendance claire à ce que l'un soit toujours supérieur ou inférieur à l'autre.
Ajouter une légende
Si vous souhaitez distinguer quelle ligne représente quelle colonne, vous pouvez ajouter une légende. Cela créera une étiquette codée par couleur dans le coin du graphique. Nous pouvons le faire en utilisant plt.legend()
et en ajoutant des paramètres d'étiquette à chaque appel à plt.plot()
.
plt.plot(djia_data['Date'], djia_data['Open'], label = 'Open')
plt.plot(djia_data['Date'], djia_data['Close'], label = 'Close')
plt.legend()
plt.show()
Nous voyons maintenant une légende avec les étiquettes spécifiées apparaître à l'emplacement par défaut en haut à droite (l'emplacement peut être spécifié à l'aide de l'argument loc
dans plt.legend()
).
Dessiner des diagrammes à barres
Les diagrammes en barres sont très utiles pour comparer des valeurs numériques entre catégories. Ils sont particulièrement utiles pour trouver les catégories les plus grandes et les plus petites.
Pour cette section, nous allons agréger les données en moyennes mensuelles à l'aide de pandas afin de pouvoir comparer les performances mensuelles du DJIA au cours de l'année 2022. Nous utiliserons également les six premiers mois pour faciliter la visualisation des données.
# Import the calendar package
from calendar import month_name
# Order by months by chronological order
djia_data['Month'] = pd.Categorical(djia_data['Date'].dt.month_name(), month_name[1:])
# Group metrics by monthly averages
djia_monthly_mean = djia_data \
.groupby('Month') \
.mean() \
.reset_index()
djia_monthly_mean.head(6)
Diagrammes à barres verticales
Nous commencerons par créer un diagramme à barres verticales. Pour ce faire, vous pouvez utiliser la méthode plt.bar()
, le premier argument étant la variable de l'axe des x (Mois) et le paramètre height
étant l'axe des y (Clôture). Nous devons ensuite nous assurer d'appeler plt.show()
pour afficher notre graphique.
plt.bar(djia_monthly_mean['Month'], height = djia_monthly_mean['Close'])
plt.show()
Nous constatons que la plupart des cours de clôture du DJIA étaient proches les uns des autres, la valeur moyenne de clôture la plus basse étant celle de juin et la valeur moyenne de clôture la plus élevée celle de janvier.
Réorganisation des barres dans les diagrammes à barres
Si nous voulons afficher ces barres dans l'ordre du prix de clôture moyen mensuel le plus élevé au plus bas, nous pouvons trier les barres à l'aide de la méthode sort_values()
de pandas, puis à l'aide de la même méthode plt.bar().
djia_monthly_mean_srtd = djia_monthly_mean.sort_values(by = 'Close', ascending = False)
plt.bar(djia_monthly_mean_srtd['Month'], height = djia_monthly_mean_srtd['Close'])
plt.show()
Comme vous pouvez le constater, il est beaucoup plus facile de voir quels mois ont eu le prix de clôture moyen du DJIA le plus élevé et quels mois ont eu les moyennes les plus basses. Il est également plus facile de comparer les mois entre eux et de les classer.
Graphiques à barres horizontales
- Montrez comment intervertir les axes pour que les barres soient horizontales.
- Commentez brièvement l'intrigue, y compris l'interprétation.
Il est parfois plus facile d'interpréter les diagrammes en bâtons et de lire les étiquettes lorsque le diagramme en bâtons est composé de barres horizontales. Nous pouvons le faire en utilisant la méthode plt.hbar()
.
plt.barh(djia_monthly_mean_srtd['Month'], height = djia_monthly_mean_srtd['Close'])
plt.show()
Comme vous pouvez le constater, les étiquettes de chaque catégorie (mois) sont plus faciles à lire que lorsque les barres étaient verticales. Nous pouvons encore facilement faire des comparaisons entre les groupes. Ce diagramme à barres horizontales est particulièrement utile lorsqu'il y a beaucoup de catégories.
Dessiner des diagrammes de dispersion
Les diagrammes de dispersion sont très utiles pour identifier les relations entre deux variables numériques. Cela peut vous donner une idée de ce que vous pouvez attendre d'une variable lorsque l'autre variable change et peut également être très instructif dans votre décision d'utiliser différentes techniques de modélisation telles que la régression linéaire ou non linéaire.
Diagrammes de dispersion
Comme les autres diagrammes, un diagramme de dispersion peut être créé à l'aide de pyplot.scatter()
où le premier argument est la variable de l'axe des x et le deuxième argument est la variable de l'axe des y. Dans cet exemple, nous examinerons la relation entre le cours d'ouverture et le cours de clôture du DJIA.
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.show()
L'axe des x représente le cours d'ouverture du DJIA et l'axe des y le cours de clôture. Comme on pouvait s'y attendre, lorsque le prix ouvert augmente, on observe une forte corrélation entre l'augmentation du prix de clôture et l'augmentation du prix ouvert.
Diagrammes de dispersion avec ligne de tendance
Ensuite, nous ajouterons une ligne de tendance au graphique afin de montrer plus explicitement la relation linéaire entre les variables d'ouverture et de fermeture. Pour ce faire, nous utiliserons la méthode numpy polyfit()
et poly1d()
. La première méthode nous donnera un ajustement polynomial des moindres carrés où le premier argument est la variable x, la deuxième variable est la variable y et la troisième variable est le degré de l'ajustement (1 pour linéaire). La seconde méthode nous donnera une classe polynomiale unidimensionnelle que nous pourrons utiliser pour créer une ligne de tendance à l'aide de plt.plot().
z = np.polyfit(djia_data['Open'], djia_data['Close'], 1)
p = np.poly1d(z)
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.plot(djia_data['Open'], p(djia_data['Open']))
plt.show()
Comme nous pouvons le voir, la ligne à l'arrière-plan du graphique suit de près la tendance du nuage de points, car la relation entre le prix d'ouverture et le prix de clôture est fortement linéaire. Nous constatons que lorsque le prix d'ouverture augmente, le prix de clôture augmente généralement à un rythme similaire et linéaire.
Définition du titre du graphique et des étiquettes des axes
Les titres des tracés et les étiquettes des axes facilitent considérablement la compréhension d'une visualisation et permettent à l'observateur de comprendre rapidement ce qu'il regarde. Nous pouvons le faire en ajoutant des couches supplémentaires en utilisant plt.xtitle()
, plt.ylabel()
et plt.xlabel()
, ce que nous démontrerons avec le nuage de points que nous avons réalisé dans la section précédente.
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.show()
Changement de couleurs
La couleur peut être un outil puissant dans les visualisations de données pour souligner certains points ou raconter une histoire cohérente avec des couleurs uniformes pour une certaine idée. Dans Matplotlib, nous pouvons changer les couleurs en utilisant des couleurs nommées (par exemple "rouge", "bleu", etc.), des codes hexagonaux ("#f4db9a", "#383c4a", etc.), et des tuples rouge-vert-bleu (par exemple (125, 100, 37), (30, 54, 121), etc.).
Lignes
Pour un tracé linéaire, nous pouvons changer la couleur en utilisant l'attribut color dans plt.plot(). Ci-dessous, nous changeons la couleur de notre ligne de prix d'ouverture en "noir" et celle de notre ligne de prix de fermeture en "rouge".
plt.plot(djia_data['Date'], djia_data['Open'], color = 'black')
plt.plot(djia_data['Date'], djia_data['Close'], color = 'red')
plt.show()
Barres
Pour les barres, nous pouvons passer une liste dans l'attribut color pour spécifier la couleur de chaque ligne. Supposons que nous souhaitions mettre en évidence le prix moyen en janvier afin d'illustrer la solidité du prix moyen de clôture. Pour ce faire, nous pouvons donner à cette barre une couleur unique afin d'attirer l'attention sur elle.
plt.bar(djia_monthly_mean_srtd['Month'], height = djia_monthly_mean_srtd['Close'], color = ['blue', 'gray', 'gray', 'gray', 'gray', 'gray'])
plt.show()
Points
Enfin, pour les diagrammes de dispersion, nous pouvons modifier la couleur en utilisant l'attribut color de plt.scatter()
. Nous colorons tous les points du mois de janvier en bleu et tous les autres points en gris pour montrer une histoire similaire à celle de la visualisation ci-dessus.
plt.scatter(djia_data[djia_data['Month'] == 'January']['Open'], djia_data[djia_data['Month'] == 'January']['Close'], color = 'blue')
plt.scatter(djia_data[djia_data['Month'] != 'January']['Open'], djia_data[djia_data['Month'] != 'January']['Close'], color = 'gray')
plt.show()
Using Colormaps
Les cartes de couleurs sont des couleurs Matplotlib intégrées qui s'échelonnent en fonction de la magnitude de la valeur(documentation ici). Les cartes de couleurs sont généralement esthétiques et permettent de raconter une histoire dans les valeurs croissantes.
Dans l'exemple ci-dessous, nous utilisons une carte des couleurs en transmettant le prix de clôture (variable y) à l'attribut c
et la carte des couleurs du plasma à l'attribut cmap
. Nous constatons qu'au fur et à mesure que les valeurs augmentent, la couleur associée devient plus claire et plus jaune, tandis que la partie inférieure des valeurs est violette et plus sombre.
plt.scatter(djia_data['Open'], djia_data['Close'], c=djia_data['Close'], cmap = plt.cm.plasma)
plt.show()
Définition des limites des axes
Il est parfois utile d'examiner une plage spécifique de valeurs dans un graphique. Par exemple, si le DJIA se négocie actuellement autour de 30 000 dollars, nous ne nous intéresserons qu'au comportement autour de ce prix. Nous pouvons passer un tuple à plt.xlim()
et plt.ylim()
pour définir les limites x et y respectivement. La première valeur du tuple est la limite inférieure, et la deuxième valeur du tuple est la limite supérieure.
Sauvegarde des parcelles
Enfin, nous pouvons enregistrer les tracés que nous créons dans matplotlib à l'aide de la méthode plt.savefig()
. Nous pouvons enregistrer le fichier dans de nombreux formats différents, notamment "png", "pdf" et "svg". Le premier argument est le nom du fichier. Le format est déduit de l'extension du fichier (ou vous pouvez le remplacer par l'argument format
).
plt.scatter(djia_data['Open'], djia_data['Close'])
plt.savefig('DJIA 2022 Scatterplot Open vs. Close.png')
Passez au niveau supérieur
Nous avons couvert les bases de Matplotlib dans ce tutoriel et vous pouvez maintenant créer des graphiques linéaires, des graphiques en barres et des diagrammes de dispersion. Matplotlib est une bibliothèque avancée qui offre de nombreuses fonctionnalités pour créer des visualisations esthétiques. Si vous souhaitez approfondir vos connaissances de Matplotlib, suivez notre cours Introduction à la visualisation de données avec Matplotlib. Vous pouvez également télécharger notre Matplotlib Cheat Sheet : Plotting in Python à titre de référence lorsque vous commencerez à créer vos propres visualisations.
FAQ sur Matplotlib
Qu'est-ce que Matplotlib en Python ?
Matplotlib est une bibliothèque populaire de visualisation de données en Python. Il est souvent utilisé pour créer des visualisations statiques, interactives et animées en Python. Matplotlib vous permet de générer des graphiques, des histogrammes, des diagrammes à barres, des diagrammes de dispersion, etc., avec seulement quelques lignes de code.
Pourquoi utiliser Matplotlib pour la visualisation de données ?
Il y a plusieurs raisons à cela. Tout d'abord, Matplotlib est flexible. Il prend en charge un large éventail de graphiques et de tracés, et s'intègre bien avec de nombreuses autres bibliothèques Python, comme NumPy et pandas. Deuxièmement, il s'agit d'une bibliothèque mature et largement utilisée, qui dispose donc d'une communauté solide et d'un grand nombre de ressources et de tutoriels. Enfin, comme c'est en Python, vous pouvez automatiser et personnaliser vos tracés dans le cadre de vos pipelines de données.
Comment installer Matplotlib ?
Vous pouvez installer Matplotlib avec pip, l'installateur de paquets de Python. Ouvrez votre terminal et tapez : pip install matplotlib
. Si vous utilisez un carnet Jupyter, vous pouvez exécuter cette commande dans une cellule de code en la précédant d'un point d'exclamation : !pip install matplotlib
.
Comment créer un graphique de base dans Matplotlib ?
Voici un exemple simple. Tout d'abord, vous devez importer la bibliothèque Matplotlib. Le module le plus couramment utilisé est pyplot
, et il est généralement importé sous l'alias plt
:
import matplotlib.pyplot as plt
Vous pouvez ensuite créer un graphique linéaire de base comme celui-ci :
plt.plot([1, 2, 3, 4]) plt.ylabel('Some Numbers') plt.show()
Dans cet exemple, plt.plot([1, 2, 3, 4])
est utilisé pour tracer la liste de nombres spécifiée. La ligne plt.ylabel('Some Numbers')
définit l'étiquette de l'axe des ordonnées et plt.show()
affiche le graphique.
Rédacteur en science des données | Analyste principal en marketing technique chez Wayfair | MSE en science des données à l'Université de Pennsylvanie
En savoir plus sur Python
cours
Python pour les utilisateurs de MATLAB
cours