Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Le Machine Learning avec Python
  3. La bibliothèque Pandas
Extrait - Le Machine Learning avec Python De la théorie à la pratique
Extraits du livre
Le Machine Learning avec Python De la théorie à la pratique
10 avis
Revenir à la page d'achat du livre

La bibliothèque Pandas

Objectif du chapitre

Le traitement et l’analyse des données nécessitent d’organiser ces dernières dans un format plus au moins commun et qui correspond au format table. Également, avec la croissance incessante des sources de données, la taille des fichiers où ces données sont stockées devient de plus en plus conséquente. Avec la bibliothèque Pandas, le Data Scientist peut s’affranchir de toutes ces questions relatives au format et à la taille des données pour ne se concentrer que sur le problème à résoudre.

Ce chapitre est complètement dédié à l’exploration des possibilités que propose Pandas afin de permettre aux lecteurs de se familiariser avec les différentes opérations de base qui sont nécessaires pour toute utilisation de cette bibliothèque tant appréciée des Data Scientists et des Data Analysts.

À la fin de ce chapitre, le lecteur aura abordé :

  • une introduction à la bibliothèque Pandas,

  • une présentation des DataFrames Pandas,

  • un chargement des données à partir de fichiers dans un DataFrame,

  • la lecture et la modification des données d’un DataFrame,

  • les tris et les requêtes sur les données d’un DataFrame.

  • la modification de la structure d’un DataFrame,

  • la sauvegarde des données...

C’est quoi, Pandas ?

Pandas est sans doute l’une des bibliothèques d’analyse de données les plus utilisées par les Data Scientists. Cette bibliothèque a été pensée dans l’objectif de rendre la manipulation des données le plus simple et le plus efficace possible, en particulier la manipulation des données sous forme de tables et de séries temporelles.

Avec Pandas, nous pouvons manipuler des données définies dans un espace à plusieurs dimensions. Les espaces définis selon une seule dimension sont adaptés pour la manipulation et l’analyse des séries temporelles. Lorsque les données sont définies dans un espace indexé selon deux dimensions, il s’agit de données organisées sous forme de table. Ces tables sont stockées dans des structures de données de type DataFrame.

Plusieurs logiciels, comme le fameux logiciel Excel, permettent de réaliser des traitements avancés sur les données. Cependant, la plupart de ces programmes présentent les deux lacunes suivantes :

1.

Un manque de flexibilité. L’exploitation des données est restreinte aux usages permis par les fonctionnalités proposées par ces logiciels. Même si certains logiciels modernes proposent des possibilités d’extension de leurs fonctionnalités...

Installation de Pandas

Pour installer la bibliothèque Pandas, il suffit d’exécuter la commande suivante :

pip install pandas 

Cette commande installe automatiquement la dernière version de la bibliothèque pandas.

Afin de nous assurer que le module pandas est correctement installé sur votre machine, nous allons tester un programme simple qui permet d’importer le module pandas et d’afficher la version qui est installée. Pour réaliser ce programme, suivez les étapes ci-dessous :

 Créez un nouveau fichier et donnez-lui le nom test_pandas.py.

 Saisissez les trois instructions ci-après dans ce fichier test_pandas.py.

import pandas as pd 
print("La version pandas installée est :", pd.__version__) 
print("Programme terminé") 

 Lancez une console de commandes et exécutez le programme Python que vous avez défini dans le fichier test_pandas.py.  

Si le module pandas est correctement installé, à l’exécution de votre programme, vous allez obtenir le résultat suivant :

La version pandas installée est : 1.0.1 
Programme terminé 

Si le module pandas a bien été installé, mais que vous obtenez un message d’erreur lors de l’exécution de l’exemple ci-dessus, alors essayez de désinstaller le module pandas et d’installer...

DataFrame Pandas

Un DataFrame Pandas est la structure de données utilisée pour le stockage et la manipulation de données en mémoire. En fonction des besoins, il existe plusieurs méthodes pour la création d’un DataFrame. Par exemple, un DataFrame peut être créé à partir d’un dictionnaire ou à partir d’un tableau NumPy, ou encore à partir de données stockées dans un fichier. Les deux sous-sections suivantes montrent comment créer un DataFrame à partir d’un dictionnaire, à partir d’un tableau NumPy, et aussi à partir d’un fichier.

