Manipulez vos données en Python avec Pandas
Rédaction AZYAT Abdelilah, 23/01/2023 (Partie 1)
Pandas est l’un des packages Python de science des données les plus populaires et il est l’outil standard pour travailler avec des données tabulaires.
C’est un package dédié pour la manipulation et l’analyse exploratoire de données. Plus de 100 millions de téléchargements par mois.
Les fonctions de manipulation de données facilitant l’accessibilité pour agréger, analyser et nettoyer des données.
C’est pour cela il est utilisé dans plusieurs domaines dont on peut citer : le marketing, finance, commercial, universitaire, économie, statistiques, publicité, analyse Web, neurosciences…
Sommaire
- Pourquoi utiliser Pandas Python ?
- Installation de Pandas
- Structures de données avec Pandas
- Series
- Création d’un objet Series grâce à un dictionnaire
- Création d’un objet Series grâce à un ndarray
- Accéder aux données d’une série,
Dataframe
Création d’une Dataframe à partir d’un dictionnaire de séries
Accéder aux données dans un objet Dataframe
- Series
Travailler avec des fichiers (cas de type csv)
Visualiser des données avec Matplotlib+Pandas
Pandas permet de manipuler les données en format tabulaire. C’est-à-dire des données sous forme de lignes et de colonnes, également appelées DataFrames. Intuitivement, vous pouvez considérer un DataFrame comme une feuille Excel.
Parmi les fonctionnalités de Pandas inclut des transformations de données, comme le tri des lignes et la prise de sous-ensembles, pour calculer des statistiques récapitulatives telles que la moyenne, remodeler les DataFrames et joindre les DataFrames ensemble. Il fonctionne bien avec d’autres packages de science des données Python populaires, souvent appelés l’écosystème PyData, y compris ;
- NumPy: pour le calcul numérique.
- Matplotlib , Seaborn , Plotly et autres packages de visualisation de données.
- scikit-learn: pour l’apprentissage automatique.
Pourquoi utiliser Pandas ?
Il peut être utilisé pour :
- Importer des données à partir de bases de données, de feuilles de calcul, de fichiers pour lire et écrire dans différents formats (.csv, .txt, .xlsx, .sql, .hdf5, etc…) ;
- Structurer des donnée sous forme des Dataframes permettant un accès rapide et efficace pour la manipulation des données avec indexation intégrée ;
- Comprendre les techniques par une documentation très détaillée et facile à lire ;
- Nettoyer les données, par exemple, en traitant les valeurs manquantes.
- Ranger les données en remodelant leur structure dans un format approprié pour l’analyse.
- Agréger les données en calculant des valeurs statistiques telles que la moyenne des colonnes, la corrélation entre elles, etc.
- Gagner une flexibilité pour traiter des données de type hétérogènes ou manquantes ;
- Visualiser des données et découvrir des informations pertinentes.
D’autre part, Pandas contient également des fonctionnalités d’analyse de séries chronologiques et d’analyse de données textuelles.
Comment installer Pandas ?
L’installation de pandas est simple ; utilisez simplement la pip install commande dans votre terminal.
pip install pandas
Importer des données avec pandas :
Pour commencer à travailler avec pandas, importez le package pandas Python comme indiqué ci-dessous. Lors de l’importation de pandas, l’alias le plus courant pour les pandas est pd.
import pandas as pd
Structures de données avec Pandas
Les Series et les Dataframe sont deux structures de données fournit par Pandas pour manipuler les données.
Les series
Une série est un tableau étiqueté unidimensionnel pouvant contenir tout type de données (entiers, chaînes de caractères, nombres à virgule flottante, listes, dictionnaires, tuples, objets, etc.). Les étiquettes des axes représentent l’index de la série. Pour être plus simple, une série n’est rien d’autre qu’une colonne dans une feuille Excel. La méthode de base pour créer une série est la suivante :
serie = pd.Series(data, index=index1, index2,…)
L’argument data peut être un dictionnaire, un ndarray (tableau multi-dimensionnel de NumPy) ou même une valeur scalaire.
Exemple 1 :
import pandas as pd
# création d’un dictionnaire
note_matiere = {
« Electronique »:10, « math »:12, « programmation »:17
}
print(note_matiere)
# création de Series avec dictionnaire
serie = pd.Series(note_matiere)
print(serie)
print(« les indices: », serie.index) # affiche les index de serie
print(« serie.array: », serie.array,« \n« ) # afficher les valeurs de la serie
print(« Bonne note est: {} ».format(serie[« programmation »]))
x=« gestion »in serie # tester si gestion existe dans serie
print(x)
Le résultat de ce code est le suivant :
{‘Electronique’: 10, ‘math’: 12, ‘programmation’: 17}
Electronique 10
math 12
programmation 17
dtype: int64
les indices: Index([‘Electronique’, ‘math’, ‘programmation’], dtype=’object’)
serie.array: <PandasArray>
[10, 12, 17]
Length: 3, dtype: int64
Bonne note est: 17
False
Remarque :
Avec un dictionnaire, une série peut avoir un index de taille différente de la taille du dictionnaire.
Exemple 2 :
# Exemple d’une serie ayant index de taille différente à celle du dictionnaire
note_matiere = {« Electronique »:10, « Math »:12, « Programmation »:17}
serie = pd.Series(note_matiere, index=[« Electronique », « Math », « Algorithméque », « Anglais » ])
print(serie)
Résultat :
Electronique 10.0
Math 12.0
Algorithméque NaN
Anglais NaN
Création d’un objet Series grâce à un ndarray
Dans le cas où la data est de type ndarray, l’index passé en paramètre doit être de la même longueur que data. Si aucun index n’est spécifié, un index sera créé avec les valeurs [0, …, len(data) – 1].
Exemple 3 : création d’un objet Series représentant le nombre d’habitants de trois provinces comme index:
# Exemple : serie avec ndarray
import numpy as np
serie1= pd.Series(np.array([43328, 62049, 58720]), index=[« Al Hoceima « , ‘Chefchaouen’, « Larache « ])
print(« serie1=\n« ,serie1)
Vous allez obtenir le résultat suivant en exécutant le code ci-dessus :
serie1=
Al Hoceima 43328
Chefchaouen 62049
Larache 58720
Accéder aux données d’une série
Avec Pandas, il y a trois méthodes d’accès pour sélectionner les données d’un objet Series:
- L’opérateur d’indexation [ ] ;
- Les méthodes .loc() et .iloc() ;
Il faut savoir qu’une série possède deux indices :
- Un index positionnel ou implicite,
- Un index explicite,
Nous pouvons accéder aux valeurs d’un objet Series à l’aide des étiquettes et des indices de position. Reprenant l’exemple 2 :
print(serie[« Electronique »]) # accéder à la valeur de la clé Electronique dans serie
print(serie[2]) # afficher la valeur ayant index 2
Vous obtiendrez le résultat suivant :
10
17
D’ailleurs, nous pouvons utiliser des indices négatifs et des tranches, comme pour une liste :
print(« // »*22)
print(serie[« Electronique »]) # accéder à la valeur de la clé Electronique dans serie
print(serie[2]) # afficher la valeur ayant index 2
print(serie[2:])
print(serie[-3])
print(« // »*22)
print(serie[:])
Utilisation des méthodes .loc() et .iloc()
Pandas fournit deux méthodes d’accès aux données :
- loc() fait référence à l’étiquette.
- iloc() fait référence à l’indice de position.
Remarques :
- On peut utiliser .iloc() sur un objet Series de manière similaire à l’utilisation de l’opérateur d’indexation [] sur une liste.
- On peut utiliser .loc() sur une série comme nous le ferions avec l’opérateur d’indexation [] sur un dictionnaire.
- .iloc()exclut l’élément de fermeture, mais .loc() l’inclut.
Dataframe
La Dataframe est une structure de données la plus puissante en Pandas qui organise des données en lignes et en colonnes. Autrement dit, c’est une structure de données bidimensionnelle (2D).
Il s’agit d’une sorte d’une feuille de calcul, ou bien un dictionnaire d’objets Series.
Généralement, Dataframe est l’objet le plus utilisé. Il peut être construit à partir de types variés :
- Un numpy.ndarray (2D) ;
- Un dictionnaire de ndarrays 1D, listes, dicts, ou Series ;
- Une série ;
- Un autre Dataframe.
Les avantages de Dataframe:
- Exploiter des données provenant de différentes sources de et de différents formats de données ;
- Réaliser des statistiques en réalisant des opérations sur les données, telles que : calcul de la moyenne, la médiane, le maximum ou le minimum de chaque ou de plusieurs colonnes. Chercher s’il y a une corrélation entre les colonne X et Y. Voir la distribution des données de la colonne Z;
- Nettoyer les données en supprimant les valeurs manquantes et en filtrant les lignes ou les colonnes selon certains critères
- Visualiser les données à l’aide de Matplotlib ; tout en tracçant des graphiques sous plusieurs formes: des barres, des lignes, des histogrammes, des bulles, etc. ;
- Persister les données nettoyées et traitées dans des fichiers tels que: CSV, Excel, JSON, TXT, ou une même dans une base de données.
Par la méthode suivante on peut créer une Dataframe :
df= pd.Dataframe(data, index=index, columns=columns)
- L’argument index représente l’ensemble des étiquettes de lignes,
- L’argument columns désigne l’ensemble des étiquettes de colonnes.
Reprenons l’exemple 2; création d’un dataframe à partir d’un dictionnaire de deux series
note_examen= {
« Electronique »: pd.Series([2, 11, 13, 17], index=[« Said », « Karim », « Jalal », « Sahar »]),
« Math »: pd.Series([11, 15, 7, 10], index=[« Said », « Karim », « Jalal », « Sahar »])
}
df = pd.DataFrame(note_examen)
print(df)
Le résultat retourné est un tableau :
Electronique Math
Said 2 11
Karim 11 15
Jalal 13 7
Sahar 17 10
Les étiquettes (labels) des colonnes et des lignes sont accessibles via les attributs « columns » et « index » respectivement de la manière suivante :
note_exam= {
« Electronique »: pd.Series([2, 11, 13, 17], index=[« Said », « Karim », « Jalal », « Sahar »]),
« Math »: pd.Series([11, 15, 7, 10], index=[« Said », « Karim », « Jalal », « Sahar »])
}
df = pd.DataFrame(note_exam)
print(df)
print(df.index)
print(df.columns)
Résultat:
============================================
Electronique Math
Said 2 11
Karim 11 15
Jalal 13 7
Sahar 17 10
Index([‘Said’, ‘Karim’, ‘Jalal’, ‘Sahar’], dtype=’object’)
Index([‘Electronique’, ‘Math’], dtype=’object’)
Création d’une Dataframe à partir d’un dictionnaire
On peut utiliser ndarray ou une liste. Les ndarrays doivent tous être de la même longueur. Si un index est déclaré, il doit aussi être de la même longueur que les tableaux. Si aucun index n’est pas déclaré, le résultat sera range(n), où n est la longueur du tableau.
Exemple 4:
region_popul={
‘Region’:[‘Oued EdDahab Lagouira’,‘Laayoune Boujdour Sakia ElHamra’,
‘Guelmim Es Semara’,‘Souss Massa Draa’],
‘Population’ :[142955,301744,501921,3601917],
‘Ménages’:[29385,67140,98867,747476]
}
# create a dataframe with a dict
df = pd.DataFrame(region_popul)
print(df)
Résultat de ce code :
Region Population Ménages
0 Oued EdDahab Lagouira 142955 29385
1 Laayoune Boujdour Sakia ElHamra 301744 67140
2 Guelmim Es Semara 501921 98867
3 Souss Massa Draa 3601917 747476
Accéder aux données d’un objet Dataframe
Puisque un Dataframe n’est qu’un ensemble d’objets Series, on peut utiliser les mêmes outils d’accès aux éléments d’un objet Series. La différence essentielle réside dans la dimension supplémentaire du Dataframe.
L’opérateur d’indexation peut être utilisé pour les colonnes et les méthodes d’accès .loc() et .iloc() pour les lignes.
Utilisation de l’opérateur d’indexation
Si on considère un Dataframe comme un dictionnaire dont les valeurs sont des séries, il est logique qu’on puisse accéder à ses colonnes avec l’opérateur d’indexation ou par attribut.
Si on reprend l’exemple 2 précédent:
print( » accés par attribut »,« == »*10)
print(df.Region)
print(« indexation par label: Population »,« ++ »*10)
print(df[« Population »])
On obtient:
# accéder à la colonne Population (indexation par label)
accés par attribut =======================================
0 Oued EdDahab Lagouira
1 Laayoune Boujdour Sakia ElHamra
2 Guelmim Es Semara
3 Souss Massa Draa
Name: Region, dtype: object
indexation par label: Population +++++++++++++++++++++++++++
0 142955
1 301744
2 501921
3 3601917
Name: Population, dtype: int64
Opérations statistiques sur un objet Dataframe
Pour faire une analyse statistique on peut effectuer des opérations statistiques sur les données qui sont structurée à l’aide d’un objet Dataframe, à savoir ; sum(), mean(), max(), median(), info()…
L’analyse statistique peut être utilisée pour réaliser les tâches suivantes:
- Localiser des zones de pertinence, de cohérence, ou de diversité dans les données.
- Elaborer des prédictions futures basées sur des données.
- Chercher les informations clés d’un ensemble de données
- Résumer les informations.
Reprenons l’exemple 4, et calculons la somme, la moyenne et le maximum:
# operations sur dataframe; sum, mean, max
print(« sum: », »== »*22)
print(df.sum())
print(« mean: », « == »*22)
print(df.mean())
print(« max: », »== »*22)
print(df.max())
On obtiendrait les résultats suivants :
sum: ============================================
Region Oued EdDahab LagouiraLaayoune Boujdour Sakia E…
Population 4548537
Ménages 942868
dtype: object
mean: ============================================
Population 1137134.25
Ménages 235717.00
dtype: float64
max: ============================================
Region Souss Massa Draa
Population 3601917
Ménages 747476
dtype: object
Utiliser des méthodes head() et tail() :
- On peut afficher les premiers ou les dernières lignes d’une dataframe en utilisant les méthodes « head() » et « tail()»
- Dans l’exemple 4, on veut récupérer les deux premières lignes et la dernière seulemnt ;
print(df.head(2))
print(« tail: »,« == »*22)
print(df.tail(1))
Region Population Ménages
0 Oued EdDahab Lagouira 142955 29385
1 Laayoune Boujdour Sakia ElHamra 301744 67140
tail: ============================================
Region Population Ménages
3 Souss Massa Draa 3601917 747476
Travailler avec des fichiers (cas de type csv) :
- Pandas permet de manipuler des données via des fichiers en écrire et en lecture, comme par exemple, Excel, CSV et de nombreux autres types de fichiers.
- Des fonctions telles que la méthode read_csv() qui permette d’opérer avec des fichiers. Nous pouvons l’utiliser pour charger des données dans les instances de type Series ou DataFrame.
- Dans cette section nous verrons comment exploiter un fichier csv.
Utiliser un fichier csv avec Pandas
- Le format CSV (Comma Separated Values) est très populaire pour le stockage des données.
- Un grand nombre de stockage de données se présentent sous la forme de fichiers CSV qui peuvent être utilisés soit directement dans un tableur comme Excel, soit chargés dans des langages de programmation comme R ou Python.
- Les dataframes de Pandas sont assez puissants pour traiter des données tabulaires bidimensionnelles.
- Pour lire un fichier csv avec Pandas, la fonction read_csv() peut être utilisée. Elle est fournie avec un certain nombre de paramètres différents. Voici la syntaxe générale pour charger un fichier csv dans un dataframe :
import pandas
as pd
df = pd.read_csv(path_to_file)
- L’argument « path_to_file » précise le chemin d’accès au fichier CSV qu’on veut ouvrir. Il peut s’agir de n’importe quel chemin de chaîne valide ou d’une URL. Elle renvoie un objet dataframe.
- Dans l’exemple suivant, on veut ouvrir un fichier csv contenant des données sur les effectives d’élèves de provinces de la région Tanger-Tétouan-Alhoceima, Maroc. Chaque ligne contient les noms relatives aux provinces, et les colonnes représentent les effectives inscris.
df_regions= pd.read_csv(« population_regions.csv », sep=« ; »,encoding=« ISO-8859-1 »)
print(df_regions)