Analyse de données avec Pandas

Author

Natacha Njongwa Yepnga

1 Analyse de Données avec Pandas

1.1 Introduction

Pandas est une bibliothèque open-source essentielle en Python pour la manipulation et l’analyse de données. Elle permet de travailler avec des ensembles de données sous forme de tableaux en offrant des outils puissants pour nettoyer, transformer et analyser les données efficacement.

Pourquoi utiliser Pandas ?

  • Facilité de manipulation : Pandas simplifie la manipulation des données tabulaires (issues de fichiers CSV, Excel, bases de données, etc.).
  • Performance : Pandas est optimisé pour gérer de grandes quantités de données bien plus rapidement que les structures classiques comme les listes Python.
  • Interopérabilité : Compatible avec NumPy, Matplotlib, SQL, et d’autres bibliothèques de data science.

Objectifs du cours : - Comprendre les structures de Pandas : Series et DataFrame. - Apprendre à charger, explorer et manipuler des données. - Effectuer des analyses et transformations avancées.


1.2 Installation et Importation

Si Pandas n’est pas encore installé, vous pouvez l’ajouter à votre environnement Python avec la commande suivante :

pip install pandas

Une fois installé, importez Pandas :

import pandas as pd

L’alias pd est une convention utilisée pour simplifier l’appel aux fonctions de la bibliothèque.


1.3 Création et Chargement des Données

Pandas offre plusieurs méthodes pour créer des jeux de données ou les charger depuis divers formats.

Création d’un DataFrame

Un DataFrame est une table composée de lignes et de colonnes, similaire à une feuille de calcul Excel ou une base de données SQL.

data = {
    'Nom': ['Alice', 'Bob', 'Charlie'],
    'Âge': [25, 30, 35],
    'Salaire': [50000, 60000, 70000]
}
df = pd.DataFrame(data)
print(df)

Pourquoi utiliser un DataFrame ? - Il permet de manipuler facilement des données hétérogènes. - Il est conçu pour des opérations analytiques rapides et intuitives.

Chargement des Données à partir de Fichiers

Pandas permet de lire des fichiers de différents formats : CSV, Excel, JSON, SQL, etc.

# Charger un fichier CSV
df = pd.read_csv("data.csv")

# Charger un fichier Excel
df = pd.read_excel("data.xlsx")

Exercice 1 : - Chargez un fichier CSV et affichez ses premières lignes. - Affichez le nombre total de lignes et de colonnes.


1.4 Sélection et Filtrage des Données

L’accès aux données est une étape essentielle pour manipuler efficacement un DataFrame.

Sélection des Colonnes

Vous pouvez sélectionner une colonne spécifique comme suit :

df['Nom']  # Retourne une Series

Pour sélectionner plusieurs colonnes :

df[['Nom', 'Salaire']]

Sélection des Lignes avec .loc et .iloc

Différence entre .loc et .iloc

  • .loc sélectionne les données par étiquette (nom des lignes ou colonnes).
  • .iloc sélectionne les données par indice numérique.

Exemples :

# Sélection par étiquette avec loc
df.loc[0]  # Sélectionne la première ligne

# Sélection par index numérique avec iloc
df.iloc[0]  # Sélectionne la première ligne

Sélection de plusieurs lignes :

df.loc[1:2]  # Sélectionne les lignes 1 à 2 (inclus)
df.iloc[0:2]  # Sélectionne les deux premières lignes

Exercice 2 : - Sélectionnez toutes les personnes ayant un salaire supérieur à 50 000. - Affichez uniquement les colonnes ‘Nom’ et ‘Âge’.


1.5 Transformation et Nettoyage des Données

Les jeux de données réels sont souvent incomplets ou mal structurés. Pandas offre des outils pour les corriger.

Gestion des Valeurs Manquantes

df.isnull().sum()  # Compter les valeurs manquantes
df.fillna(df.mean(), inplace=True)  # Remplacer les NaN par la moyenne

Pourquoi gérer les valeurs manquantes ? - Les valeurs manquantes peuvent fausser les résultats d’analyse. - Pandas permet de les remplacer ou les supprimer intelligemment.

Ajout et Suppression de Colonnes

df['Revenu Annuel'] = df['Salaire'] * 12  # Ajouter une colonne
df.drop(columns=['Âge'], inplace=True)  # Supprimer une colonne

Pourquoi manipuler les colonnes ? - Permet de calculer de nouvelles métriques. - Aide à nettoyer les données pour faciliter l’analyse.

Exercice 3 : - Remplacez les valeurs NaN par la médiane. - Ajoutez une colonne calculant le double du salaire.


1.6 Gestion des indices

Pandas permet de manipuler et personnaliser les indices d’un DataFrame pour optimiser l’analyse des données.

Modification de l’index

df.set_index('Nom', inplace=True)  # Définir la colonne "Nom" comme index
print(df)

Réinitialisation de l’index

df.reset_index(inplace=True)  # Restaurer l'index par défaut
print(df)

Pourquoi utiliser des indices personnalisés ? - Permet d’accéder plus rapidement aux lignes spécifiques. - Facilite les jointures et les regroupements de données.


1.7 Tri et ordonnancement des données

Pandas permet de trier les données selon différentes colonnes.

