Si on associe souvent les data scientists à la mise en oeuvre de modèles d’intelligence artificielle, il est important de ne pas oublier que l’entraînement et l’utilisation de ces modèles ne représente pas forcément le quotidien des data scientists.
En pratique, la récupération de sources de données hétérogènes, la structuration et harmonisation de celles-ci en vue d’une analyse exploratoire préalable à la modélisation ou la visualisation représente une part importante du travail des data scientists. Dans de nombreux environnements c’est même l’essence du travail du data scientist. L’élaboration de modèles pertinents requiert en effet une réflexion approfondie sur les données ; une étape que l’on ne saurait négliger.
Ce cours, comme de nombreuses ressources introductives sur la data science (Wickham, Çetinkaya-Rundel, and Grolemund 2023; VanderPlas 2016; McKinney 2012), proposera donc beaucoup d’éléments sur la manipulation de données, compétence essentielle pour les data scientists.
Les logiciels de programmation
orientés autour du concept de base de données
sont devenus les outils principaux des data scientists.
Le fait de pouvoir appliquer un certain nombre d’opérations
standards sur des bases de données, quelle que soit leur nature,
permet aux programmeurs d’être plus efficaces que s’ils devaient
répéter ces opérations à la main, comme dans Excel
.
Tous les langages de programmation dominants dans l’écosystème
de la data science reposent sur le principe du dataframe.
Il s’agit même d’un objet central dans certains logiciels,
notamment R
.
La logique SQL
,
un langage de déclaration d’opérations sur des données qui a déjà plus de cinquante ans,
offre un cadre pertinent pour effectuer des opérations standardisées
sur les colonnes (création de nouvelles colonnes, sélection de sous-ensemble de lignes…).
Néanmoins, le dataframe ne s’est imposé que récemment en Python
,
grâce au package Pandas
créé
par Wes McKinney.
L’essor de la librairie Pandas
(téléchargée plus de 5 millions de fois
par jour en 2023) est pour beaucoup dans le succès de Python
dans l’écosystème de la data science et a amené, en quelques années,
a un renouvellement complet de la manière de coder en Python
, ce
langage si malléable, autour de l’analyse de données.
Cette partie du cours est une introduction
générale à l’écosystème très riche de
la manipulation de données avec Python
.
Ces chapitres évoquent aussi bien la récupération de données
que la restructuration et la production d’analyse
à partir de celles-ci.
Résumé de cette partie
Pandas
est devenu incontournable dans l’écosystème Python
pour la data science.
Pandas
est lui-même construit à partir du package Numpy
, qu’il est utile de comprendre
pour être à l’aise avec Pandas
. Numpy
est une librairie bas-niveau
pour stocker et manipuler des données.
Numpy
est au coeur de l’écosystème de la data science car la plupart des librairies, même celles
qui manient des objets destructurés,
utilisent des objets construits à partir de Numpy
1.
L’approche Pandas
, qui offre un point d’entrée harmonisé pour manipuler
des jeux de données de nature très différente,
a été étendue aux objets géographiques avec Geopandas
.
Il est ainsi possible de manipuler des données géographiques comme s’il
s’agissait de données structurées classiques. Les données géographiques et
la représentation cartographique deviennent de plus en plus commun avec
la multiplication de données ouvertes localisées et de big-data géolocalisées.
Cependant, les données structurées, importées depuis des fichiers plats ne représentent pas l’unique source de données. Les API et le webscraping permettent de télécharger ou d’extraire des données de manière très flexible depuis des pages web ou des guichets spécialisés. Ces données, notamment celles obtenues par webscraping nécessitent souvent un peu plus de travail de nettoyage de données, notamment des chaînes de caractère.
L’écosystème Pandas
représente donc un couteau-suisse
pour l’analyse de données. C’est pour cette raison que ce cours
développera beaucoup de contenu dessus.
Avant d’essayer de mettre en oeuvre une solution ad hoc, il est
souvent utile de se poser la question suivante : “ne pourrais-je pas le faire
avec les fonctionalités de base de Pandas
?” Se poser cette question peut
éviter des chemins ardus et faire économiser beaucoup de temps.
Néanmoins, Pandas
n’est pas
adapté à des données ayant une volumétrie
importante. Pour traiter de telles
données, il est plutôt recommander
de privilégier Polars
ou Dask
qui reprennent la logique de Pandas
mais
optimisent son fonctionnement, Spark
si on a une infrastructure adaptée, généralement dans
des environnements big data, ou
DuckDB
si on est prêt à utiliser des requêtes SQL plutôt qu’une librairie haut-niveau.
Exercices
Cette partie présente à la fois des tutoriels détaillés et des exercices guidés.
Il est
possible de les consulter sur ce site ou d’utiliser l’un des
badges présents en début de chapitre, par exemple
ceux-ci pour ouvrir
le chapitre d’exercices sur Pandas
:
Pour aller plus loin
Ce cours n’aborde pas vraiment les questions de volumétrie ou de vitesse de
calcul.
Pandas
peut montrer ses limites dans ce domaine sur des jeux de données
d’une volumétrie conséquente (plusieurs Gigas).
Il est ainsi intéressant de porter attention à:
- Le livre Modern Pandas
pour obtenir des éléments supplémentaires sur la question de la performance
avec
Pandas
; - La question des objets sparse ;
- Les packages
Dask
ouPolars
pour accélérer les calculs ; DuckDB
pour effectuer de manière très efficace des requêtes SQL ;PySpark
pour des données très volumineuses.
Références
Voici une bibliographie sélective des ouvrages intéressants en complément des chapitres de la partie “Manipulation” de ce cours :
Footnotes
Certaines librairies commencent, petit à petit, à s’émanciper de
Numpy
qui n’est pas toujours le plus adapté pour la gestion de certains types de données. Le frameworkArrow
tend à devenir la couche basse utilisée par de plus en plus de librairies de data science. Ce post de blog approfondit de manière très pédagogique ce sujet.↩︎
Citation
@book{galiana2023,
author = {Galiana, Lino},
title = {Python Pour La Data Science},
date = {2023},
url = {https://pythonds.linogaliana.fr/},
doi = {10.5281/zenodo.8229676},
langid = {en}
}