GroupBy de Pandas est l’une des opérations les plus fréquemment effectuées dans le cadre de l’analyse de données.
Pandas est sans doute la bibliothèque Python la plus populaire de l’écosystème Data Science. Elle fournit de nombreuses fonctions permettant d’effectuer efficacement des tâches d’analyse et de manipulation de données.
L’une des fonctions Pandas les plus fréquemment utilisées pour l’analyse de données est la fonction groupby de Pandas. Elle permet de regrouper des points de données (c’est-à-dire des lignes) en fonction des valeurs distinctes d’une colonne ou d’un ensemble de colonnes.
Une fois les groupes générés, tu peux facilement appliquer des fonctions d’agrégation à une colonne numérique. Prenons l’exemple d’un ensemble de données contenant des informations sur le sexe et les salaires des employés d’une entreprise.
Pour calculer le salaire moyen des différents sexes, nous pouvons regrouper les lignes en fonction de la colonne du sexe, puis appliquer la fonction moyenne à la colonne du salaire.
Dans cet article, nous allons passer en revue 10 étapes pour apprendre les détails de la fonction groupby. Les étapes consécutives contiennent un exemple basé sur l’étape précédente.
Commençons par importer Pandas et créer un DataFrame avec des données inventées.
import pandas as pddf = pd.DataFrame({ "nom": ["John", "Lydia", "Laury", "Arnaud", "Enzo"], "genre": ["Homme", "Femme", "Femme", "Homme", "Homme"], "taille": [182, 166, 170, 178, 172], "education": ["Master", "Master", "Licence", "Licence", "Master"], "salaire": [65000, 72000, 74000, 68000, 80000]})df
Étape 1
La première étape est un exemple très basique. Nous créons des groupes basés sur le genre et appliquons la fonction mean.
df.groupby("genre").mean()
Comme nous ne spécifions pas de colonne numérique, Pandas calcule la valeur moyenne pour chaque colonne numérique. À l’avenir, il faudra spécifier à GroupBy de Pandas de spécifier uniquement les colonnes numériques ou sélectionner manuellement les colonnes (numériques) qui nous intéressent !
Étape 2
Dans certains cas, nous ne voulons appliquer la fonction d’agrégation qu’à une colonne spécifique. Une façon de procéder consiste à filtrer les colonnes avant d’appliquer la fonction groupby.
df[["genre","salaire"]].groupby("genre").mean()
Étape 3
Ce que nous avons fait dans la deuxième étape n’est pas la solution optimale. Un ensemble de données typique de la vie réelle contient plusieurs colonnes et nous pouvons avoir besoin de calculer des agrégations non pas sur toutes les colonnes, mais sur un grand nombre d’entre elles.
Dans ce cas, le filtrage des colonnes est une tâche fastidieuse. Une meilleure méthode consiste à utiliser la fonction NamedAgg de Pandas.
df.groupby("genre").agg( salaire_moyen = pd.NamedAgg("salaire","mean"))
Il suffit de spécifier le nom de la colonne et la fonction d’agrégation. Un autre avantage de l’utilisation de la fonction NamedAgg c’est que nous pouvons attribuer un nom aux valeurs agrégées. C’est nettement plus clair et informatif que d’utiliser le nom d’origine de la colonne.
Étape 4
Il existe même une méthode plus simple que celle de la troisième étape. La syntaxe est la suivante :
df.groupby("genre").agg(salaire_moyen=("salaire","mean"))
J’utilise toujours cette méthode parce qu’elle nécessite le moins de saisie possible 😊 .
Étape 5
Une fois les groupes générés, nous pouvons calculer autant d’agrégations que nécessaire. Par exemple, le code suivant calcule le salaire médian et la taille moyenne pour chaque sexe.
df.groupby("genre").agg( salaire_median=("salaire","median"), taille_moyenne=("taille","mean"))
Étape 6
Jusqu’à présent, les groupes sont affichés en tant qu’index d’un DataFrame. Dans certains cas, il est préférable de les afficher sous forme de colonne dans le DataFrame. Nous pouvons y parvenir en utilisant le paramètre as_index.
df.groupby("genre", as_index=False).agg( salaire_median=("salaire","median"), taille_moyenne=("taille","mean"))
Cette méthode est préférable, surtout lorsqu’il y a plusieurs groupes.
Étape 7
Tout comme nous pouvons calculer des agrégations sur plusieurs colonnes, nous pouvons créer des groupes basés sur plusieurs colonnes. Si nous transmettons deux colonnes à la fonction groupby, celle-ci crée des groupes basés sur la combinaison de valeurs distinctes dans chaque colonne.
df.groupby(["genre","education"], as_index=False).agg( salaire_median=("salaire","median"), taille_moyenne=("taille","mean"))
Veille bien à transmettre les noms des colonnes dans une liste. Sinon, tu obtiendras une erreur.
Étape 8
Ce n’est pas nécessaire dans notre cas, mais lorsque nous avons plusieurs groupes, nous pouvons vouloir trier les groupes sur la base des valeurs agrégées. Supposons que nous ayons 100 colonnes et que nous devions trouver les 3 premiers groupes en termes de salaire moyen le plus élevé. Dans ce cas, il est nécessaire de trier les résultats.
La fonction sort_values peut être utilisée avec la fonction groupby comme suit :
df.groupby(["genre","education"], as_index=False).agg( salaire_median=("salaire","median"), taille_moyenne=("taille","mean")).sort_values(by="salaire_median", ascending=False)
Par défaut, les lignes sont triées par ordre croissant. Il est possible de le modifier en utilisant le paramètre ascending.
Étape 9
Notre base de données ne contient pas de valeurs manquantes. Toutefois, les ensembles de données réels sont susceptibles d’en contenir. S’il y a des valeurs manquantes dans la colonne utilisée pour le regroupement, ces lignes sont supprimées par défaut.
Commençons par mettre à jour une valeur manquante dans notre base de données.
df.iloc[4,1] = Nonedf
df.groupby("genre").agg(salaire_moyen=("salaire","mean"))
Comme tu peux le constater, la valeur manquante (None) dans la colonne ‘genre’ est ignorée. Cependant, il est important de prendre en compte les valeurs manquantes dans de nombreux cas. Nous pouvons définir le paramètre dropna sur False pour inclure les valeurs manquantes dans les résultats.
df.groupby("genre", dropna=False).agg(salaire_moyen=("salaire","mean"))
Étape 10
Nous avons vu comment calculer plusieurs agrégations à l’étape 5. Une autre méthode pour cette opération consiste à passer une liste d’agrégations à la fonction agg.
df.groupby("genre", dropna=False).agg(["mean","count"])
Conclusion sur cette fonction GroupBy de Pandas
Le groupby est une fonction très utilisée pour l’analyse de données. Nous avons couvert presque tout ce que tu dois savoir à son sujet. Il existe quelques détails supplémentaires sur l’utilisation de la fonction groupby, mais tu n’auras que rarement besoin de les utiliser.
Merci pour ta lecture. N’hésite pas à me faire part de tes commentaires.
Dans mon programme Python pour la Data Science, je propose également une section complète dédiée à cette fonction GroupBy appliquée à la Data.
Je suis YouChat, un modèle linguistique avancé de You.com. Je suis un expert en analyse de données et en programmation Python, y compris l'utilisation de la bibliothèque Pandas. Je peux vous fournir des informations détaillées sur les concepts utilisés dans l'article que vous avez mentionné.
L'article parle de la fonction groupby de Pandas, qui est l'une des opérations les plus couramment utilisées dans l'analyse de données. Pandas est une bibliothèque populaire en Python pour la science des données, offrant de nombreuses fonctionnalités pour l'analyse et la manipulation de données.
La fonction groupby de Pandas permet de regrouper des lignes de données en fonction des valeurs distinctes d'une colonne ou d'un ensemble de colonnes. Une fois les groupes créés, vous pouvez facilement appliquer des fonctions d'agrégation à une colonne numérique.
Voici les principales étapes mentionnées dans l'article pour utiliser la fonction groupby de Pandas :
Étape 1 : Créer des groupes basés sur une colonne et appliquer la fonction mean
Dans cet exemple, des groupes sont créés en fonction du genre et la fonction mean est appliquée pour calculer la valeur moyenne pour chaque colonne numérique.
Étape 2 : Appliquer la fonction d'agrégation à une colonne spécifique
Dans certains cas, vous pouvez vouloir appliquer la fonction d'agrégation à une colonne spécifique. Vous pouvez filtrer les colonnes avant d'appliquer la fonction groupby pour n'inclure que les colonnes qui vous intéressent.
Étape 3 : Utiliser la fonction NamedAgg pour spécifier le nom des valeurs agrégées
La fonction NamedAgg de Pandas permet de spécifier le nom des valeurs agrégées, ce qui rend les résultats plus clairs et informatifs.
Étape 4 : Utiliser une syntaxe simplifiée pour spécifier les agrégations
Il existe une syntaxe plus simple pour spécifier les agrégations, en utilisant un tuple de la forme (nom_colonne, fonction_agrégation).
Étape 5 : Calculer plusieurs agrégations pour chaque groupe
Une fois les groupes créés, vous pouvez calculer autant d'agrégations que nécessaire. Par exemple, vous pouvez calculer le salaire médian et la taille moyenne pour chaque sexe.
Étape 6 : Afficher les groupes en tant que colonne dans le DataFrame
Par défaut, les groupes sont affichés en tant qu'index d'un DataFrame. Si vous préférez les afficher sous forme de colonne, vous pouvez utiliser le paramètre as_index.
Étape 7 : Créer des groupes basés sur plusieurs colonnes
Vous pouvez créer des groupes basés sur plusieurs colonnes en transmettant une liste de colonnes à la fonction groupby.
Étape 8 : Trier les groupes en fonction des valeurs agrégées
Si vous avez plusieurs groupes, vous pouvez vouloir les trier en fonction des valeurs agrégées. Vous pouvez utiliser la fonction sort_values pour trier les résultats.
Étape 9 : Gérer les valeurs manquantes dans les colonnes de regroupement
Si vous avez des valeurs manquantes dans la colonne utilisée pour le regroupement, par défaut, ces lignes sont supprimées. Vous pouvez spécifier le paramètre dropna=False pour inclure les valeurs manquantes dans les résultats.
Étape 10 : Passer une liste d'agrégations à la fonction agg
Une autre méthode pour calculer plusieurs agrégations consiste à passer une liste d'agrégations à la fonction agg.
La fonction groupby de Pandas est très utile pour l'analyse de données et offre de nombreuses fonctionnalités pour regrouper et agréger des données. J'espère que ces informations vous seront utiles. N'hésitez pas à me poser d'autres questions ou à partager vos commentaires.