57ff08fe9f2641fc83731fbfcbed66db

Bien que NumPy et SciPy soient des outils puissants pour le calcul numérique, ils manquent de certaines des fonctionnalités de haut niveau nécessaires à de nombreuses applications de science des données. La bibliothèque pandas de Python, construite sur NumPy, est conçue spécifiquement pour la gestion et l'analyse des données.

Dans cette première partie, nous présentons les structures de données et la syntaxe de pandas et explorons ses capacités d'analyse et de présentation rapides des données.

Pour installer pandas:

  • Sous Windows:
    • Cliquer sur les deux touches au même moment Win+r
    • Taper CMD dans la petite fenêtre puis Entrée
    • Dans la fenêtre DOS, Taper pip install pandas
  • Sous Linux:
    • Ouvrir un terminal
    • Taper pip install pandas
  • Sous JupyterLab:
    • Executer dans une cellule !pip install pandas
## Importation des bibliothèques `pandas` et `numpy`
import pandas as pd
import numpy as np

Création d'un objet Series de pandas

Series de pandas est comme un tableau d'une seule colonne mais on peut ajouter un index alphanumérique qui était une limite des tableaux sous numpy.

Series est un tableau unidimensionnel contenant des données de tout type.

Dans cet exemple math est un objet de pandas de type Series qui contient 4 nombres aléatoires de 0 à 20 et chaque valeur est affecté à index ['Etu1', 'Etu2', 'Etu3', 'Etu4'].

np.round est une fonction qui arrondi un nombre réel à deux ciffres après la virgule.

math représente les notes de la matière mathématiques de 4 étudiants appelés: Etu1, Etu2, Etu3, Etu4

math = pd.Series(np.round(np.random.rand(4)*20., 2), 
                 index = ['Etu1', 'Etu2', 'Etu3', 'Etu4'])
print(math)
print("=======================================")
print(type(math))
Etu1    11.61
Etu2     1.78
Etu3    13.95
Etu4     4.35
dtype: float64
=======================================
<class 'pandas.core.series.Series'>

phys représente les notes de la matière physique de 4 étudiants appelés: Etu1, Etu2, Etu3, Etu4

phys = pd.Series(np.round(np.random.rand(4)*20., 2), 
                 ['Etu1', 'Etu2', 'Etu3', 'Etu4'])
print(phys)
Etu1    17.24
Etu2     7.63
Etu3     2.75
Etu4    15.40
dtype: float64

Un DataFrame est une collection de plusieurs Series. Il peut être considéré comme un tableau à 2 dimensions, où chaque ligne est un point de données distinct et chaque colonne est une caractéristique des données. Les lignes sont étiquetées avec un index (comme dans une Series) et les colonnes sont étiquetées dans les colonnes d'attribut.

Il existe de nombreuses façons différentes d'initialiser un DataFrame. L'une des façons d'initialiser un DataFrame consiste à transmettre un dictionnaire en tant que données du DataFrame. Les clés du dictionnaire deviendront les étiquettes dans les colonnes et les valeurs sont les Series associées à l'étiquette.

# Créer un DataFrame avec les notes des étudiants
L3 = pd.DataFrame({"Math":math, "Phys":phys})
print(L3)
       Math   Phys
Etu1  11.61  17.24
Etu2   1.78   7.63
Etu3  13.95   2.75
Etu4   4.35  15.40

Notez que pd.DataFrame aligne automatiquement les données des deux Series qui ont le même index. Si les données n'apparaissent que dans l'une des Series, l'entrée correspondante pour l'autre série est NaN.

Nous pouvons également initialiser un DataFrame avec un tableau NumPy. Avec cette méthode, les données sont transmises sous forme de tableau NumPy à 2 dimensions, tandis que les libellés des colonnes et l'index sont transmis en tant que paramètres. Le premier libellé de colonne correspond à la première colonne du tableau, le deuxième à la deuxième, et ainsi de suite. L'index fonctionne de la même manière.

import numpy as np
# Initialisez le DataFrame avec un tableau NumPy
data = np.array([[5.08, 2.17], 
                 [10.38, 8.92], 
                 [3.81, 13.82], 
                 [ 5.75, 19.22], 
                 [6.32, np.nan]]
               )
Moyennes = pd.DataFrame(data, columns = ['Math', 'Phys'], 
                        index = ['Etu1', 'Etu2', 'Etu3', 'Etu4', 'Etu5'])

# Afficher les colonnes:
print("Afficher les noms des colonnes")
print(Moyennes.columns)
print("=========================================")

# Afficher l'index
print("Afficher l'index")
print(Moyennes.index)
print("=========================================")

#Afficher le DataFrame comme un tableau NumPy
print("Afficher les valeurs du DataFrame comme un tableau NumPy")
print(Moyennes.values)
print("=========================================")
Afficher les noms des colonnes
Index(['Math', 'Phys'], dtype='object')
=========================================
Afficher l'index
Index(['Etu1', 'Etu2', 'Etu3', 'Etu4', 'Etu5'], dtype='object')
=========================================
Afficher les valeurs du DataFrame comme un tableau NumPy
[[ 5.08  2.17]
 [10.38  8.92]
 [ 3.81 13.82]
 [ 5.75 19.22]
 [ 6.32   nan]]
=========================================

Data I/O (Input/Output)

La bibliothèque pandas dispose de fonctions qui simplifient l'importation et l'exportation de données. Ces fonctions permettent d'importer et d'exporter une variété de formats de fichiers, notamment les fichiers CSV, Excel, HDF5, SQL, JSON, HTML et Pickle.