Trier selon une colonne

df.sort_values(by='Salaire', ascending=False)

Trier selon l’index

df.sort_index()

Pourquoi trier les données ?

  • Facilite l’interprétation des résultats.
  • Permet d’optimiser certaines analyses.

1.8 Optimisation et performances

Pandas permet d’améliorer les performances des manipulations de données.

Utilisation des types category

df['Nom'] = df['Nom'].astype('category')

Pourquoi utiliser category ?

  • Permet de réduire la mémoire utilisée.
  • Optimise les opérations de regroupement.

Chargement efficace de fichiers volumineux

pd.read_csv('data.csv', chunksize=1000)  # Charger par blocs de 1000 lignes

Pourquoi charger en morceaux ?

  • Évite de saturer la mémoire RAM.
  • Facilite le traitement de très gros fichiers.

1.9 Exportation des données

Pandas permet d’exporter facilement les résultats de l’analyse sous différents formats.

df.to_csv('output.csv', index=False)  # Sauvegarde en CSV
df.to_excel('output.xlsx', index=False)  # Sauvegarde en Excel
df.to_json('output.json')  # Sauvegarde en JSON

Pourquoi exporter les données ?

  • Facilite le partage et la réutilisation des résultats.
  • Permet de documenter le travail réalisé.

1.10 GroupBy et Agrégations

Pandas facilite le regroupement des données et leur analyse statistique.

Agrégation par GroupBy

df.groupby('Nom')['Salaire'].sum()

Pourquoi utiliser GroupBy ?

  • Permet d’analyser des tendances et de comparer des groupes.

Statistiques Avancées

df['Salaire'].mean()  # Moyenne
df['Salaire'].median()  # Médiane
df['Salaire'].std()  # Écart-type

Pourquoi les statistiques sont utiles ?

  • Aident à détecter les tendances et anomalies.

Exercice 4 :

  • Trouvez la moyenne des salaires par groupe.
  • Identifiez la personne ayant le salaire le plus élevé.

1.11 Jointures et Fusion de Données

Lorsqu’on travaille avec plusieurs ensembles de données, il est souvent nécessaire de les fusionner pour obtenir une vue d’ensemble cohérente. Pandas offre plusieurs méthodes pour combiner des DataFrames.

La méthode merge()

La méthode merge() permet de fusionner deux DataFrames sur une colonne commune.

df1 = pd.DataFrame({'ID': [1, 2, 3], 'Nom': ['Alice', 'Bob', 'Charlie']})
df2 = pd.DataFrame({'ID': [1, 2, 3], 'Salaire': [50000, 60000, 70000]})

fusion = pd.merge(df1, df2, on='ID')
print(fusion)

Types de Jointures

Pandas permet plusieurs types de jointures similaires aux bases de données SQL :

  • Inner Join (Intersection) : Ne garde que les valeurs communes aux deux DataFrames.
  • Left Join (Jointure à gauche) : Conserve toutes les lignes du premier DataFrame et ajoute les correspondances du second.
  • Right Join (Jointure à droite) : Conserve toutes les lignes du second DataFrame et ajoute les correspondances du premier.
  • Outer Join (Jointure complète) : Conserve toutes les données des deux DataFrames, même celles sans correspondance.
# Inner Join (par défaut)
pd.merge(df1, df2, on='ID', how='inner')

# Left Join
pd.merge(df1, df2, on='ID', how='left')

# Right Join
pd.merge(df1, df2, on='ID', how='right')

# Outer Join
pd.merge(df1, df2, on='ID', how='outer')

Concaténation de DataFrames

Parfois, il est nécessaire de concaténer des DataFrames, c’est-à-dire les empiler verticalement ou horizontalement.

df3 = pd.DataFrame({'ID': [4, 5], 'Nom': ['David', 'Emma']})
concat_vertical = pd.concat([df1, df3], ignore_index=True)
print(concat_vertical)

Pourquoi utiliser concat() ?

  • Utile lorsqu’on dispose de plusieurs fichiers contenant des données similaires et qu’on souhaite les regrouper.
  • Permet de fusionner facilement des ensembles de données de manière efficace.

Jointure Multi-index

Dans certains cas, la fusion se fait sur plusieurs colonnes :

df1 = pd.DataFrame({'ID': [1, 2, 3], 'Nom': ['Alice', 'Bob', 'Charlie'], 'Ville': ['Paris', 'Lyon', 'Marseille']})
df2 = pd.DataFrame({'ID': [1, 2, 3], 'Ville': ['Paris', 'Lyon', 'Marseille'], 'Salaire': [50000, 60000, 70000]})

fusion_multi = pd.merge(df1, df2, on=['ID', 'Ville'])
print(fusion_multi)

Exercice 5 :

  • Créez deux DataFrames et appliquez différents types de jointures.
  • Testez la concaténation avec des DataFrames ayant des colonnes différentes.

1.12 Conclusion

Ce cours vous a permis d’apprendre à :

  • Charger et manipuler des ensembles de données.
  • Effectuer des analyses exploratoires et des transformations.
  • Nettoyer les données et appliquer des techniques avancées.
  • Fusionner et joindre plusieurs ensembles de données pour une analyse plus complète.