Introduction

Cette introduction propose quelques éléments de révision des concepts de base en Python et présente l’écosystème Python que nous allons découvrir tout au long de ce cours.

Author

Lino Galiana

Published

2024-04-27

1 Introduction

Ce cours rassemble l’ensemble du contenu du cours Python pour la data science que je donne à l’ENSAE depuis 2018. Ce cours était auparavant donné par Xavier Dupré. Quelques éléments supplémentaires sont disponibles dans les slides d’introduction. Des éléments plus avancés sont présents dans un autre cours consacré à la mise en production de projets data science que je donne avec Romain Avouac à l’ENSAE (ensae-reproductibilite.github.io/website)

Python est un langage qui a déjà plus de trente ans mais qui a connu, au cours de la décennie 2010, une nouvelle jeunesse du fait de l’engouement pour la data science.

Python, plus que tout autre langage informatique, réunit des communautés aussi diverses que des statisticiens, des développeurs, des gestionnaires d’applications ou d’infrastructures informatiques, des lycées - Python est au programme du bac français depuis quelques années - ou des chercheurs dans des champs à la fois théoriques et appliqués. Contrairement à beaucoup de langages informatiques qui fédèrent une communauté assez homogène, Python est parvenu à réunir largement grâce à quelques principes centraux : la lisibilité du langage, la simplicité à utiliser des modules, la simplicité à l’associer à des langages plus performants pour certaines tâches données, l’énorme volume de documentation disponible en ligne… Être le deuxième meilleur langage pour réaliser telle ou telle tâche peut ainsi être une source de succès lorsque la concurrence ne dispose pas d’un éventail aussi large d’avantages.

Le succès de Python, de par sa nature de langage couteau-suisse, est indissociable de l’émergence du profil du data scientist, individu capable de s’intégrer à différents niveaux dans la valorisation de données. Davenport and Patil (2012a), dans la Harvard Business Review, ont ainsi pu parler du “boulot le plus sexy du 21e siècle” et ont pu, dix ans plus tard, faire un panorama complet de l’évolution des compétences attendues d’un data scientist dans la même revue (Davenport and Patil 2012b).

La richesse de Python permet de l’utiliser dans toutes les phases du traitement de la donnée, de sa récupération et structuration à partir de sources diverses à sa valorisation. Par le prisme de la data science, nous verrons que Python est un très bon candidat pour assister les data scientists dans tous les aspects du travail de données.

Ce cours introduit différents outils qui permettent de mettre en relation des données et des théories grâce à Python. Néanmoins, ce cours va au-delà d’une simple introduction au langage et propose des éléments plus approfondis, notamment sur les dernières innovations permises par la data science dans les méthodes de travail.

1.1 Pourquoi faire du Python pour l’analyse de données ?

Le succès de scikit-learn et de Tensorflow dans la communauté de la Data-Science ont beaucoup contribué à l’adoption de Python. Cependant, résumer Python à ces quelques librairies serait réducteur tant il s’agit d’un véritable couteau-suisse pour les data scientists, les social scientists ou les économistes.

L’intérêt de Python pour un data scientist ou data economist va au-delà du champ du Machine Learning. Comme pour R, l’intérêt de Python est son rôle central dans un écosystème plus large autour d’outils puissants, flexibles et open-source. Python concurrence très bien R dans son domaine de prédilection, à savoir l’analyse statistique sur des bases de données structurées. Comme dans R, les dataframes sont un concept central de Python. Python est néanmoins bien plus complet dans certains domaines. Outre le Machine Learning, Python est mieux adapté aux données volumineuses que R. Python est également meilleur que R pour faire du webscraping ou accéder à des données par le biais d’API. Dans le domaine de l’économétrie, Python offre l’avantage de la simplicité avec un nombre restreint de packages (scikit et statsmodels) permettant d’avoir des modèles très généraux (les generalized estimating equations) alors qu’il faut choisir parmi une grande variété de packages en R pour obtenir les modèles équivalents. Dans le domaine du Deep Learning, Python écrase la concurrence.
Au contraire, dans certains domaines, R reste meilleur, même si les évolutions très récentes de certains outils peuvent amener à réviser ce constat. Historiquement, R était très bien intégré au langage de publication Markdown ce qui, permet la construction de documents reproductibles très raffinés. L’émergence récente de Quarto, héritier de R Markdown développé par la société Posit permet aux utilisateur de Python de bénéficier également de la richesse de cette approche pour leur langage de prédilection. Ce site web, à l’arborescence relativement complexe, est ainsi construit grâce à cet outil qui permet à la fois de tester les blocs de code présentés mais aussi de produire de manière automatisée les tableaux et graphiques présentés. S’il fallait trouver un point faible à Python par rapport à R dans le domaine de la data science c’est sur la production de graphiques. matplotlib et seaborn, qui sont présentés dans la partie visualisation, sont d’excellents outils. Néanmoins, ggplot2, l’équivalent en R est plus facile de prise en main et propose une syntaxe extrêmement flexible, qu’il est difficile de ne pas apprécier. Cependant, l’écosystème de la visualisation de données est en pleine révolution avec le succès d’Observable qui rapproche l’écosystème JavaScript des développeurs web de la communauté des analystes de données.

