M55 - Data Science & Scientific Computing 5
  1.   Cours
  2. Introduction
  • M55 - Data Science and Scientific Computing 5

  • Syllabus

  •   Cours
    • Introduction
    • Series
    • Data Frames
    • Une analyse complète : le Titanic

  •   Exercices
    • Premières manipulations
    • Notes L3 Math
    • Population France
    • Netflix User
    • Presidentielles USA 2016

  •   Fichiers sources

Contenu de la page

  • 1 Importation de Pandas
  • 2 Un tableau monodimensionnel : la série
  • 3 Un tableau bidimensionnel : le DataFrame
  1.   Cours
  2. Introduction

Premiers pas avec Pandas

Auteur·rice

Gloria FACCANONI

Date de publication

30 novembre 2024

Dans le cours DS&SC-4, nous avons exploré en détail le package NumPy. Son objet principal est le ndarray, qui permet le stockage et la manipulation efficaces de tableaux homogènes. Cet object, bien qu’idéal pour les valeurs numériques (et donc pour la mise en ouevre de schémas d’approximation numériques), ne peut pas traiter des données variées telles que des catégories, des labels, des dates ou du texte.

En analyse de données, les informations sont souvent organisées avec chaque ligne représentant un individu et chaque colonne une caractéristique spécifique, qui n’est pas forcement une valeur numérique. Par exemple :

  • dans le domaine automobile, chaque individu pourrait être une voiture, avec des caractéristiques telles que la puissance du moteur, les dimensions, la marque, le modèle, la couleur, etc.;
  • dans une étude de grande distribution, chaque individu pourrait être un produit, avec des informations comme le prix et la catégorie;
  • dans le secteur bancaire, chaque individu serait une personne, avec des informations comme le salaire moyen, l’age et les mensualités de remboursement d’un prêt.

Nous cherchons donc un outil qui permette :

  • de représenter les données avec le format souhaité (individus/variables),
  • de manipuler différents types de données,
  • de lire les données provenant de différentes sources.

Pour manipuler efficacement ces données hétérogènes et lire des données de différentes sources, nous utilisons la librairie Pandas . Dans ce cours, nous allons explorer ses fonctionnalités de base : lire et écrire des données, sélectionner des données, filtrer, trier, agréger et fusionner des données, et comment manipuler les données manquantes. Nous verrons également comment visualiser les données et comment combiner Pandas avec d’autres librairies de visualisation de données comme Matplotlib et Seaborn.

1 Importation de Pandas

Une fois Pandas installé, vérifions s’il fonctionne correctement. La communauté Python a adopté un certain nombre de conventions de nommage pour les modules les plus courants :

import pandas as pd 
import numpy as np
#
import matplotlib.pyplot as plt
#
import seaborn as sns
# Pour les graphiques interactifs 3D
import plotly.express as px

On peut choisir des options par défaut pour la création des figures:

plt.rcParams['font.size'] = 15
plt.rcParams['figure.figsize'] = (15, 7) # Taille par défaut des figures
# plt.style.use('ggplot') # set ggplot style


sns.set_theme(context = "notebook", # paper, notebook, talk, poster
              style = "darkgrid", # ticks, whitegrid, darkgrid, white, dark
              palette = "pastel", # None, Set2, husl, deep, muted, bright, pastel, dark, colorblind
              rc = {"axes.spines.right": False, 
                    "axes.spines.top": False}
            )

Quelques remarques à propos des bibliothèques de visualisation de données : lorsqu’on choisit une bibliothèque pour la visualisation de données, trois options populaires se distinguent : Matplotlib, Seaborn et Plotly. Chacune d’elles a ses propres forces et particularités.

  • Matplotlib est la bibliothèque de base pour la visualisation en Python. Elle offre une gande flexibilité et un contrôle fin de tous les aspects des graphiques, des tracés de lignes simples aux visualisations complexes. C’est l’outil idéal lorsque vous avez besoin d’une personnalisation poussée et d’un large éventail de types de graphiques. Cependant, cette flexibilité vient avec une complexité accrue, nécessitant souvent beaucoup de code pour atteindre le résultat désiré.
  • Seaborn, construit sur Matplotlib, simplifie la création de graphiques statistiques et esthétiques. Il propose des thèmes intégrés et des palettes de couleurs qui rendent les visualisations non seulement plus attrayantes mais aussi plus informatives. Seaborn simplifie considérablement la création de graphiques statistiques, mais il est parfois limité pour les personnalisations très spécifiques.
  • Plotly se distingue par sa capacité à créer des visualisations interactives et dynamiques. Il est particulièrement adapté pour les tableaux de bord interactifs et les explorations de données en temps réel. Plotly supporte également des graphiques en 3D et des cartes géographiques, ce qui le rend très puissant.

