Pandas est une bibliothèque d’analyse de données Python très puissante et polyvalente qui accélère les étapes de pré-traitement des projets de Data Science. Elle fournit de nombreuses fonctions et méthodes très utiles pour l’analyse de données. Voyons comment accélérer notre processus d’analyse de données grâce à ces quelques astuces simples.
Comme toujours, nous commençons par importer NumPy et Pandas :
import numpy as np import pandas as pd
Créons un exemple de DataFrame sur lequel travailler. Pandas est une bibliothèque polyvalente qui offre généralement plusieurs façons d’effectuer une tâche. Ainsi, il existe de nombreuses façons de créer un dataframe. Une méthode courante consiste à passer un dictionnaire qui comprend des colonnes sous forme de paires clé-valeur (key-value).
values = np.random.randint(10, size=10) years = np.arange(2013,2023) groups = ['A','A','B','A','B','B','C','A','C','C'] df = pd.DataFrame({'group':groups, 'year':years, 'value':values}) df
Nous avons également utilisé numpy pour créer des tableaux à utiliser comme valeurs dans les colonnes. np.arange renvoie une plage de valeurs dans l’intervalle spécifié. np.random.randint renvoie des valeurs entières aléatoires basées sur la plage et la taille spécifiées.
Calcul des sommes cumulées
Le dataframe contient des valeurs annuelles de 3 groupes différents. Il se peut que nous ne soyons intéressés que par les valeurs annuelles, mais dans certains cas, nous avons également besoin d’une somme cumulée. Pandas fournit une fonction facile à utiliser pour calculer la somme cumulée, à savoir cumsum.
df['cumsum'] = df['value'].cumsum() df
Nous avons créé une colonne nommée “cumsum” qui contient la somme cumulée des nombres dans la colonne des valeurs. Cependant, elle ne tient pas compte des groupes. Ce type de valeurs cumulées peut s’avérer inutile dans certains cas, car nous ne sommes pas en mesure de faire la distinction entre les groupes. Ne t’inquiète pas ! Il existe une solution très simple et pratique à ce problème. Nous pouvons appliquer la fonction groupby.
Groupement des sommes cumulées
df['cumsum'] = df[['value','group']].groupby('group').cumsum() df
Nous avons d’abord appliqué la fonction groupby à la colonne “group”, puis la fonction cumsum. Les valeurs sont maintenant additionnées au sein de chaque groupe.
Tri des valeurs
Pour améliorer l’aspect du dataframe, nous pouvons trier les valeurs en fonction du groupe plutôt que de l’année afin de pouvoir séparer visuellement les groupes.
df.sort_values(by='group').reset_index()
Nous avons appliqué la fonction sort_values et réinitialisé l’index avec la fonction reset_index. Comme nous pouvons le voir dans le dataframe retourné, l’index d’origine est conservé en tant que colonne. Nous pouvons l’éliminer en fixant le paramètre drop de la fonction reset_index à True.
df = df.sort_values(by='group').reset_index(drop=True) df
C’est mieux maintenant !
Insertion d’une nouvelle colonne
Lorsque nous voulons ajouter une nouvelle colonne à un dataframe, elle est ajoutée à la fin par défaut. Cependant, pandas offre la possibilité d’ajouter la nouvelle colonne à n’importe quelle position en utilisant la fonction insert.
new = np.random.randint(5, size=10) df.insert(2, 'new_col', new) df
Nous avons spécifié la position en passant un index comme premier argument. Cette valeur doit être un entier. Les indices de colonne commencent à zéro, tout comme les indices de ligne. Le deuxième argument est le nom de la colonne et le troisième argument est l’objet qui contient les valeurs, qui peut être une série ou un objet de type tableau.
Suppression d’une colonne
Considérons que nous voulons supprimer une colonne d’un dataframe mais que nous voulons également conserver cette colonne en tant que série distincte. Une solution consiste à affecter la colonne à une série, puis à utiliser la fonction drop. Une méthode plus simple consiste à utiliser la fonction pop.
value = df.pop('value') df
En une ligne de code, nous supprimons la colonne des valeurs de la base de données et la stockons dans une série pandas.
Filtre d’un DataFrame
Il est parfois nécessaire de filtrer un dataframe en fonction d’une condition ou d’appliquer un masque pour obtenir certaines valeurs. La fonction query est un moyen simple de filtrer un dataframe. Je vais utiliser l’exemple de dataframe que nous avons utilisé. Commençons par réinsérer la colonne “value” :
df.insert(2, 'value', value) df
Il est très simple d’utiliser la fonction query qui ne requiert que la condition.
df.query('value < new_col')
Il renvoie les lignes dans lesquelles “value” est inférieur à “new_col”. Nous pouvons définir des conditions plus complexes et utiliser des opérateurs supplémentaires.
df.query('2*new_col > value')
Il est également possible de combiner plusieurs conditions en une seule requête.
df.query('2*new_col > value & cumsum < 15')
Fonctions d’agrégation
Il existe de nombreuses fonctions d’agrégation que nous pouvons utiliser pour calculer des statistiques de base sur des colonnes, telles que la moyenne, la somme, le décompte, etc. Nous pouvons appliquer chacune de ces fonctions à une colonne. Toutefois, dans certains cas, il peut être nécessaire de vérifier plusieurs types de statistiques. Par exemple, le décompte et la moyenne peuvent être importants dans certains cas. Au lieu d’appliquer les fonctions séparément, pandas propose une fonction agg pour appliquer plusieurs fonctions d’agrégation.
df[['group','value']].groupby('group').agg(['mean','count'])
Il est plus logique de voir à la fois la moyenne (mean) et le nombre d’observations (count). Nous pouvons facilement détecter les valeurs aberrantes qui ont des valeurs moyennes extrêmes mais un très faible nombre d’observations.
Je pense que le succès et la prévalence de Pandas viennent des fonctions polyvalentes, puissantes et faciles à utiliser pour manipuler et analyser les données. Il y a presque toujours plusieurs façons d’effectuer une tâche avec Pandas. Étant donné qu’une grande partie du temps passé sur un projet de Data Science est consacrée aux étapes de nettoyage et de prétraitement des données, Pandas est un atout précieux à avoir dans sa boîte à outils.
Pour aller plus loin, tu peux consulter mon article sur GroupBy de Pandas pour maîtriser cette fonction en 10 étapes.