Quelle que soit la méthode utilisée, une fois qu’un DataFrame est créé, ce dernier se comporte comme un dictionnaire Python où les clés sont associées aux colonnes et les valeurs sont des séries attachées à ces colonnes.

1. Création d’un DataFrame à partir d’un dictionnaire

Pour créer un DataFrame à partir d’un dictionnaire, exécutez l’exemple de code suivant :

import pandas as pd  
myDataset = pd.DataFrame({'Col1':[1,2,3],'Col2':[1.0, 2.0, 
3.0],'Col3':['a','b','c']}) 
print(myDataset) 
 
print("Le type des colonnes :\n", myDataset.dtypes)  

Ce programme permet de créer un DataFrame avec les trois colonnes Col1, Col2 et Col3 et avec trois lignes de données. Ce programme devrait afficher le résultat suivant :

   Col1  Col2 Col3 
0     1   1.0    a 
1     2   2.0    b 
2     3   3.0    c 
Le type des colonnes  : 
Col1      int64 
Col2    float64 
Col3     object 
dtype: object 

Avec Pandas, le type chaîne de caractères str correspond au type object.

Pour changer le type d’une colonne, on peut utiliser la méthode astype() de Pandas. Par exemple, le code suivant permet de changer le type de la colonne Col1 de type int64 vers le type float64 :

import pandas as pd  
myDataset = pd.DataFrame({'Col1':[1,2,3],'Col2':[1.0, 2.0, 
3.0],'Col3':['a','b','c']}) ...

Accès aux données d’un DataFrame

Avec les DataFrames de la bibliothèque Pandas, une fois que les données sont lues à partir d’un fichier ou de toute autre source de données, la manipulation de ces données peut être réalisée de façon très simple et intuitive. Cette section donne tous les éléments nécessaires pour accéder, filtrer et modifier les données d’un DataFrame.

1. Lire les lignes d’un DataFrame

a. Lire une ligne d’un DataFrame

Une fois que des données sont lues et stockées dans un DataFrame, pour accéder à une ligne précise de ce DataFrame il suffit d’utiliser sa propriété iloc en indiquant l’indice ou la clé à laquelle cette ligne est associée, comme dans l’exemple de code suivant où la ligne associée à la clé 5 a été lue et affichée.

import pandas as pd 
myDataset = pd.read_csv('Data\ozone.csv')  
print(myDataset.iloc[5]) 

Ce programme affiche le résultat suivant :

images/04EPS04.png

Figure 4-4 : Accès et affichage de la ligne d’indice 5

b. Lire plusieurs lignes d’un DataFrame

Pour accéder à un ensemble de lignes situées entre deux indices, il suffit d’utiliser la notation que nous avons l’habitude d’utiliser pour accéder aux éléments d’une liste Python après avoir indiqué la propriété iloc d’un DataFrame, comme dans l’exemple de code suivant :

import pandas as pd 
myDataset = pd.read_csv('Data\ozone.csv')  
print(myDataset.iloc[5:10]) 

Ce programme affiche les lignes du DataFrame myDataset situées entre l’indice 5 et l’indice 10 exclu, comme le montre le résultat dans la figure 4-5 suivante :

images/04EPS05.png

Figure 4-5 : Accès et affichage des lignes situées dans l’intervalle [5:10]

c. Parcourir les lignes d’un DataFrame

L’ensemble des lignes d’un DataFrame peuvent être parcourues en utilisant une boucle. L’exemple de code suivant permet de parcourir toutes les lignes du DataFrame myDataset à l’aide d’une boucle for, et à chaque itération de cette boucle, l’indice et les valeurs d’une...

Modifier un DataFrame

1. Modifier les valeurs dans un DataFrame

Une fois qu’un DataFrame a été créé et initialisé avec des valeurs, nous pouvons modifier ses valeurs en réalisant des affectations des nouvelles valeurs directement aux valeurs qu’on souhaite modifier. Par exemple, le code suivant montre comment modifier la valeur du DataFrame myDataset située à la troisième ligne et la troisième colonne en lui affectant la valeur 150.