Un des avantages comparatifs de Python par rapport à d’autres langages (notamment R et Julia) est sa dynamique, ce que montre l’explosion du nombre de questions sur Stack Overflow.

Cependant, il ne s’agit pas bêtement d’enterrer R. Au contraire, outre leur logique très proche, les deux langages sont dans une phase de convergence avec des initiatives comme reticulate, quarto ou snakemake qui permettent, de manière différente, de créer des chaînes de traitement mélangeant R et Python.

Une autre raison pour laquelle cette guéguerre R/Python n’a pas de sens est que les bonnes pratiques peuvent être transposées de manière presque transparente d’un langage à l’autre. Il s’agit d’un point qui est développé plus amplement dans le cours plus avancé que je donne avec Romain Avouac en dernière année d’ENSAE : ensae-reproductibilite.github.io/website. A terme, les data scientists et chercheurs en sciences sociales ou économie utiliseront de manière presque indifférente, et en alternance, Python et R. Ce cours présentera ainsi régulièrement des analogies avec R pour aider les personnes découvrant Python, mais connaissant déjà bien R, à mieux comprendre certains messages.

1.2 Objectif du cours

Le but de ce cours est de rendre autonome sur l’utilisation de Python dans un contexte de travail de data scientist ou de social scientist (économie, sociologie, géographie…). Autrement dit, il présuppose qu’on désire faire un usage intense de données dans un cadre statistique rigoureux.

La data science est un ensemble de techniques visant à donner du sens à des sources de données diverses. Selon les organisations, les data scientists peuvent ainsi être à l’interface de projets nécessitant un large spectre de compétences (analyse de données textuelles, représentation graphique interactive…), avoir des interactions avec des profils très différents (experts métiers, développeurs, data architect, data engineer…) voire adopter un peu tous ces rôles.

Les innovations récentes de la data science ne se réduisent néanmoins pas qu’à des découvertes méthodologiques. La data science propose un ensemble de techniques et de méthodes de travail pour réduire les coûts de passage d’un protype à une chaine de production pérenne. Ce cours introduit à quelques notions sur le sujet, notamment les pipelines scikit, pour adopter dès l’apprentissage du langage quelques bons réflexes (ensae-reproductibilite.github.io/website).

1.3 Public cible

Ce cours ne revient que de manière secondaire sur les fondements statistiques ou algorithmiques derrière certaines des techniques évoquées. Ne pas connaître ces notions n’empêche néanmoins pas de comprendre le contenu de ce site web. En effet, la facilité d’usage de Python évite de devoir programmer soi-même un modèle, ce qui rend possible l’application de modèles dont on n’est pas expert. La connaissance des modèles sera plutôt nécessaire dans l’interprétation des résultats.

Cependant, la facilité avec laquelle il est possible de construire des modèles complexes avec Python peut laisser apparaître que connaître les spécifités de chaque modèle est inutile. Il s’agirait d’une grave erreur : même si l’implémentation de modèles est aisée, il est nécessaire de bien comprendre la structure des données et leur adéquation avec les hypothèses d’un modèle.

1.4 Reproductibilité

Ce cours donne une place centrale à la notion de reproductibilité. Cette exigence se traduit de diverses manières dans cet enseignement, en particulier en insistant sur un outil indispensable pour favoriser le partage de codes informatiques, à savoir Git.

