Visualisation des Données avec Matplotlib et Seaborn

Natacha Njongwa Yepnga

Introduction à la Visualisation des Données

La visualisation des données est une étape cruciale en science des données. Elle permet de mieux comprendre la structure des données, d’identifier des tendances, des anomalies et de communiquer efficacement les résultats de l’analyse.

Objectifs de la visualisation :

  • Compréhension : Transformer des données brutes en graphiques clairs et lisibles.
  • Communication : Présenter des résultats analytiques de manière percutante et accessible.
  • Analyse exploratoire : Détecter rapidement des corrélations, des patterns ou des valeurs aberrantes.

Bibliothèques principales en Python :

  • Matplotlib : Outil puissant pour créer des graphiques personnalisables.
  • Seaborn : Extension de Matplotlib qui simplifie la création de graphiques statistiques avec des styles améliorés.

Choix du Type de Graphique selon la Nature des Données

Type de Graphique Type de Données Utilisation principale
Courbe linéaire Variable continue Suivi d’une tendance
Histogramme Variable numérique continue Distribution d’une variable
Diagramme en barres Variable catégorielle Comparaison entre différentes catégories
Nuage de points Deux variables numériques Relation entre deux variables
Boxplot Variable numérique / catégorielle Comparaison de distributions
Violin plot Variable numérique / catégorielle Visualisation de la distribution
Heatmap Matrice de valeurs numériques Corrélation entre variables
Pie chart (camembert) Variables catégoriques Répartition proportionnelle

Visualisation avec Matplotlib

Installation et Importation

pip install matplotlib numpy
import matplotlib.pyplot as plt
import numpy as np

##Graphiques de Base avec Matplotlib

Courbe Linéaire (Line Plot)

Les courbes permettent d’observer l’évolution d’une variable sur un axe donné.

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
plt.plot(x, y, label="sin(x)", color='orange')
plt.xlabel("x")
plt.ylabel("sin(x)")
plt.title("Courbe de la fonction sin(x)")
plt.legend()
plt.show()

Nuage de Points (Scatter Plot)

Permet d’analyser la relation entre deux variables numériques.

heures_etude = [2, 5, 1, 8, 4, 7, 3, 6, 9, 5]
notes = [50, 80, 40, 90, 70, 85, 60, 75, 95, 78]
plt.scatter(heures_etude, notes, color='purple', marker='o')
plt.xlabel("Heures d'étude par semaine")
plt.ylabel("Note à l'examen")
plt.title("Relation entre temps d'étude et performance")
plt.show()

Histogramme

Utilisé pour représenter la distribution des valeurs d’une variable continue.

np.random.seed(0)
ages = np.random.randint(1, 101, size=200)
plt.hist(ages, bins=10, color='skyblue', edgecolor='black')
plt.xlabel("Âge")
plt.ylabel("Fréquence")
plt.title("Histogramme des âges (200 personnes)")
plt.show()

Diagramme en Barres (Bar Chart)

Comparaison des quantités entre différentes catégories.

produits = ['Produit A', 'Produit B', 'Produit C', 'Produit D']
ventes = [250, 400, 150, 300]
plt.bar(produits, ventes, color='mediumseagreen')
plt.xlabel("Produits")
plt.ylabel("Nombre de ventes")
plt.title("Ventes par produit")
plt.show()

Diagramme Circulaire (Pie Chart)

Montre la répartition d’un ensemble sous forme de pourcentages.

parts = [35, 25, 20, 20]
labels = ['Marque A', 'Marque B', 'Marque C', 'Marque D']
colors = ['gold', 'lightcoral', 'lightskyblue', 'yellowgreen']
plt.pie(parts, labels=labels, colors=colors, autopct='%1.1f%%', startangle=140)
plt.title("Répartition des parts de marché")
plt.axis('equal')
plt.show()

Visualisation Avancée avec Seaborn

Seaborn simplifie la création de graphiques statistiques et esthétiques, en particulier pour des DataFrames issus de Pandas.

Installation et Importation

Si nécessaire, installez Seaborn :

pip install seaborn

Puis importez-le :

import seaborn as sns
import matplotlib.pyplot as plt

Boxplot