import pandas as pd 
 
myDataset = pd.read_csv('Data\ozone.csv')  
print(myDataset.head(3)) 
myDataset.iloc[2,2]= 150 
print("\n",myDataset.head(3)) 

Ce programme affiche la valeur située à la troisième ligne et la troisième colonne avant et après lui avoir affecté la valeur 150, comme visible dans le résultat suivant :

images/04EPS16.png

Figure 4-16 : Modification de la valeur myDataset[2,2]

2. Modifier la structure d’un DataFrame

a. Ajouter une variable à un DataFrame

Pour ajouter une nouvelle colonne à un DataFrame, il suffit d’indiquer les valeurs de cette nouvelle colonne pour toutes les lignes déjà existantes dans ce DataFrame.

L’exemple du code suivant ajoute la nouvelle colonne Résultat au DataFrame myDataset en affectant la valeur False à toutes les lignes déjà existantes pour cette nouvelle variable.

import pandas as pd 
 
myDataset = pd.read_csv('Data\ozone.csv')  
myDataset["Résultat"] = False 
 
print(myDataset) 

Ce programme affiche le résultat suivant :

images/04EPS17.png

Figure 4-17 : Modification de la valeur myDataset[2,2]

L’exemple du code suivant crée la nouvelle colonne Pow2_O3obs à partir du carré de la colonne O3obs.

import pandas as pd 
 
myDataset = pd.read_csv('Data\ozone.csv')  
myDataset["Pow2_O3obs"] = pow(myDataset["O3obs"],2) 
print(myDataset.head(5)) 

Le résultat est le suivant :

images/04EPS18.png

Figure 4-18 : Création de la nouvelle colonne Pow2_O3obs

Le fait de lever au carré une variable permet d’accentuer les différences entre ses valeurs. Par exemple, la différence en valeur absolue entre la valeur de la variable O3obs de la première ligne et la valeur de cette même variable à...

Tri sur les données d’un DataFrame

1. Tri avec un seul critère

La méthode sort_values d’un objet de type DataFrame permet de trier le DataFrame sur lequel elle est appliquée. Par défaut, ce tri est réalisé suivant l’ordre croissant des valeurs de la colonne ou des colonnes utilisée(s) pour le tri. L’exemple suivant montre comment trier le DataFrame myDataset suivant l’ordre croissant des valeurs de la colonne NO2.

import pandas as pd 
 
myDataset = pd.read_csv('Data\ozone.csv')  
no2_sort = myDataset.sort_values('NO2') 
print(no2_sort) 

Ce programme affiche le résultat suivant :

images/04EPS26.PNG

Figure 4-26 : Un DataFrame trié suivant l’ordre croissant des valeurs de la variable NO2

La méthode sort_values admet le paramètre ascending qui est égal à True par défaut. Ce paramètre indique l’ordre ascendant ou descendant à utiliser lors du tri. Ainsi, si vous exécutez le code précédent en ajoutant l’argument ascending=False comme deuxième paramètre à l’appel de la méthode sort_values comme ci-dessous :

no2_sort = myDataset.sort_values('NO2', ascending=False) 

vous obtenez le résultat suivant :

images/04EPS27.PNG

Figure 4-27 : Un DataFrame trié suivant l’ordre décroissant des valeurs de la variable...

Sauvegarder les données d’un DataFrame

Les données d’un DataFrame peuvent être enregistrées dans un fichier, par exemple un fichier .csv ou un fichier texte ou encore un fichier Excel.

L’exemple suivant montre comment sauvegarder les données du DataFrame myDataset dans un fichier .csv. Ce DataFrame contient initialement les données du fichier ozone.csv auxquelles nous avons ajouté la colonne Pow2_O3obs.

import pandas as pd 
 
myDataset = pd.read_csv('Data\ozone.csv')  
myDataset["Pow2_O3obs"] = pow(myDataset["O3obs"],2) 
columns = list(myDataset.columns.values) 
myDataset = myDataset[columns[0:2]+[columns[-1]]+columns[2:10]] 
print(myDataset.head(5)) 
 