L’ensemble du contenu du site web est reproductible dans des environnements informatiques divers. Il est bien sûr possible de copier-coller les morceaux de code présents dans ce site. Cette méthode montrant rapidement ses limites, le site présente un certain nombre de boutons disponibles pour ouvrir la page sous un format Jupyter Notebook sur divers pages web :

  • Sur l’ensemble du site web, il est possible de cliquer sur la petite icone pour être redirigé vers le dépôt Github associé à ce cours.

  • Un certain nombre de boutons permettent de transformer chaque page web en Jupyter Notebooks s’il est nécessaire de visualiser ou exécuter du code Python.

Voici, par exemple, ces boutons pour le tutoriel numpy :

Download nbviewer Onyxia Onyxia
Open In Colab githubdev

Pour les agents de la fonction publique, ou les élèves des écoles partenaires, il est recommandé de privilégier le bouton SSPCloud qui est une infrastructure cloud moderne, puissante et flexible développée par l’Insee et accessible à l’url https://datalab.sspcloud.fr1.

L’ensemble du contenu de ce site s’appuie sur des données ouvertes, qu’il s’agisse de données françaises (principalement issues de la plateforme centralisatrice data.gouv ou du site web de l’Insee) ou de données américaines. Les résultats sont donc reproductibles pour quelqu’un disposant d’un environnement identique.

1.5 Architecture du site web

Ce cours présente des tutoriels et des exercices complets. Chaque page est structurée sous la forme d’un problème concret et présente la démarche générique pour résoudre ce problème général.

Vous pouvez naviguer dans l’architecture du site via la table des matières ou par les liens vers le contenu antérieur ou postérieur à la fin de chaque page. Certaines parties, notamment celle consacrée à la modélisation, proposent des exemples fil-rouge pour illustrer la démarche de manière plus extensive.

1.6 Evaluation

Les élèves de l’ENSAE valident le cours grâce à un projet approfondi. Les éléments relatifs à l’évaluation du cours, ainsi qu’une liste des projets déjà effectués, sont disponibles dans la Section Evaluation.

1.7 Références

Davenport, Thomas H, and DJ Patil. 2012a. “Data Scientist, the Sexiest Job of the 21st Century.” Harvard Business Review 90 (5): 70–76. https://hbr.org/2012/10/data-scientist-the-sexiest-job-of-the-21st-century.
———. 2012b. “Is Data Scientist Still the Sexiest Job of the 21st Century?” Harvard Business Review 90 (5): 70–76. https://hbr.org/2012/10/data-scientist-the-sexiest-job-of-the-21st-century.

1.8 Contenu général

{{< list_children >}}

1.9 Eléments supplémentaires

1.10 Structuration de cette partie

{{< list_children >}}

Informations additionnelles

environment files have been tested on.

Latest built version: 2024-04-27

Python version used:

'3.11.6 | packaged by conda-forge | (main, Oct  3 2023, 10:40:35) [GCC 12.3.0]'
Package Version
affine 2.4.0
aiobotocore 2.12.2
aiohttp 3.9.3
aioitertools 0.11.0
aiosignal 1.3.1
alembic 1.13.1
aniso8601 9.0.1
annotated-types 0.6.0
appdirs 1.4.4
archspec 0.2.3
astroid 3.1.0
asttokens 2.4.1
attrs 23.2.0
Babel 2.14.0
bcrypt 4.1.2
beautifulsoup4 4.12.3
black 24.4.2
blinker 1.7.0
blis 0.7.11
bokeh 3.4.0
boltons 23.1.1
boto3 1.34.51
botocore 1.34.51
branca 0.7.1
Brotli 1.1.0
cachetools 5.3.3
cartiflette 0.0.2
Cartopy 0.23.0
catalogue 2.0.10
cattrs 23.2.3
certifi 2024.2.2
cffi 1.16.0
charset-normalizer 3.3.2
click 8.1.7
click-plugins 1.1.1
cligj 0.7.2
cloudpathlib 0.16.0
cloudpickle 3.0.0
colorama 0.4.6
comm 0.2.2
commonmark 0.9.1
conda 24.3.0
conda-libmamba-solver 24.1.0
conda-package-handling 2.2.0
conda_package_streaming 0.9.0
confection 0.1.4
contextily 1.6.0
contourpy 1.2.1
cryptography 42.0.5
cycler 0.12.1
cymem 2.0.8
cytoolz 0.12.3
dask 2024.4.1
dask-expr 1.0.10
debugpy 1.8.1
decorator 5.1.1
dill 0.3.8
distributed 2024.4.1
distro 1.9.0
docker 7.0.0
duckdb 0.10.1
en-core-web-sm 3.7.1
entrypoints 0.4
et-xmlfile 1.1.0
exceptiongroup 1.2.0
executing 2.0.1
fastjsonschema 2.19.1
fiona 1.9.6
flake8 7.0.0
Flask 3.0.2
folium 0.16.0
fontawesomefree 6.5.1
fonttools 4.51.0
frozenlist 1.4.1
fsspec 2023.12.2
GDAL 3.8.4
gensim 4.3.2
geographiclib 2.0
geopandas 0.12.2
geoplot 0.5.1
geopy 2.4.1
gitdb 4.0.11
GitPython 3.1.43
google-auth 2.29.0
graphene 3.3
graphql-core 3.2.3
graphql-relay 3.2.0
graphviz 0.20.3
great-tables 0.5.0
greenlet 3.0.3
gunicorn 21.2.0
htmltools 0.5.1
hvac 2.1.0
idna 3.6
imageio 2.34.1
importlib_metadata 7.1.0
importlib_resources 6.4.0
inflate64 1.0.0
ipykernel 6.29.3
ipython 8.22.2
ipywidgets 8.1.2
isort 5.13.2
itsdangerous 2.1.2
jedi 0.19.1
Jinja2 3.1.3
jmespath 1.0.1
joblib 1.3.2
jsonpatch 1.33
jsonpointer 2.4
jsonschema 4.21.1
jsonschema-specifications 2023.12.1
jupyter-cache 1.0.0
jupyter_client 8.6.1
jupyter_core 5.7.2
jupyterlab_widgets 3.0.10
kaleido 0.2.1
kiwisolver 1.4.5
kubernetes 29.0.0
langcodes 3.4.0
language_data 1.2.0
lazy_loader 0.4
libmambapy 1.5.7
llvmlite 0.42.0
locket 1.0.0
lxml 5.2.1
lz4 4.3.3
Mako 1.3.2
mamba 1.5.7
mapclassify 2.6.1
marisa-trie 1.1.0
Markdown 3.6
MarkupSafe 2.1.5
matplotlib 3.8.3
matplotlib-inline 0.1.6
mccabe 0.7.0
menuinst 2.0.2
mercantile 1.2.1
mizani 0.11.2
mlflow 2.11.3
mlflow-skinny 2.11.3
msgpack 1.0.7
multidict 6.0.5
multivolumefile 0.2.3
munkres 1.1.4
murmurhash 1.0.10
mypy 1.9.0
mypy-extensions 1.0.0
nbclient 0.10.0
nbformat 5.10.4
nest_asyncio 1.6.0
networkx 3.3
nltk 3.8.1
numba 0.59.1
numpy 1.26.4
oauthlib 3.2.2
opencv-python-headless 4.9.0.80
openpyxl 3.1.2
OWSLib 0.28.1
packaging 23.2
pandas 2.2.1
paramiko 3.4.0
parso 0.8.4
partd 1.4.1
pathspec 0.12.1
patsy 0.5.6
Pebble 5.0.7
pexpect 4.9.0
pickleshare 0.7.5
pillow 10.3.0
pip 24.0
pkgutil_resolve_name 1.3.10
platformdirs 4.2.0
plotly 5.19.0
plotnine 0.13.5
pluggy 1.4.0
polars 0.20.18
preshed 3.0.9
prometheus_client 0.20.0
prometheus-flask-exporter 0.23.0
prompt-toolkit 3.0.42
protobuf 4.25.3
psutil 5.9.8
ptyprocess 0.7.0
pure-eval 0.2.2
py7zr 0.20.8
pyarrow 15.0.0
pyarrow-hotfix 0.6
pyasn1 0.5.1
pyasn1-modules 0.3.0
pybcj 1.0.2
pycodestyle 2.11.1
pycosat 0.6.6
pycparser 2.21
pycryptodomex 3.20.0
pydantic 2.7.1
pydantic_core 2.18.2
pyflakes 3.2.0
Pygments 2.17.2
PyJWT 2.8.0
pylint 3.1.0
PyNaCl 1.5.0
pynsee 0.1.7
pyOpenSSL 24.0.0
pyparsing 3.1.2
pyppmd 1.1.0
pyproj 3.6.1
pyshp 2.3.1
PySocks 1.7.1
python-dateutil 2.9.0
python-dotenv 1.0.1
python-magic 0.4.27
pytz 2024.1
pyu2f 0.1.5
pywaffle 1.1.0
PyYAML 6.0.1
pyzmq 25.1.2
pyzstd 0.15.10
QtPy 2.4.1
querystring-parser 1.2.4
rasterio 1.3.10
referencing 0.34.0
regex 2023.12.25
requests 2.31.0
requests-cache 1.2.0
requests-oauthlib 2.0.0
rpds-py 0.18.0
rsa 4.9
Rtree 1.2.0
ruamel.yaml 0.18.6
ruamel.yaml.clib 0.2.8
s3fs 2023.12.2
s3transfer 0.10.1
scikit-image 0.23.2
scikit-learn 1.4.1.post1
scipy 1.13.0
seaborn 0.13.2
setuptools 69.2.0
shapely 2.0.3
six 1.16.0
smart-open 6.4.0
smmap 5.0.0
snuggs 1.4.7
sortedcontainers 2.4.0
soupsieve 2.5
spacy 3.7.4
spacy-legacy 3.0.12
spacy-loggers 1.0.5
SQLAlchemy 2.0.29
sqlparse 0.4.4
srsly 2.4.8
stack-data 0.6.2
statsmodels 0.14.1
tabulate 0.9.0
tblib 3.0.0
tenacity 8.2.3
texttable 1.7.0
thinc 8.2.3
threadpoolctl 3.4.0
tifffile 2024.4.24
tomli 2.0.1
tomlkit 0.12.4
toolz 0.12.1
topojson 1.8
tornado 6.4
tqdm 4.66.2
traitlets 5.14.2
truststore 0.8.0
typer 0.9.4
typing_extensions 4.11.0
tzdata 2024.1
Unidecode 1.3.8
url-normalize 1.4.3
urllib3 1.26.18
wasabi 1.1.2
wcwidth 0.2.13
weasel 0.3.4
webcolors 1.13
webdriver-manager 4.0.1
websocket-client 1.7.0
Werkzeug 3.0.2
wheel 0.43.0
widgetsnbextension 4.0.10
wordcloud 1.9.3
wrapt 1.16.0
xgboost 2.0.3
xlrd 2.0.1
xyzservices 2024.4.0
yarl 1.9.4
yellowbrick 1.5
zict 3.0.0
zipp 3.17.0
zstandard 0.22.0

