Il est impossible d’obtenir des informations significatives sans une agrégation correcte des données, n’est-ce pas ? En fait, c’est la raison pour laquelle nous utilisons beaucoup les tableaux croisés dynamiques dans Excel. On peut donc dire qu’il s’agit d’une étape essentielle de l’analyse de données, qui consiste souvent à appliquer des fonctions d’agrégation telles que la somme, la moyenne, le décompte, etc. à des groupes de données.
Regroupement des données #
groupby
avec une seule colonne : Cette méthode te permet de regrouper des données sur la base d’une ou plusieurs colonnes. Tu peux la considérer comme une version puissante de l’instructionGROUP BY
de SQL.
Ensuite, tu peux utiliser les données groupées et choisir la colonne entre laquelle vous souhaitez comparer ces données groupées, puis sélectionner la fonction d’agrégation (mean, sum, max, min, etc.).
Lorsque tu appliques une fonction d’agrégation à des données groupées sans spécifier de colonne, elle sera appliquée à toutes les colonnes numériques du DataFrame.
Par exemple, supposons que tu aies des données sur les ventes et que tu souhaites les regrouper par la colonne “Category” et calculer le total des ventes pour chaque catégorie.
import pandas as pd # Exemple de DataFrame data = {'Category': ['Electronics', 'Clothing', 'Electronics', 'Clothing'], 'Sales': [1000, 500, 800, 500]} df = pd.DataFrame(data) # Groupement par 'Category' grouped_data = df.groupby('Category') # Choisir la colonne des ventes pour comparer avec les données groupées et utiliser la fonction sum # Cela donne le total des ventes pour chaque catégorie. total_sales = grouped_data['Sales'].sum() print(total_sales) -------------------------------------------------------------------------- output: Category Clothing 1000 Electronics 1800 Name: Sales, dtype: int64
groupby
avec plusieurs colonnes : Tu peux également effectuer des regroupements sur plusieurs colonnes en passant une liste de colonnes par lesquelles tu souhaites effectuer des regroupements.
Par exemple, supposons que tu disposes d’un ensemble de données contenant des informations sur les étudiants, notamment leurs notes dans différentes matières, et que tu souhaites regrouper les données en fonction des colonnes « Class » et « Gender », puis calculer des statistiques telles que la moyenne, le minimum et le maximum pour les notes obtenues dans la matière mathématique.
import pandas as pd # Exemple de DataFrame data = {'Class': ['A', 'B', 'A', 'B', 'A', 'B'], 'Gender': ['Male', 'Male', 'Female', 'Female', 'Male', 'Female'], 'Math_Score': [85, 92, 78, 89, 90, 86], 'English_Score': [88, 94, 80, 92, 92, 88]} df = pd.DataFrame(data) # Groupement par 'Class' et 'Gender' et calcul de statistiques grouped_data = df.groupby(['Class', 'Gender']) # Calculer la moyenne pour Math_score agg_results = grouped_data['Math_Score'].mean() print(agg_results) -------------------------------------------------------------------- output: Math_Score Class Gender A Female 86.000000 Male 87.500000 B Female 87.000000 Male 92.000000
- Appliquer la fonction d’agrégation à des données groupées sans spécifier de colonne :
Dans ce cas, la fonction sera appliquée à toutes les colonnes numériques du DataFrame groupé.
import pandas as pd # Exemple de DataFrame data = {'Class': ['A', 'B', 'A', 'B', 'A', 'B'], 'Gender': ['Male', 'Male', 'Female', 'Female', 'Male', 'Female'], 'Math_Score': [85, 92, 78, 89, 90, 86], 'English_Score': [88, 94, 80, 92, 92, 88]} df = pd.DataFrame(data) # Groupement par 'Class' et 'Gender' grouped_data = df.groupby(['Class', 'Gender']) # Application de la fonction d'agrégation moyenne à toutes les colonnes numériques aggregated_data = grouped_data.mean() print(aggregated_data) ---------------------------------------------------------------------- output: Math_Score English_Score Class Gender A Female 82.000000 84.000000 Male 87.500000 90.000000 B Female 87.500000 90.000000 Male 92.000000 94.000000
Fonctions d’agrégation #
Les fonctions d’agrégation sont essentielles pour résumer les données au sein des groupes. Les fonctions d’agrégation courantes sont sum()
, max()
, min()
, mean()
, median()
, count()
, agg()
– ceci te permet d’appliquer des fonctions d’agrégation personnalisées.
Par exemple, si tu souhaites appliquer plusieurs fonctions d’agrégation (mean, min et max) en une seule fois pour la note de mathématiques, tu dois vérifier ces fonctions d’agrégation. Tu souhaites également vérifier ces multiples fonctions d’agrégation pour deux matières (en particulier quelques colonnes).
import pandas as pd # Exemple de DataFrame data = {'Class': ['A', 'B', 'A', 'B', 'A', 'B'], 'Gender': ['Male', 'Male', 'Female', 'Female', 'Male', 'Female'], 'Math_Score': [85, 92, 78, 89, 90, 86], 'English_Score': [88, 94, 80, 92, 92, 88], 'Physics_Score': [78, 90, 85, 92, 88, 84]} df = pd.DataFrame(data) # Groupement par 'Class' et 'Gender' et calcul de statistiques grouped_data = df.groupby(['Class', 'Gender']) # Calculer la moyenne, le minimum et le maximum pour Math_score agg_results = grouped_data.Math_Score.agg(['mean', 'min', 'max']) print(agg_results) # Application de fonctions d'agrégation à 'Math_Score' eet 'Physics_Score' aggregated_data = grouped_data.agg({ 'Math_Score': ['mean', 'min', 'max'], 'Physics_Score': ['mean', 'min', 'max'] }) print(aggregated_data) ---------------------------------------------------------------------- output: mean min max Class Gender A Female 78.0 78 78 Male 87.5 85 90 B Female 87.5 86 89 Male 92.0 92 92 ----------------------------------------------------------------------- Math_Score Physics_Score mean min max mean min max Class Gender A Female 82.000000 78 86 81.500000 78 85 Male 87.500000 85 90 83.000000 78 88 B Female 87.500000 86 89 88.000000 85 92 Male 92.000000 92 92 91.000000 88 92
Pivot Tables et Cross-Tabulations #
Si tu as travaillé avec Excel, tu dois déjà savoir à quel point ils sont efficaces. Ils offrent un moyen structuré d’organiser et d’analyser des données sous différents angles.
- Nous pouvons utiliser
pd.pivot_table
pour créer des tableaux croisés dynamiques. - Les tableaux croisés sont une autre méthode d’agrégation des données, en particulier lorsqu’il s’agit de variables catégorielles, à l’aide de
pd.crosstab
.
import pandas as pd # Exemple de DataFrame avec des données de vente data = {'Category': ['Electronics', 'Clothing', 'Electronics', 'Clothing'], 'Region': ['North', 'South', 'North', 'South'], 'Sales': [1000, 500, 800, 750], 'Profit': [150, 50, 120, 100]} df = pd.DataFrame(data) # Pivot Table : Somme des ventes par catégorie et par région pivot_table = pd.pivot_table(df, index='Category', columns='Region', values='Sales', aggfunc='sum') # Cross-Tabulation : Nombre de catégories par région cross_tab = pd.crosstab(df['Category'], df['Region']) print("Pivot Table:") print(pivot_table) print("\nCross-Tabulation:") print(cross_tab) ---------------------------------------------------------------------- Pivot Table: Region North South Category Clothing NaN 1250 Electronics 1800 NaN Cross-Tabulation: Region North South Category Clothing 0 2 Electronics 2 0