myDataset.to_csv('Data\ozone2.csv')  

À la fin de l’exécution de ce programme, vous devriez trouver le fichier ozone2.csv créé dans le dossier Data. Si vous ouvrez ce fichier avec un logiciel tel qu’Excel, vous devriez voir des résultats comme ceux de la figure suivante :

images/04EPS29.png

Figure 4-29 : Le DataFrame myDataset sauvegardé avec la colonne des index

Remarquez la présence de la première colonne où sont enregistrés les index des lignes du DataFrame myDataset. Pour enregistrer un DataFrame sans la colonne des index, nous pouvons indiquer l’argument index=False lors de l’appel à...

Faire des statistiques sur un DataFrame

1. Faire un résumé direct

Avec Pandas, on peut résumer un DataFrame avec les statistiques de position classiques en utilisant la méthode describe appliquée sur un objet de type DataFrame. L’exemple du code suivant permet de résumer le jeu de données du fichier ozone.csv.

import pandas as pd 
 
myDataset = pd.read_csv('Data\ozone.csv')  
stat = myDataset.describe() 
 
print(stat) 

Ce programme crée l’objet stat, qui est un DataFrame, à partir des statistiques caractéristiques de position des données du DataFrame myDataset. Le résultat affiché sera le suivant :

images/04EPS31.PNG

Figure 4-31 : Les statistiques de position du DataFrame myDataset

Ainsi, pour chaque variable du DataFrame myDataset, les statistiques suivantes sont calculées :

  • cout : le nombre de valeurs présentes pour une colonne.

  • mean : la moyenne de chaque colonne.

  • std : l’écart-type de chaque colonne.

  • min : la valeur minimale de chaque variable.

  • 25%, 50% et 75% : les quartiles associés à chaque colonne.

  • max : la valeur maximale de chaque colonne.

Nous reviendrons sur les notions théoriques et pratiques des statistiques de position et également des statistiques inférentielles dans le chapitre Statistiques.

2. Faire un résumé par agrégation

L’exemple précédent...

Lecture des fichiers de grande taille

L’un des atouts de Pandas les plus appréciés par les Data Scientists réside dans le fait que nous pouvons lire des fichiers de très grande taille. Le problème avec les fichiers de grande taille est que nos ordinateurs n’ont pas assez de mémoire vive pour les charger entièrement.

Avec Pandas, nous pouvons lire un fichier paquet par paquet, c’est-à-dire qu’à un instant donné, il n’y aura qu’un seul paquet qui sera chargé dans la mémoire vive.

L’exemple de code suivant montre comment lire le fichier ozone.csv paquet par paquet :

import pandas as pd 
 
for bloc in pd.read_csv('Data\ozone.csv', chunksize = 5): 
   print("Nouveau bloc:") 
   print(bloc) 

Grâce à l’utilisation du paramètre chunksize de la méthode read_csv, nous pouvons indiquer la taille du paquet qui sera chargé en mémoire. Dans cet exemple, le fichier ozone.csv sera chargé par paquets de cinq lignes.

Ce programme affiche les paquets :

images/04EPS35.PNG

Figure 4-35 : Lecture du fichier ozone.csv paquet par paquet

Notre fichier ozone.csv est de petite taille, mais le but ici est de montrer la technique de lecture paquet par paquet d’un fichier qui est applicable exactement de la même manière sur n’importe quel fichier de n’importe...

Conclusion

Ce chapitre nous a permis d’aborder la bibliothèque Pandas. Bien sûr, il y a bien plus de choses à dire sur cette bibliothèque, mais nous avons évoqué la plupart des notions nécessaires pour travailler avec un jeu de données. Ainsi, nous avons abordé des notions telles que la création et la manipulation des DataFrames, le filtrage des données d’un DataFrame suivant un ou plusieurs critères, la restructuration et la modification d’un DataFrame, les opérations de tri ainsi que le calcul des statistiques de position sur les données d’un DataFrame, et enfin, nous avons vu comment réaliser des résumés des données d’un DataFrame et comment lire un fichier de grande taille.