Visualiser ses données en Python grâce à Matplotlib

Une fois que vous avez manipulé et analysé vos données financières avec Pandas, il est essentiel de les visualiser pour mieux comprendre les tendances et les relations entre les différentes variables. Dans cette partie, nous allons découvrir comment créer des graphiques pertinents avec la bibliothèque Matplotlib, l'une des bibliothèques de visualisation les plus populaires pour Python.

Introduction à Matplotlib

Matplotlib est une bibliothèque de visualisation de données pour Python qui permet de créer une grande variété de graphiques, tels que des graphiques à barres, des histogrammes, des nuages de points et des graphiques en courbes. Elle est particulièrement adaptée pour visualiser des données financières et est souvent utilisée en combinaison avec Pandas.

Installation et importation de Matplotlib

Pour utiliser Matplotlib, il faut d'abord l'installer en exécutant la commande suivante dans votre terminal ou invite de commandes :

pip install matplotlib

Une fois installé, vous pouvez importer Matplotlib dans votre script Python en ajoutant cette ligne :

import matplotlib.pyplot as plt

L'alias "plt" est couramment utilisé pour Matplotlib et facilite l'accès aux fonctions de la bibliothèque.

Créer des graphiques avec Matplotlib et Pandas

Maintenant que nous avons importé Matplotlib, nous pouvons créer des graphiques pour visualiser nos données financières. Dans cette section, nous allons explorer quelques exemples de graphiques couramment utilisés dans le secteur de la finance.

Première utilisation : les graphiques linéaires

Le graphique le plus simple est le graphique linéaire, créé en utilisant la méthode plt.plot(). Par exemple :

x = [1, 2, 3, 4, 5]
y = [10, 20, 30, 40, 50]

plt.plot(x, y)
plt.show()

matplotlib0.png

On construit un graphique à partir de 2 listes, une pour les abscisses et une pour les ordonnées

Ajouter des légendes

Vous pouvez compléter votre graphique en y ajoutant des titres :

x = [1, 2, 3, 4, 5]
y = [10, 20, 30, 40, 50]

plt.plot(x, y)
plt.xlabel("Axe X")
plt.ylabel("Axe Y")
plt.title("Graphique test")
plt.show()

matplotlib1.png On a ici ajouté un titre à chaque axe ainsi qu’un titre global au graphique.

Diagrammes à barres

Un autre type de graphique couramment utilisé est le diagramme à barres. Vous pouvez l'obtenir avec la méthode plt.bar().

plt.bar(x, y)
plt.show()

matplotlib2.png

Les nuages de points

Les nuages de points peuvent aider à représenter des données afin de comparer les points de donnée entre eux. Il suffit d’utiliser la méthode plt.scatter().

plt.scatter(x, y)
plt.show()

Visualiser des données complexes avec Pandas et Matplotlib

Pour utiliser un exemple concret, nous allons travailler sur le dataset "House Sales in King County, USA". Ce dataset représente les ventes de maison à King County. Pour chaque maison, vous avez certaines informations de la maison comme sa surface et son nombre de chambres mais surtout son prix de vente. Vous pouvez télécharger le dataset via ce lien https://github.com/CryptoRobotFr/python-pour-la-finance.

Commencez par charger le dataset avec Pandas.

import pandas as pd

df = pd.read_csv('kc_house_data.csv')

