L’environnement Python pour la data science

Python propose un écosystème très riche pour la data science. Ce chapitre fait un tour d’horizon de celui-ci en présentant les principaux packages qui seront présentés dans ce cours.

Tutoriel
Rappels
Author

Lino Galiana

Published

2024-04-27

La richesse des langages open-source est la possibilité d’utiliser des packages développés par des spécialistes. Python est particulièrement bien doté dans le domaine. Pour caricaturer, on lit parfois que Python est le deuxième meilleur langage pour toutes les tâches, ce qui en fait le meilleur langage.

En effet, la malléabilité de Python fait qu’on peut l’aborder de manière très différentes selon que l’on est plutôt SysAdmin, développeur web ou data scientist. C’est ce dernier profil qui va ici nous intéresser.

Le data scientist devant disposer de nombreuses cordes à son arc. Cela se reflète sur l’écosystème de la data science qui est assez éclaté. Cependant, ce foisonnement n’est pas propre à Python puisque R propose encore plus de packages que Python où un certain nombre de framework normalisés limitent l’éclatement de l’écosystème. De plus, le foisonnement de l’environnement du data scientist est une véritable opportunité puisqu’elle permet aux packages de se spécialiser dans un domaine, où ils sont plus efficaces, et aux concepteurs de package d’oser mettre en oeuvre de nouvelles méthodes, indispensables pour que le langage suive les évolutions rapides de la recherche ou de la technologie.

1 Les packages Python essentiels pour le cours et la vie des data scientists

Ce post, dont l’image ci-dessus est tirée, résume la plupart des packages utiles pour un data scientist ou un économiste/sociologue. Nous nous bornerons ici à évoquer ceux utilisés quotidiennement.

numpy

numpy gère tout ce qui est calcul matriciel. Le langage Python est un des langages les plus lents qui soient1. Tous les calculs rapides ne sont pas écrits en Python mais en C++, voire Fortran. C’est le cas du package numpy. Celui-ci est incontournable dès qu’on veut être rapide. Le package scipy est une extension où l’on peut trouver des fonctions statistiques, d’optimisation.

La Cheat Sheet de numpy est pratique: https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Numpy_Python_Cheat_Sheet.pdf

Comme numpy est la brique de base de l’analyse de données, un chapitre de ce cours lui est consacré.

pandas

Avant tout, un bon data scientist doit être capable de s’approprier et manipuler des données rapidement. Pour cette raison, pandas est incontournable. Il gère la plupart des formats de données. Pour être efficace, il est lui aussi implémenté en C++. Le package est rapide si on utilise les méthodes pré-implémentées sur des données d’une taille raisonnable (par rapport à la RAM disponible). Il faut néanmoins s’en méfier avec des données volumineuses. En règle générale, un jeu de données nécessite trois fois plus d’espace en mémoire que les données n’en prennent sur le disque.

La Cheat Sheet de pandas : https://s3.amazonaws.com/assets.datacamp.com/blog_assets/Python_Pandas_Cheat_Sheet_2.pdf

pandas étant un élément incontournable, deux chapitres y sont consacrés.

matplotlib et seaborn

matplotlib existe depuis une vingtaine d’années pour doter Python de fonctionalités graphiques. Il s’agit d’un package très flexible, offrant de nombreuses fonctionalités. Néanmoins, ces dernières années, seaborn a émergé pour simplifier la création de certains graphiques standards de l’analyse de données (histogrammes, diagramme en barre, etc. ). Le succès de seaborn n’éclipse néanmoins pas matplotlib puisque ce dernier est souvent nécessaire pour finaliser la customisation d’un graphique produit par seaborn2

scikit-learn

scikit-learn est le module de machine learning le plus populaire pour trois raisons:

  • il s’appuie sur une API extrêmement consistante (méthodes fit, transform et predict, respectivement pour apprendre des données, appliquer des transformations et prédire sur de nouvelles données) ;
  • il permet de construire des analyses reproductibles en construisant des pipelines de données ;
  • sa documentation est un modèle à suivre.

L’INRIA, institution française, est l’un des éléments moteurs dans la création et la maintenance de scikit-learn

TensorFlow, PyTorch et Keras