Le boxplot visualise la distribution d’une variable et met en avant la médiane, les quartiles et les valeurs aberrantes.

Exemple : Distribution des additions par jour avec le dataset “tips”

# Chargement des données
tips = sns.load_dataset("tips")

# Création du boxplot
sns.boxplot(x="day", y="total_bill", data=tips)
plt.xlabel("Jour de la semaine")
plt.ylabel("Addition totale ($)")
plt.title("Distribution des additions par jour")
plt.show()

Heatmap

La heatmap représente une matrice de données à l’aide de codes couleur.

Exemple : Matrice de corrélation du dataset “tips”

# Calcul de la matrice de corrélation
corr = tips.corr()

# Affichage de la heatmap
sns.heatmap(corr, annot=True, cmap="coolwarm")
plt.title("Matrice de corrélation (dataset Tips)")
plt.show()

Explications : - tips.corr() calcule la matrice de corrélation des variables numériques. - annot=True affiche les valeurs dans chaque cellule.

Pairplot

Le pairplot affiche une matrice de scatter plots pour examiner les relations entre chaque paire de variables.

Exemple : Pairplot du dataset “iris”

# Chargement des données
iris = sns.load_dataset("iris")

# Création du pairplot
sns.pairplot(iris, hue="species")
plt.suptitle("Pairplot du dataset Iris", y=1.02)
plt.show()

Note : - L’argument hue="species" permet de colorer les points selon l’espèce.

Violin Plot

Le violin plot combine un boxplot avec une estimation de la densité de la distribution.

Exemple : Distribution des pourboires pour fumeurs vs non-fumeurs

sns.violinplot(x="smoker", y="tip", data=tips, palette="Pastel1")
plt.xlabel("Fumeur")
plt.ylabel("Pourboire ($)")
plt.title("Distribution des pourboires pour fumeurs vs non-fumeurs")
plt.show()

Palettes de Couleurs et Thèmes

Seaborn offre des palettes et styles par défaut pour améliorer l’esthétique.

Modifier la palette par défaut

sns.set_palette("pastel")
sns.boxplot(x="day", y="total_bill", data=tips)
plt.title("Boxplot avec palette pastel")
plt.show()

Changer le style global

sns.set_style("ticks")
sns.boxplot(x="day", y="total_bill", data=tips)
sns.despine()  # Supprime les bordures supérieures et droites
plt.title("Boxplot avec style 'ticks'")
plt.show()

Ajuster le contexte (taille des éléments)

sns.set_context("talk")
sns.violinplot(x="smoker", y="tip", data=tips, palette="muted")
plt.title("Violin plot avec contexte 'talk'")
plt.show()

Personnalisation Avancée des Graphiques

La personnalisation permet d’affiner la présentation de vos graphiques pour une meilleure lisibilité et un rendu professionnel. Vous pouvez modifier les axes, les titres, ajouter des annotations et sauvegarder vos graphiques avec une qualité optimale.

Modification des Axes et Titres

Vous pouvez personnaliser les étiquettes des axes, le titre et la légende en ajustant la taille des polices.

import numpy as np
import matplotlib.pyplot as plt

# Données
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

# Tracé du graphique avec personnalisation des polices
plt.plot(x, y, label="sin(x)", color='orange')
plt.xlabel("x", fontsize=12)  # Taille de la police de l'axe x
plt.ylabel("sin(x)", fontsize=12)  # Taille de la police de l'axe y
plt.title("Courbe sin(x) avec polices personnalisées", fontsize=16)  # Taille du titre
plt.legend(fontsize=10)  # Taille de la police de la légende
plt.show()

Annotations Avancées

Les annotations permettent de mettre en évidence des points d’intérêt dans un graphique. Vous pouvez personnaliser le texte et la flèche de l’annotation.

# Définition du point maximum
x_max = np.pi / 2
y_max = np.sin(x_max)

plt.plot(x, y, label="sin(x)", color='orange')
plt.scatter([x_max], [y_max], color='red')
plt.annotate("Point max", xy=(x_max, y_max), xytext=(x_max + 1, y_max + 0.3),
             arrowprops=dict(facecolor='black', shrink=0.05), fontsize=12)