Voici un descriptif des différentes colonnes du dataset.

  • id : C'est l'identifiant unique pour chaque maison vendue.
  • date : C'est la date de la vente de la maison. Cela peut être important car les tendances du marché immobilier peuvent varier avec le temps.
  • price : C'est le prix de vente de la maison. C'est souvent la variable cible dans les modèles de prédiction immobilière.
  • bedrooms : C'est le nombre de chambres à coucher dans la maison.
  • bathrooms : C'est le nombre de salles de bains dans la maison. Les demi-salles de bains (toilette sans douche ni baignoire) peuvent être comptabilisées comme 0.5.
  • sqft_living : C'est la superficie habitable de la maison en pieds carrés.
  • sqft_lot : C'est la superficie totale du terrain de la maison en pieds carrés.
  • floors : C'est le nombre d'étages de la maison.
  • waterfront : C'est une variable indiquant si la maison a une vue sur l'eau (un lac, une rivière, la mer, etc.). C'est souvent une variable binaire (0 = pas de vue sur l'eau, 1 = vue sur l'eau).
  • view : C'est une évaluation de la qualité de la vue depuis la maison. Le système de notation peut varier, mais souvent une échelle de 0 à 4 est utilisée.
  • condition : C'est une évaluation de l'état général de la maison. Comme pour view, cela est souvent noté sur une échelle, avec une plus grande valeur indiquant un meilleur état.
  • grade : C'est une évaluation de la qualité de la construction et du design de la maison. Les maisons avec des matériaux de construction de meilleure qualité et des conceptions plus élaborées recevront une note plus élevée.
  • sqft_above : C'est la superficie habitable qui est au-dessus du niveau du sol, en pieds carrés.
  • sqft_basement : C'est la superficie du sous-sol de la maison, en pieds carrés.
  • yr_built : C'est l'année de construction de la maison.
  • yr_renovated : C'est l'année de la dernière rénovation de la maison. Si la maison n'a jamais été rénovée, cette valeur pourrait être 0.
  • zipcode : C'est le code postal de la maison. Cela peut être important car l'emplacement a un impact majeur sur les prix des maisons.
  • lat : C'est la latitude de la maison, une composante de sa position géographique.
  • long : C'est la longitude de la maison, une autre composante de sa position géographique.
  • sqft_living15 : C'est la superficie habitable moyenne des 15 maisons les plus proches, en pieds carrés.
  • sqft_lot15 : C'est la superficie du terrain moyenne des 15 maisons les plus proches, en pieds carrés.

Vous pouvez utiliser df.describe() pour analyser vos données, mais le dataset est assez propre, vous n’aurez normalement pas de retraitement à réaliser.

Les histogrammes

Les histogrammes sont utiles pour visualiser la distribution des données. Utilisez plt.hist() pour cela. Le paramètre bins permet de spécifier le nombre de barres que vous souhaitez. Nous pouvons par exemple observer la distribution du prix de ventes de nos maisons:

plt.hist(df["price"], bins=100)
plt.show()

matplotlib3.png

L’échelle des abscisses est en notation scientifique (1e6 représente 1x10 puissance 6 donc 1000000). On voir que la grande majorité des maisons de notre dataset sont comprises entre 0 et 2 millions de dollar. Cependant on voit que certaines maisons se sont vendues plus de 7 millions de dollar. Si l’on souhaite observer un peu mieux la distribution entre 0 et 2 millions de dollar nous pouvons réaliser un filtre :

plt.hist(df.loc[df["price"]<2000000]["price"], bins=100)
plt.show()

matplotlib4.png

On remarque ici que la grande majorité des maisons se trouve entre 250k et 500k dollar. Chaque barre représente le nombre de maison pour un certains interval de prix.

Le paramètre bins représente le nombre de barre que l’on souhaite, plus le paramètre sera élevé plus on aura de détail dans la répartition des données.

Nuages de points avec couleurs variables

Il serait intéressant de regarder si il y a une relation entre la taille de la maison et son prix de vente. Le nuage de point est parfait pour cela.

plt.scatter(df['sqft_living'], df['price'], s=5, c=df['sqft_living'], cmap='inferno')
plt.title('Prix en fonction de la surface habitable')
plt.xlabel('Surface habitable')
plt.ylabel('Prix')
plt.show()

matplotlib5.png

Le paramètre s défini la taille des points, le paramètre c défini la variation de couleur des points, plus la couleur tire vers le rouge plus le prix est élevé. C’est le paramètres cmap qui défini la plage de couleurs.

matplotlib6.png

Graphiques temporels

Un autre type de graphique utile dans le domaine financier est le graphique temporel qui permet de représenter l'évolution des variables en fonction du temps. Prenons un exemple avec notre dataset. Si nous voulons observer l'évolution du prix moyen des maisons au cours du temps, nous devons d'abord convertir la colonne de date en format datetime.

df['date'] = pd.to_datetime(df['date'])

Ensuite, nous pouvons grouper les données par mois et calculer le prix moyen :

df_grouped = df.resample('M', on='date').mean()

Enfin, nous pouvons tracer l'évolution du prix moyen :

