import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns1 Introduction
Ce travail pratique permet d’apprendre à manipuler les données avec la librairie Pandas de Python.
1.1 Objectifs
À la fin de ce travail pratique, vous serez capable de:
- Charger et inspecter efficacement un jeu de données avec Pandas.
- Effectuer des sélections de colonnes de diverses manières pour isoler les variables d’intérêt.
- Appliquer des filtrages de lignes complexes pour cibler des sous-ensembles spécifiques d’observations.
- Gérer les valeurs manquantes (NaN) : identification, suppression et imputation.
- Renommer et réorganiser les colonnes pour une meilleure lisibilité et organisation.
- Maîtriser les opérations de groupement (
groupby) et d’agrégation (agg) pour résumer les données. - Créer de nouvelles colonnes (ingénierie de fonctionnalités simple) à partir de colonnes existantes.
- Comprendre et appliquer le concept de
pivot_tablepour des résumés tabulaires. - Exporter les données manipulées.
- Mettre en pratique ces compétences sur un cas d’étude concret avec le jeu de données “Palmer Penguins”.
1.2 Les Données

Ce jeu de données, collecté et rendu disponible par la Dr. Kristen Gorman, est une alternative moderne au jeu de données iris, souvent utilisé en introduction. Il contient des mesures pour 344 manchots de trois espèces différentes, observés sur trois îles de l’archipel Palmer, en Antarctique.
Les librairies à utiliser
Charger les données
# Charger les données
penguins = sns.load_dataset("penguins")
# Afficher les premières lignes du DataFrame
penguins.head()| species | island | bill_length_mm | bill_depth_mm | flipper_length_mm | body_mass_g | sex | |
|---|---|---|---|---|---|---|---|
| 0 | Adelie | Torgersen | 39.1 | 18.7 | 181.0 | 3750.0 | Male |
| 1 | Adelie | Torgersen | 39.5 | 17.4 | 186.0 | 3800.0 | Female |
| 2 | Adelie | Torgersen | 40.3 | 18.0 | 195.0 | 3250.0 | Female |
| 3 | Adelie | Torgersen | NaN | NaN | NaN | NaN | NaN |
| 4 | Adelie | Torgersen | 36.7 | 19.3 | 193.0 | 3450.0 | Female |
species: L’espèce du manchot (Adelie, Chinstrap, Gentoo).island: L’île où le manchot a été observé (Torgersen, Biscoe, Dream).bill_length_mm: Longueur du bec (en mm).bill_depth_mm: Hauteur du bec (en mm).flipper_length_mm: Longueur de l’aileron (en mm).body_mass_g: Masse corporelle (en g).sex: Le sexe du manchot.
- Les caractéristique
island,bill_length_mm,bill_depth_mm,flipper_length_mm, etbody_mass_gpermettent-elles de discriminer les espèces de penguins?
2 Données Manquantes
En général, dans la pratique, les jeux de données dont on dispose sont entâchés de données manquantes. Sous Python, le symbole qui indique les données manquantes et NaN.
Nombre de données manquantes par variables
# Nombre de données manquantes par variables
penguins.isna().sum(axis=0)Nombre de lignes avec au moins une donnée manquante
# Nombre de lignes avec au moins une donnée manquante
penguins.isna().any(axis=1).sum()- Le jeu de données contient \(344\) lignes dont \(11\) contiennent au moins une donnée manquante.
- On peut d’abord supprimer les lignes en question.
Supprimer les lignes avec au moins une donnée manquante
# Supprimer les lignes avec au moins une donnée manquante
penguins = penguins.dropna()
# Vérification
penguins.isna().any(axis=1).sum()Dimension des données à analyser
# Dimension des données à analyser
print(f"Dimension des données à analyser: {penguins.shape}")3 Sélection de Colonnes
Nous apprenons ici à sélectionner les colonnes.
3.1 Par noms
Une colonne
# Sélectionner les données de la colonne "species"
penguins["species"]
# Ou encore
penguins.speciesPlusieurs colonnes
# Sélectionner les données des colonnes "species" et "island"
penguins[["species", "island"]]3.2 Finissant par
penguins.iloc[:, penguins.columns.str.endswith("mm")]3.3 À l’aide de Filter
# Sélectionner les colonnes se terminent par "mm"
penguins.filter(regex="_mm", axis=1)
# Sélectionner les colonnes començant par "bill"
penguins.filter(regex="^bill_", axis=1)4 Filtrage de Lignes
4.1 Filtrage par valeur
# Filtrer les données de l'espèce "Adelie"
penguins[penguins["species"] == "Adelie"]
# Filtrer les données de l'espèce "Adelie" et de l'île "Torgersen"
penguins[(penguins["species"] == "Adelie") & (penguins["island"] == "Torgersen")]
# Filtrer les espèces autres que "Adelie"
penguins[penguins["species"] != "Adelie"]
# Filtrer les espèces ["Adelie", "Chinstrap"]
penguins[penguins["species"].isin(["Adelie", "Chinstrap"])]
# Filtrer les penguins ayant une hauteur du bec comprise entre 15 et 17
## Solution 1
penguins[(penguins["bill_depth_mm"] >= 15) & (penguins["bill_depth_mm"] <= 17)]
## Solution 2
penguins[penguins["bill_depth_mm"].between(15, 17)]4.2 Filtrage par requête
# Filtrer les données de l'espèce "Adelie"
penguins.query("species == 'Adelie'")
# Filtrer les penguins ayant une hauteur du bec comprise entre 15 et 17
penguins.query("bill_depth_mm >= 15 and bill_depth_mm <= 17")5 Renommer
# Renommer la colonne "species"
penguins = penguins.rename(columns={"species": "Espece"})Exercise 1 (Renommer des colonnes) Renommer les colonnes comme suit: - island -> Ile - bill_length_mm -> LongueurBec_mm - bill_depth_mm -> HauteurBec_mm - flipper_length_mm -> LongueurAileron_mm - body_mass_g -> MasseCorporelle_g - sex -> Sexe
6 Grouper et Aggréger
6.1 Introduction à groupby
L’opération groupby est l’une des fonctionnalités les plus puissantes de Pandas pour l’analyse de données. Elle est basée sur le paradigme "Split-Apply-Combine" (Diviser-Appliquer-Combiner), qui permet de répondre à une multitude de questions analytiques en trois étapes :
- Split (Diviser) : Le jeu de données est divisé en groupes en fonction des valeurs d’une ou plusieurs colonnes (par exemple, un groupe pour chaque
speciesou chaqueisland). - Apply (Appliquer) : Une fonction (comme
sum(),mean(),count(), etc.) est appliquée à chaque groupe de manière indépendante. - Combine (Combiner) : Les résultats de ces applications sont rassemblés dans une nouvelle structure de données (généralement un DataFrame ou une Series).
Maîtriser groupby est essentiel pour passer de la simple manipulation de données à des résumés et des analyses complexes.
6.2 Aggrégation Simples
La tête du jeu de données
penguins.head()Longueur moyenne des becs par espèce
## Solution 1
penguins.groupby("Espece")["LongueurBec_mm"].mean()
## Solution 2
penguins.groupby("Espece").agg({"LongueurBec_mm": "mean"})
## Solution 3 avec mise à jour du nom de la colonne
penguins.groupby("Espece").agg(MoyenneLongueurBec_mm=("LongueurBec_mm", "mean"))Exercise 2 (Grouper et Aggréger)
- Déterminer le nombre de penguins par espèce.
- Déterminer le nombre de penguins par île.
- Calculer la masse corporelle moyenne par espèce.
- Calculer les statistiques univariées (min, max, moyenne, médiane, écart-type) pour la masse corporelle par espèce.
# 1. Déterminer le nombre de penguins par espèce.
penguins.groupby("Espece").agg(NombrePenguins=("Espece", "count"))
# 2. Déterminer le nombre de penguins par île.
penguins.groupby("Ile").agg(NombrePenguins=("Ile", "count"))
# 3. Calculer la masse corporelle moyenne par espèce.
penguins.groupby("Espece").agg(MasseCorporelleMoyenne=("MasseCorporelle_g", "mean"))
# 4.Statistiques descriptives univariées de la masse corporelle
penguins.groupby("Espece").agg(
MinMasseCorporelle=("MasseCorporelle_g", "min"),
MaxMasseCorporelle=("MasseCorporelle_g", "max"),
MoyenneMasseCorporelle=("MasseCorporelle_g", "mean"),
MedianeMasseCorporelle=("MasseCorporelle_g", "median"),
EcartTypeMasseCorporelle=("MasseCorporelle_g", "std")
)6.3 Fonctions d’Agrrégation Personnalisées
Nous souhaitons calculer l’étendu et l’écart inter-quartiles des variables quantitatives relativement aux modalités des facteurs.
Fonctions d’aggrégation personnalisées
## Fonction `etendu`
def etendu(x: pd.Series):
return x.max() - x.min()
## Fonction `IQR` = Intervalle Inter-Quartile
def IQR(x: pd.Series):
return x.quantile(0.75) - x.quantile(0.25)Etendu et IQR par de la longueur des becs par espèce
penguins.groupby("Espece").agg(
EtenduLongueurBec_mm=("LongueurBec_mm", etendu),
IQRLongueurBec_mm=("LongueurBec_mm", IQR)
)7 Création de Nouvelles Caractéristiques
7.1 Opérations Arithmétique entre Colonnes
Cauclons le ratio LongueurBec_mm par MasseCorporelle_g
# Solution 1
penguins["RatioLongueurBec_MasseCorporelle"] = penguins["LongueurBec_mm"] / penguins["MasseCorporelle_g"]
# Solution 2
penguins.eval("RatioLongueurBec_MasseCorporelle = LongueurBec_mm / MasseCorporelle_g")7.2 Création de Variables Catégorielles à partir de données quantitatives
Todo
8 Conclusion
Au terme de ce travail pratique, vous avez parcouru les étapes essentielles de la manipulation de données avec la bibliothèque Pandas. En partant du chargement et du nettoyage d’un jeu de données réel, vous avez appris à sélectionner, filtrer, et transformer les données pour les préparer à l’analyse.
Vous avez notamment maîtrisé des opérations puissantes comme groupby pour agréger les informations et rename pour améliorer la lisibilité de vos données. La création de nouvelles caractéristiques vous a également ouvert la voie à l’ingénierie de fonctionnalités, une étape cruciale dans de nombreux projets de data science.
Ces compétences constituent le socle de toute analyse exploratoire. Elles permettent de passer de données brutes à des informations structurées et pertinentes, prêtes à être visualisées ou utilisées pour construire des modèles prédictifs. Le travail effectué sur le jeu de données des manchots de Palmer vous a permis de mieux comprendre leurs caractéristiques distinctives par espèce et par île.
La prochaine étape logique serait d’utiliser ces données préparées pour la visualisation de données afin de découvrir des tendances visuelles, ou de vous lancer dans le machine learning pour construire un modèle capable de prédire l’espèce d’un manchot à partir de ses caractéristiques.