plt.xlabel("x")
plt.ylabel("sin(x)")
plt.title("Annotation avancée sur sin(x)", fontsize=16)
plt.legend()
plt.show()

Sauvegarde des Figures

Pour exporter vos graphiques dans différents formats (PNG, PDF, SVG) :

plt.plot(x, y, label="sin(x)", color='orange')
plt.xlabel("x")
plt.ylabel("sin(x)")
plt.title("Graphique sauvegardé")
plt.legend()
plt.savefig("graphique_sin.png", dpi=300, bbox_inches='tight')
plt.show()

Explications :

  • dpi=300 : Définit une haute résolution pour l’image exportée.
  • bbox_inches='tight' : Ajuste les marges pour éviter que des éléments soient coupés.

Avec ces options, vous obtenez un graphique professionnel prêt à être utilisé dans des rapports ou présentations.

Organisation des Graphiques avec les Subplots

Utilisation de plt.subplot()

La fonction plt.subplot(nrows, ncols, index) permet de créer une grille simple de sous-graphes. Elle divise la figure en une matrice de nrows lignes et ncols colonnes, puis sélectionne le subplot à modifier à l’aide de l’index.

Exemple : Deux graphiques côte à côte (sin(x) et cos(x))

Dans cet exemple, nous allons afficher côte à côte les courbes des fonctions sin(x) et cos(x).

# Importation des bibliothèques
import numpy as np
import matplotlib.pyplot as plt

# Données
x = np.linspace(0, 2 * np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.figure(figsize=(10, 4))

# Premier subplot : sin(x)
plt.subplot(1, 2, 1)  # 1 ligne, 2 colonnes, 1er subplot
plt.plot(x, y1, color='blue', label='sin(x)')
plt.xlabel("x")
plt.ylabel("sin(x)")
plt.title("Courbe sin(x)")
plt.legend()

# Deuxième subplot : cos(x)
plt.subplot(1, 2, 2)  # 1 ligne, 2 colonnes, 2e subplot
plt.plot(x, y2, color='red', label='cos(x)')
plt.xlabel("x")
plt.ylabel("cos(x)")
plt.title("Courbe cos(x)")
plt.legend()

# Ajustement de l'affichage
plt.tight_layout()
plt.show()

Utilisation de plt.subplots()

La fonction plt.subplots() crée à la fois une figure et un tableau d’axes (fig, axes), ce qui permet de gérer plusieurs subplots plus facilement que plt.subplot(). Elle retourne : - fig : la figure globale. - axes : une liste ou un tableau d’objets AxesSubplot, facilitant la manipulation des sous-graphiques.

Exemple : Grille 2×2 de graphiques

Dans cet exemple, nous allons tracer quatre graphiques dans une grille de 2 lignes et 2 colonnes.

# Importation des bibliothèques
import numpy as np
import matplotlib.pyplot as plt

# Données
x = np.linspace(0, 2*np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(2*x)
y4 = np.cos(2*x)

# Création de la figure et des subplots
fig, axes = plt.subplots(2, 2, figsize=(10, 8), sharex=True, sharey=True)

# Premier graphique : sin(x)
axes[0, 0].plot(x, y1, color='blue')
axes[0, 0].set_title("sin(x)")

# Deuxième graphique : cos(x)
axes[0, 1].plot(x, y2, color='red')
axes[0, 1].set_title("cos(x)")

# Troisième graphique : sin(2x)
axes[1, 0].plot(x, y3, color='green')
axes[1, 0].set_title("sin(2x)")

# Quatrième graphique : cos(2x)
axes[1, 1].plot(x, y4, color='purple')
axes[1, 1].set_title("cos(2x)")

# Titre global
fig.suptitle("Exemples de graphiques en subplots", fontsize=16)

# Ajustement de l'affichage
plt.tight_layout(rect=[0, 0, 1, 0.95])
plt.show()

#Conclusion

Ce guide vous offre une base solide pour utiliser Matplotlib et Seaborn en Python. Vous avez appris à : - Choisir le bon type de graphique selon vos données. - Créer et personnaliser des graphiques avec Matplotlib. - Explorer des visualisations avancées avec Seaborn. - Organiser plusieurs visualisations dans une même figure.