Les librairies essentielles pour implémenter et utiliser des modèles de deep learning en Python ont été développées par des acteurs du numérique.

TensorFlow est la librairie la plus mature, mais pas nécessairement la plus facile à prendre en main. D’ailleurs, Google semble l’abandonner en usage interne pour lui préférer JAX. Keras propose une interface high-level, donc plus facile d’utilisation, mais qui n’en reste pas moins suffisante pour une grande variété d’usages. La documentation de Keras est très bien faite.

PyTorch est un framework plus récent mais très complet, dont la syntaxe plaira aux amateurs de programmation orienté-objet. Développé par Facebook, il est très utilisé dans certains domaines de recherche, comme le NLP. Il s’agit du framework dont la dynamique récente a été la plus ascensionnelle.

statsmodels

statsmodels plaira plus aux statisticiens, il implémente des modèles économétriques similaires à scikit-learn. Par rapport à scikit-learn, statsmodels est plus orienté économétrie. La présentation des résultats est très proche de ce qu’on trouve en R.

requests et beautifulsoup

requests est l’une des librairies de base de Python, dédiée à gérer la connexion avec internet. Les amateurs d’API seront des utilisateurs fréquents de celle-ci. Les personnes plus spécialistes de web scraping l’utiliseront avec beautifulsoup qui offre une syntaxe extrêmement puissante pour récupérer automatiquement du contenu de pages web.

nltk et spaCy

Dans le domaine du traitement automisé du langage, plus connu sous son acronyme anglais NLP, les deux packages phares sont nltk et spaCy.

nltk est le package historique. Il existe depuis les années 1990 et propose de nombreuses ressources utiles pour l’analyse textuelle. Néanmoins, ces dernières années, spaCy est venu moderniser l’approche en proposant une approche permettant de mieux intégrer les différentes phases du traitement de données textuelles, une excellente documentation et un meilleur support des langues non anglo-saxonnes, comme le Français.

Mais Python est également un outil privilégié pour communiquer:

  • Une bonne intégration de Python à Markdown (grâce notamment à … R Markdown) qui facilite la construction de documents HTML ou PDF (via Latex)
  • Sphynx et JupyterBook proposent des modèles de documentation très complets
  • bokeh ou streamlit comme alternative à shiny (R)
  • Django et Flask permettent de construire des applications web en Python
  • Les librairies dynamiques, notamment folium ou plotly, sont très appréciées pour construire des visualisations dynamiques qui sont pratiques dans une analyse exploratoire mais également lorsqu’il faut valoriser ses travaux auprès de publics non experts de la donnée.

L’un des nouveaux arrivants dans cet écosystème déjà riche est FastAPI). Avec ce package, il est très facile de transformer un code Python en API ce qui facilite la mise à disposition de données mais aussi de productions par Python (comme la mise à disposition d’une API pour permettre à des personnes de tester les résultats d’un modèle de machine learning).

Ce n’est qu’une petite partie de l’écosystème Python, d’une richesse rare.

2 Environnement autour de Python

Python est un langage très riche, grâce à sa logique open-source. Mais l’un des principaux intérêts réside dans le riche écosystème avec lequel Python s’intègre. On peut donner quelques éléments, dans un inventaire à la Prévert non exaustif.

En premier lieu, des éléments reliés au traitement des données :

  • Spark, le framework dominant dans le domaine du traitement des big-data, très bien interfacé avec Python (grâce à l’API pyspark), qui facilite le traitement des données volumineuses. Son utilisation nécessite cependant d’avoir accès à une infrastructure de calculs distribuée.
  • Cython permet d’intégrer facilement du code C, très efficace avec Python (équivalent de Rcpp pour R).
  • Julia est un langage récent, qui propose une syntaxe familière aux utilisateurs de languages scientifiques (Python, R, MATLAB), tout en permettant des performances proches du C grâce à une compilation à la volée.

Enfin, des éléments permettant un déploiement de résultats ou d’applications en continu : * Les images Docker de Jupyterhub facilitent l’usage de l’intégration continue pour construire des modules, les tester et déployer des site web. * Les services type Binder, Google Colab et Kaggle proposent des kernels Python