2 Un tableau monodimensionnel : la série

On va commencer par créer un ensemble de données réparties de manière aléatoire et on traçe son histogramme. Il s’agit d’une série, généralisation d’un array à une dimension de NumPy.

np.random.seed(0) # for reproducibility
values = np.random.randn(100) # array of normally distributed random numbers

s = pd.Series(values) # generate a pandas series
display(s)
0     1.764052
1     0.400157
2     0.978738
3     2.240893
4     1.867558
        ...   
95    0.706573
96    0.010500
97    1.785870
98    0.126912
99    0.401989
Length: 100, dtype: float64
s.plot(kind='hist', title='Normally distributed random values', color='c', bins=10, edgecolor='black'); # histogram of the data
sns.displot(s, bins=10, color='c', aspect=15/7); # seaborn histogram

Vérifions certaines des statistiques des données (moyenne, écart-type, nombre d’observations, minimum, maximum et quartiles) à l’aide de la méthode .describe() :

s.describe()
count    100.000000
mean       0.059808
std        1.012960
min       -2.552990
25%       -0.643857
50%        0.094096
75%        0.737077
max        2.269755
dtype: float64

3 Un tableau bidimensionnel : le DataFrame

Voyons maintenant un exemple avec un DataFrame.

Un DataFrame est une structure de données bidimensionnelle, similaire à une table de base de données, ou à une feuille de calcul Excel. Les DataFrames sont particulièrement utiles pour gérer des données hétérogènes, c’est-à-dire des données qui peuvent être de différents types (entiers, chaînes de caractères, dates, etc.).

df = pd.DataFrame({'Colonne A': [1,    2,   1,    4,   3,   5,   2,   3,   4,  1],
                   'Colonne B': [12,  14,  11,   16,  18,  18,  22,  13,  21, 17],
                   'Colonne C': ['a', 'a', 'b', 'a', 'b', 'c', 'b', 'a', 'b', 'a']})

display(df)
Colonne A Colonne B Colonne C
0 1 12 a
1 2 14 a
2 1 11 b
3 4 16 a
4 3 18 b
5 5 18 c
6 2 22 b
7 3 13 a
8 4 21 b
9 1 17 a

Vérifions à nouveau certaines des statistiques des données (moyenne, écart-type, nombre d’observations, minimum, maximum et quartiles) à l’aide de la méthode .describe() :

df.describe()
Colonne A Colonne B
count 10.000000 10.000000
mean 2.600000 16.200000
std 1.429841 3.705851
min 1.000000 11.000000
25% 1.250000 13.250000
50% 2.500000 16.500000
75% 3.750000 18.000000
max 5.000000 22.000000

On remarque que, puisque la colonne C ne contient pas de valeurs numériques, elle est exclue de la sortie. Dans ce cas, on peut afficher le nombre d’observations par catégorie ou encore le nombre d’éléments uniques, le mode et la fréquence du mode.

df['Colonne C'].value_counts()
Colonne C
a    5
b    4
c    1
Name: count, dtype: int64
df['Colonne C'].describe()
count     10
unique     3
top        a
freq       5
Name: Colonne C, dtype: object

On peut également croiser les données en utilisant crosstab() et afficher les graphiques :

A = pd.crosstab(df['Colonne A'], df['Colonne C'])
A
Colonne C a b c
Colonne A
1 2 1 0
2 1 1 0
3 1 1 0
4 1 1 0
5 0 0 1
A.plot(kind='bar', stacked=True, color=['red', 'blue', 'green'], grid=True);

A.plot(kind='pie', subplots=True, figsize=(20, 5));

Retour au sommet
Series

© Copyright 2024, Gloria Faccanoni

 

This page is built with ❤️ and Quarto.