View file history

SHA Date Author Description
005d89b 2023-12-20 17:23:04 Lino Galiana Finalise l’affichage des statistiques Git (#478)
1684220 2023-12-02 12:06:40 Antoine Palazzolo Première partie de relecture de fin du cours (#467)
1f23de2 2023-12-01 17:25:36 Lino Galiana Stockage des images sur S3 (#466)
69cf52b 2023-11-21 16:12:37 Antoine Palazzolo [On-going] Suggestions chapitres modélisation (#452)
a771183 2023-10-09 11:27:45 Antoine Palazzolo Relecture TD2 par Antoine (#418)
e8d0062 2023-09-26 15:54:49 Kim A Relecture KA 25/09/2023 (#412)
154f09e 2023-09-26 14:59:11 Antoine Palazzolo Des typos corrigées par Antoine (#411)
6178ebe 2023-09-26 14:18:34 Lino Galiana Change quarto project type (#409)
9a4e226 2023-08-28 17:11:52 Lino Galiana Action to check URL still exist (#399)
8082302 2023-08-25 17:48:36 Lino Galiana Mise à jour des scripts de construction des notebooks (#395)
3bdf3b0 2023-08-25 11:23:02 Lino Galiana Simplification de la structure 🤓 (#393)
dde3e93 2023-07-21 22:22:05 Lino Galiana Fix bug on chapter order (#385)
2dbf853 2023-07-05 11:21:40 Lino Galiana Add nice featured images (#368)
f21a24d 2023-07-02 10:58:15 Lino Galiana Pipeline Quarto & Pages 🚀 (#365)
Back to top

Footnotes

  1. Pour les utilisateurs de cette infrastructure, les notebooks sont également listés, parmi de nombreuses autres ressources de qualité, sur la page Formation↩︎

Citation

BibTeX 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}
}
For attribution, please cite this work as:
Galiana, Lino. 2023. Python Pour La Data Science. https://doi.org/10.5281/zenodo.8229676.