3 Rester au courant des évolutions

L’écosystème riche et foisonnant de Python a comme contrepartie qu’il faut rester attentif à ses évolutions pour ne pas voir son capital humain vieillir et ainsi devenir has-been. Alors qu’avec des langages monolithiques comme SAS ou Stata on pouvait se permettre de ne faire de vieille technique mais seulement consulter la documentation officielle, avec Python ou R c’est impossible. Ce cours lui-même est en évolution continue, ce qui est assez exigeant :sweating:, pour épouser les évolutions de l’écosystème.

Twitter est une excellente source d’information pour être rapidement au courant des évolutions du monde de la data science. Les agrégateurs de contenu comme medium ou towardsdatascience proposent des posts de qualité hétérogène mais il peut être utile de recevoir par mail le feed des nouveaux posts : au bout d’un certain temps, cela peut permettre de dégager les nouvelles tendances. Le site realpython propose généralement de très bon posts, complets et pédagogiques.

En ce qui concerne les ouvrages papiers, certains sont de très bonne qualité. Cependant, il convient de faire attention à la date de mise à jour de ceux-ci : la vitesse d’évolution de certains éléments de l’écosystème peut les périmer très rapidement.

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
d75641d 2024-04-22 18:59:01 Lino Galiana Editorialisation des chapitres de manipulation de données (#491)
005d89b 2023-12-20 17:23:04 Lino Galiana Finalise l’affichage des statistiques Git (#478)
1f23de2 2023-12-01 17:25:36 Lino Galiana Stockage des images sur S3 (#466)
09654c7 2023-11-14 15:16:44 Antoine Palazzolo Suggestions Git & Visualisation (#449)
a771183 2023-10-09 11:27:45 Antoine Palazzolo Relecture TD2 par Antoine (#418)
154f09e 2023-09-26 14:59:11 Antoine Palazzolo Des typos corrigées par Antoine (#411)
3bdf3b0 2023-08-25 11:23:02 Lino Galiana Simplification de la structure 🤓 (#393)
78ea2cb 2023-07-20 20:27:31 Lino Galiana Change titles levels (#381)
2dbf853 2023-07-05 11:21:40 Lino Galiana Add nice featured images (#368)
d201e3c 2022-08-03 15:50:34 Lino Galiana Pimp la homepage ✨ (#249)
5123634 2022-06-30 11:24:49 Lino Galiana Amélioration de la première partie (#244)
12965ba 2022-05-25 15:53:27 Lino Galiana :launch: Bascule vers quarto (#226)
2f7b52d 2021-07-20 17:37:03 Lino Galiana Improve notebooks automatic creation (#120)
aeb3995 2021-07-06 11:11:03 avouacr Relecture et ajouts sur anaconda + jupyter (#116)
4cdb759 2021-05-12 10:37:23 Lino Galiana :sparkles: :star2: Nouveau thème hugo :snake: :fire: (#105)
90641c2 2020-09-15 21:16:38 Lino Galiana ajout éléments ecosysteme
f9f00cc 2020-09-15 21:05:54 Lino Galiana enlève quelques TO DO
913047d 2020-09-08 14:44:41 Lino Galiana Harmonisation des niveaux de titre (#17)
56f8532 2020-09-08 10:40:03 Lino Galiana Reprise des éléments de la première séance dans le site web (#14)
Back to top

Footnotes

  1. Python est un langage interprété, comme R. Cela le rend très intelligible, y compris par un non-expert. C’est une des raisons de son succès. Le créateur de Python, Guido Van Rossum, en a fait un des principes philosophiques à l’origine de Python: un code est plus souvent lu qu’écrit. La contrepartie est qu’il s’agit d’une surcouche à des langages plus bas-niveau, notamment C. Ces derniers proposent beaucoup moins de surcouches. En réalité, les fonctions Python font appel, plus ou moins directement, à du C. Une manière d’optimiser le code est ainsi d’arriver, avec le moins de surcouches possible, à la fonction C sous-jacente, beaucoup plus rapide.↩︎

  2. La situation est différente en Rggplot2 a quasiment éclipsé l’outil de graphique de base de R.↩︎

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.