Analyse de Données avec Python

Classe B3 ASO 2025-2026

Module 3

Pandas - Le Couteau Suisse de l'Analyse de Données

Maîtriser les bases de Pandas : ses structures fondamentales (DataFrame et Series) et les opérations de sélection et de filtrage.

3.1. Pourquoi Pandas est-il Indispensable ?

Les données du monde réel sont rarement de simples grilles de nombres. Elles sont "désordonnées" :

Pandas est la bibliothèque conçue spécifiquement pour nettoyer, manipuler et analyser ce type de données tabulaires. Imaginez-le comme une version programmable et surpuissante d'Excel.

3.2. Les Structures Fondamentales : DataFrame et Series

Pandas repose sur deux objets principaux :

DataFrame +--------------------------------+ | Index | 'Nom' | 'Âge' | (Colonnes / Series) +--------------------------------+ | 0 | 'Alice' | 25 | | 1 | 'Bob' | 30 | (Lignes) | 2 | 'Charlie'| 35 | +--------------------------------+

3.3. Étape 1 : Créer et Charger des Données

Pour des tests rapides, on peut créer un DataFrame à partir d'un dictionnaire Python, où les clés sont les noms des colonnes et les valeurs sont des listes.

import pandas as pd data = { 'Nom': ['Alice', 'Bob', 'Charlie', 'David'], 'Département': ['RH', 'IT', 'Marketing', 'IT'], 'Salaire': [50000, 75000, 60000, 82000] } df = pd.DataFrame(data)

La méthode la plus courante reste cependant le chargement à partir d'un fichier, notamment un fichier CSV, via la commande pd.read_csv('nom_du_fichier.csv').

3.4. Étape 2 : Inspecter et Explorer ses Données

Une fois votre DataFrame chargé, la première chose à faire est de l'inspecter pour comprendre sa structure et son contenu.

# Afficher les 5 premières lignes print("Aperçu du DataFrame (.head()):\n", df.head()) # Afficher les dimensions (lignes, colonnes) print("\nDimensions du DataFrame (.shape):", df.shape) # Obtenir un résumé technique : type de chaque colonne, valeurs non nulles... print("\nRésumé technique (.info()):") df.info() # Obtenir un résumé statistique pour les colonnes numériques print("\nRésumé statistique (.describe()):\n", df.describe())

3.5. Étape 3 : Sélectionner et Filtrer

C'est ici que la puissance de Pandas se révèle. Il s'agit d'isoler précisément les données qui vous intéressent.

Sélection de Colonnes

# Sélectionner UNE seule colonne (renvoie une Series) noms = df['Nom'] print("Type de df['Nom']:", type(noms)) # Sélectionner PLUSIEURS colonnes (renvoie un DataFrame) infos_salaire = df[['Nom', 'Salaire']] print("\nDataFrame avec Nom et Salaire:\n", infos_salaire)

Filtrage de Lignes par Condition

Cette technique se fait en créant une condition qui retourne une série de booléens (True/False), puis en utilisant cette série pour filtrer le DataFrame original.

# 1. Condition simple : trouver tous les employés du département IT condition_it = df['Département'] == 'IT' employes_it = df[condition_it] print("\nEmployés du département IT:\n", employes_it) # 2. Condition multiple : employés en IT QUI gagnent plus de 80000 # On utilise '&' pour ET, et '|' pour OU. Chaque condition est entre parenthèses. condition_salaire_eleve_it = (df['Département'] == 'IT') & (df['Salaire'] > 80000) gros_salaire_it = df[condition_salaire_eleve_it] print("\nEmployés IT avec un salaire > 80k:\n", gros_salaire_it)

3.6. Étape 4 : Ajouter et Modifier des Colonnes

L'analyse implique souvent de créer de nouvelles informations à partir de celles qui existent déjà.

# Ajouter une nouvelle colonne (ex: une prime de 10% du salaire) df['Prime'] = df['Salaire'] * 0.1 print("\nDataFrame avec la nouvelle colonne 'Prime':\n", df.head()) # Modifier une colonne existante # df['Salaire'] = df['Salaire'] + 5000

Exercices Pratiques

Exercice 1 : Création et Inspection d'un DataFrame

Créez un DataFrame Pandas à partir du dictionnaire Python suivant, qui représente des informations sur des produits. Ensuite, utilisez les commandes appropriées pour afficher les 3 premières lignes et obtenir un résumé technique du DataFrame.

donnees_produits = { 'Produit': ['Laptop', 'Souris', 'Clavier', 'Écran'], 'Prix': [1200, 25, 80, 350], 'EnStock': [True, False, True, True] }
Voir la solution
import pandas as pd donnees_produits = { 'Produit': ['Laptop', 'Souris', 'Clavier', 'Écran'], 'Prix': [1200, 25, 80, 350], 'EnStock': [True, False, True, True] } # Création du DataFrame df_produits = pd.DataFrame(donnees_produits) # Affichage des 3 premières lignes print("Aperçu des 3 premières lignes :\n", df_produits.head(3)) # Résumé technique print("\nRésumé technique :") df_produits.info()

Exercice 2 : Sélection et Ajout de Colonne

En utilisant le DataFrame de l'exercice précédent, sélectionnez uniquement les colonnes 'Produit' et 'Prix'. Ensuite, créez une nouvelle colonne 'Prix_TTC' qui contient le prix de chaque produit augmenté d'une TVA de 20%.

Voir la solution
import pandas as pd # (Reprise du code de l'exercice 1 pour créer df_produits) donnees_produits = { 'Produit': ['Laptop', 'Souris', 'Clavier', 'Écran'], 'Prix': [1200, 25, 80, 350], 'EnStock': [True, False, True, True] } df_produits = pd.DataFrame(donnees_produits) # Sélection des colonnes 'Produit' et 'Prix' produits_prix = df_produits[['Produit', 'Prix']] print("Sélection des colonnes :\n", produits_prix) # Ajout de la colonne 'Prix_TTC' df_produits['Prix_TTC'] = df_produits['Prix'] * 1.20 print("\nDataFrame avec prix TTC :\n", df_produits.head())

Exercice 3 : Filtrage par Conditions Multiples

À partir du DataFrame de produits (après ajout de la colonne 'Prix_TTC'), trouvez tous les produits qui sont en stock ET dont le prix TTC est inférieur à 100€.

Voir la solution
import pandas as pd # (Reprise du code des exercices précédents pour créer df_produits avec 'Prix_TTC') donnees_produits = { 'Produit': ['Laptop', 'Souris', 'Clavier', 'Écran'], 'Prix': [1200, 25, 80, 350], 'EnStock': [True, False, True, True] } df_produits = pd.DataFrame(donnees_produits) df_produits['Prix_TTC'] = df_produits['Prix'] * 1.20 # Définition des conditions condition_stock = df_produits['EnStock'] == True condition_prix = df_produits['Prix_TTC'] < 100 # Application du filtre combiné produits_filtres = df_produits[condition_stock & condition_prix] print("Produits en stock avec un prix TTC < 100€ :\n", produits_filtres)