MéthodeDescription
to_csv() Écrire l'index et les entrées dans un fichier CSV
read_csv() Lire un csv et le convertir en DataFrame
to_json() Convertir l'objet en chaîne JSON
to_pickle() Sérialiser l'objet et le stocker dans un fichier externe
to_sql() Écrire les données de l'objet dans une base de données SQL ouverte
read_html() Lire une table dans une page html et la convertir en DataFrame

Le format CSV (valeurs séparées par des virgules) est un moyen simple de stocker des données tabulaires en texte brut. Les fichiers CSV étant l'un des formats de fichiers les plus populaires pour l'échange de données, nous allons explorer la fonction read_csv() plus en détail. Parmi les arguments de mot-clé fréquemment utilisés, on trouve les suivants :

  • delimiter : le caractère qui sépare les champs de données. Il s'agit souvent d'une virgule ou d'un espace.
  • header : le numéro de ligne (indexé 0) dans le fichier CSV qui contient les noms de colonnes.
  • index_col : la colonne (indexée 0) dans le fichier CSV qui est l'index du DataFrame.
  • skiprows : s'il s'agit d'un entier n, ignorez les n premières lignes du fichier, puis commencez à lire les données. S'il s'agit d'une liste d'entiers, ignorez les lignes spécifiées.
  • names : si le fichier CSV ne contient pas les noms de colonnes ou si vous souhaitez utiliser d'autres noms de colonnes, spécifiez-les dans une liste.

Une autre fonction particulièrement utile est read_html(), qui est utile lors de l'extraction de données. Il prend un fichier url ou html et un argument match facultatif, une chaîne ou une expression régulière, et renvoie une liste des tables qui correspondent à la correspondance dans un DataFrame.

# Télécharger le fcihier owid-covid-data.csv depuis une source web 
# et la sauvegarde dans un DataFrame
corona = pd.read_csv("https://covid.ourworldindata.org/data/owid-covid-data.csv")
print(corona.head(10))
  iso_code continent     location        date  total_cases  new_cases  \
0      AFG      Asia  Afghanistan  2020-01-05          0.0        0.0   
1      AFG      Asia  Afghanistan  2020-01-06          0.0        0.0   
2      AFG      Asia  Afghanistan  2020-01-07          0.0        0.0   
3      AFG      Asia  Afghanistan  2020-01-08          0.0        0.0   
4      AFG      Asia  Afghanistan  2020-01-09          0.0        0.0   
5      AFG      Asia  Afghanistan  2020-01-10          0.0        0.0   
6      AFG      Asia  Afghanistan  2020-01-11          0.0        0.0   
7      AFG      Asia  Afghanistan  2020-01-12          0.0        0.0   
8      AFG      Asia  Afghanistan  2020-01-13          0.0        0.0   
9      AFG      Asia  Afghanistan  2020-01-14          0.0        0.0   

   new_cases_smoothed  total_deaths  new_deaths  new_deaths_smoothed  ...  \
0                 NaN           0.0         0.0                  NaN  ...   
1                 NaN           0.0         0.0                  NaN  ...   
2                 NaN           0.0         0.0                  NaN  ...   
3                 NaN           0.0         0.0                  NaN  ...   
4                 NaN           0.0         0.0                  NaN  ...   
5                 0.0           0.0         0.0                  0.0  ...   
6                 0.0           0.0         0.0                  0.0  ...   
7                 0.0           0.0         0.0                  0.0  ...   
8                 0.0           0.0         0.0                  0.0  ...   
9                 0.0           0.0         0.0                  0.0  ...   

   male_smokers  handwashing_facilities  hospital_beds_per_thousand  \
0           NaN                  37.746                         0.5   
1           NaN                  37.746                         0.5   
2           NaN                  37.746                         0.5   
3           NaN                  37.746                         0.5   
4           NaN                  37.746                         0.5   
5           NaN                  37.746                         0.5   
6           NaN                  37.746                         0.5   
7           NaN                  37.746                         0.5   
8           NaN                  37.746                         0.5   
9           NaN                  37.746                         0.5   

   life_expectancy  human_development_index  population  \
0            64.83                    0.511    41128772   
1            64.83                    0.511    41128772   
2            64.83                    0.511    41128772   
3            64.83                    0.511    41128772   
4            64.83                    0.511    41128772   
5            64.83                    0.511    41128772   
6            64.83                    0.511    41128772   
7            64.83                    0.511    41128772   
8            64.83                    0.511    41128772   
9            64.83                    0.511    41128772   

   excess_mortality_cumulative_absolute  excess_mortality_cumulative  \
0                                   NaN                          NaN   
1                                   NaN                          NaN   
2                                   NaN                          NaN   
3                                   NaN                          NaN   
4                                   NaN                          NaN   
5                                   NaN                          NaN   
6                                   NaN                          NaN   
7                                   NaN                          NaN   
8                                   NaN                          NaN   
9                                   NaN                          NaN   

   excess_mortality  excess_mortality_cumulative_per_million  
0               NaN                                      NaN  
1               NaN                                      NaN  
2               NaN                                      NaN  
3               NaN                                      NaN  
4               NaN                                      NaN  
5               NaN                                      NaN  
6               NaN                                      NaN  
7               NaN                                      NaN  
8               NaN                                      NaN  
9               NaN                                      NaN  

[10 rows x 67 columns]
# Sauvegarder le fichier téléchargé owid-id-data.csv 
# localement avec le nom covid.csv
corona.to_csv('covid.csv')
Modifié le: lundi 25 novembre 2024, 08:48