plt.plot(df_grouped.index, df_grouped['price'])
plt.xlabel('Date')
plt.ylabel('Prix moyen')
plt.title('Evolution du prix moyen des maisons au fil du temps')
plt.show()

Autres graphiques

Via ce lien https://matplotlib.org/stable/gallery/index, vous trouverez toute une galerie d’exemples de graphique possibles à réaliser avec Matplotlib.

Seaborn, une autre librairie de visualisation

Alors que Matplotlib est une bibliothèque puissante et flexible pour la visualisation de données, son interface peut parfois être un peu complexe pour des tâches de visualisation plus avancées. C'est là qu'intervient Seaborn. Seaborn est une bibliothèque de visualisation de données en Python qui est construite sur Matplotlib. Elle offre une interface de haut niveau, ce qui rend la création de graphiques plus complexes un peu plus simple. Seaborn est particulièrement utile pour créer des graphiques statistiques attrayants et informatifs, et pour visualiser des données complexes avec plusieurs variables. Elle offre une variété de types de graphiques tels que les graphiques de distribution, les graphiques matriciels, et bien plus encore. En outre, Seaborn s'intègre bien avec les DataFrames de Pandas, ce qui facilite la visualisation directe des données de votre DataFrame. Avec ce lien, vous trouverez une liste d’exemple https://seaborn.pydata.org/examples/index.html.

Voici un exemple d’utilisation :

import seaborn as sns # pip install seaborn pour installer la librairie
sns.scatterplot(x='sqft_living', y='price', data=df)
plt.show()

Conclusion

Comme vous pouvez le constater, Matplotlib est un outil puissant pour la visualisation de données en Python. Il offre une grande flexibilité et peut être utilisé pour créer une large gamme de graphiques et de visualisations, qui peuvent être extrêmement utiles dans le domaine de la finance pour comprendre les tendances et les relations entre différentes variables.

N'oubliez pas que la clé d'une bonne visualisation est qu'elle doit être informative et facile à comprendre. Il est donc important de toujours prendre le temps de bien formater vos graphiques, d'ajouter des titres, des légendes et des étiquettes d'axe appropriés, et de choisir les types de graphiques qui illustrent le mieux vos données.

Exercice d'application : Analyse et visualisation de données financières avec Matplotlib et Seaborn

Pour cet exercice, nous allons continuer à utiliser le dataset "House Sales in King County, USA". L'objectif de cet exercice est d'approfondir votre compréhension de l'analyse et de la visualisation de données financières.

Partie 1 : Afficher les 5 plus grands volumes de ventes par année

Votre premier défi consiste à extraire l'année de la colonne 'date' et à compter le nombre de ventes par an. Ensuite, affichez un graphique à barres des cinq années avec le plus grand volume de ventes. Utilisez Matplotlib pour cela.

Partie 2 : Afficher la distribution des prix pour les maisons avec vue sur l'eau versus sans vue sur l'eau

Utilisez la méthode hist() de Matplotlib pour afficher deux histogrammes sur le même graphique : un pour la distribution des prix des maisons avec vue sur l'eau et un pour ceux sans vue sur l'eau. Assurez-vous d'ajouter une légende pour distinguer les deux histogrammes.

Partie 3 : Diagramme de corrélation

Utilisez Seaborn pour créer une heatmap de corrélation entre les variables 'price', 'sqft_living', 'grade', 'sqft_above' et 'sqft_living15'. Quelles conclusions pouvez-vous tirer de cette heatmap ?

Partie 4 : Boxplot du prix par grade

Le 'grade' dans notre dataset est une évaluation de la qualité de la construction et du design de la maison. Utilisez Seaborn pour créer un boxplot du prix de la maison par 'grade'. Qu'observez-vous sur la relation entre le 'grade' et le 'price' ?

Partie 5 : Scatterplot de 'price' vs 'sqft_living' avec une régression linéaire

Créez un scatterplot de 'price' en fonction de 'sqft_living'. Utilisez la fonction lmplot() de Seaborn pour afficher également une ligne de régression linéaire. Quelle relation pouvez-vous observer entre la taille de la maison et son prix ?

Un exemple de correction se trouve ici: https://github.com/RobotTraders/Python_For_Finance/blob/main/exercise_correction_chapter_6.ipynb.