3.1 Pourquoi Seaborn ? La Puissance au Service de la Simplicité
Vous avez appris à utiliser Matplotlib, un outil puissant mais qui peut demander beaucoup de code pour des graphiques statistiques courants.
Analogie : Construire avec des LEGO® 🧱
Matplotlib : C'est une boîte de briques LEGO® de base. Vous pouvez tout construire avec, mais chaque partie doit être assemblée manuellement.
Seaborn : C'est un kit LEGO® City pré-conçu. Il est construit avec les mêmes briques, mais vous offre des modèles complexes et esthétiques prêts à l'emploi en une seule instruction.
Les avantages de Seaborn :
- Intégration parfaite avec Pandas : Seaborn travaille directement avec les DataFrames.
- Esthétique par défaut : Les graphiques sont plus jolis et lisibles dès le départ.
- Fonctions statistiques intégrées : Il crée des graphiques complexes en une seule ligne de code.
3.2 L'Anatomie d'une Fonction Seaborn
La plupart des fonctions Seaborn partagent une signature similaire, ce qui les rend faciles à apprendre.
sns.nom_du_graphique(data=df, x='nom_colonne_x', y='nom_colonne_y', hue='colonne_categorie')
- data=df : Le DataFrame Pandas contenant vos données.
- x='...' et y='...' : Les noms des colonnes pour les axes X et Y.
- hue='...' : Le paramètre "magique" qui ajoute une troisième dimension en colorant les données selon une catégorie.
3.3 Explorer les Types de Graphiques par Question
La meilleure façon d'apprendre Seaborn est de penser en termes de questions que vous voulez poser à vos données.
Question A : "Comment mes données sont-elles distribuées ?"
Utilisez histplot (histogramme) pour voir la fréquence des valeurs, ou kdeplot pour une courbe de densité lisse.
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
fig.suptitle('Distribution du Montant Total de l\'Addition')
# Histogramme
sns.histplot(data=tips, x='total_bill', ax=axes[0])
axes[0].set_title('Histogramme (histplot)')
# Graphe de densité
sns.kdeplot(data=tips, x='total_bill', fill=True, ax=axes[1])
axes[1].set_title('Densité (kdeplot)')
plt.show()
Question B : "Comment mes catégories se comparent-elles ?"
Utilisez countplot pour compter les occurrences, ou boxplot / violinplot pour comparer la distribution d'une variable numérique à travers différentes catégories.
fig, axes = plt.subplots(1, 3, figsize=(20, 7))
fig.suptitle('Comparaison des Dépenses par Jour')
sns.countplot(data=tips, x='day', ax=axes[0])
axes[0].set_title('Nombre de Clients (countplot)')
sns.boxplot(data=tips, x='day', y='total_bill', ax=axes[1])
axes[1].set_title('Distribution de l\'Addition (boxplot)')
sns.violinplot(data=tips, x='day', y='total_bill', ax=axes[2])
axes[2].set_title('Distribution et Densité (violinplot)')
plt.show()
Question C : "Comment deux variables numériques sont-elles liées ?"
Utilisez scatterplot pour un nuage de points, ou lmplot pour y ajouter automatiquement une droite de régression.
# Affiche la relation entre l'addition et le pourboire
sns.lmplot(
data=tips,
x='total_bill',
y='tip',
hue='smoker', # Sépare les données par couleur
height=6
)
plt.title("Relation Addition vs Pourboire")
plt.show()
Question D : "Comment puis-je avoir une vue d'ensemble de tout ?"
Utilisez pairplot pour afficher un nuage de points pour chaque paire de variables et un histogramme pour chaque variable. C'est l'outil parfait pour une première exploration rapide.
# Crée une grille de graphiques montrant toutes les relations deux à deux
sns.pairplot(data=tips, hue='sex')
plt.show()
3.4 Personnaliser ses Graphiques Seaborn
Puisque Seaborn utilise Matplotlib en coulisses, vous pouvez toujours utiliser l'interface orientée objet de Matplotlib pour peaufiner vos graphiques.
# 1. On crée notre toile et notre zone de dessin avec Matplotlib
fig, ax = plt.subplots(figsize=(10, 6))
# 2. On dit à Seaborn de dessiner sur NOTRE zone de dessin ('ax')
sns.histplot(data=tips, x='total_bill', kde=True, ax=ax)
# 3. On utilise les méthodes de Matplotlib pour personnaliser le tout
ax.set_title("Distribution Personnalisée de l'Addition", fontsize=18)
ax.set_xlabel("Montant de l'Addition ($)")
ax.set_ylabel("Fréquence")
plt.show()