Création d'une Series ou DataFrame
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
- Cliquer sur les deux touches au même moment
- Sous Linux:
- Ouvrir un terminal
- Taper
pip install pandas
- Sous JupyterLab:
- Executer dans une cellule
!pip install pandas
- Executer dans une cellule
## 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
= pd.Series(np.round(np.random.rand(4)*20., 2),
math = ['Etu1', 'Etu2', 'Etu3', 'Etu4']) index
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
= pd.Series(np.round(np.random.rand(4)*20., 2),
phys '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
= pd.DataFrame({"Math":math, "Phys":phys})
L3 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
= np.array([[5.08, 2.17],
data 10.38, 8.92],
[3.81, 13.82],
[5.75, 19.22],
[ 6.32, np.nan]]
[
)= pd.DataFrame(data, columns = ['Math', 'Phys'],
Moyennes = ['Etu1', 'Etu2', 'Etu3', 'Etu4', 'Etu5'])
index
# 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éthode | Description |
---|---|
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
= pd.read_csv("https://covid.ourworldindata.org/data/owid-covid-data.csv")
corona 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
'covid.csv') corona.to_csv(