Partie 2: communiquer à partir de données

Cette partie présente les outils pour visualiser des données avec Python, qu’il s’agisse de graphiques figés (matplotlib, seaborn, geoplot…) ou de visualisation réactives (plotly, folium, etc.)

Introduction
Visualisation
Author

Lino Galiana

Published

2024-05-08

1 Introduction

Une partie essentielle du travail du data scientist consiste à synthétiser l’information que contient ses jeux de données afin de distinguer ce qui relève du signal, sur lequel il pourra se concentrer, et ce qui relève du bruit inhérent à tout jeu de données. Dans le travail du data scientist, lors d’une phase exploratoire, il y a donc un aller-retour constant entre information synthétique et jeu de données désagrégé. Il est ainsi essentiel de savoir synthétiser l’information dans un jeu de données avant d’en saisir la structure, cette dernière pouvant ensuite guider les exploitations ultérieures, pour une phase de modélisation ou de correction de données (détection d’anomalies ou de mauvaises remontées de données).

Nous avons déjà exploré une partie essentielle de ce travail, à savoir la construction de statistiques descriptives pertinentes et fiables. Néanmoins, si on se contentait de présenter l’information en utilisant des sorties brutes issues du combo groupby et agg sur un DataFrame Pandas, notre connaissance des données serait assez limitée. La mise en oeuvre de tableaux stylisés à partir de great tables constituait déjà un progrès dans cette démarche mais, en vérité, notre cerveau se représente l’information de manière beaucoup plus intuitive par le biais de visualisations graphiques simples.

1.1 La visualisation des données, une part essentiel du travail de communication

En tant qu’humains, nos capacités cognitives étant limitées, nous ne pouvons appréhender qu’une information limitée là où l’ordinateur est capable de traiter de grands volumes d’information. En tant que data scientist, cela signifie qu’utiliser nos compétences informatiques et statistiques pour obtenir des représentations synthétiques de nos nombreux jeux de données est essentiel pour être en mesure de répondre à nos besoins opérationnels ou statistiques. L’ensemble des méthodes et des outils qui constituent la boîte à outil des data scientists vise à simplifier l’appréhension puis l’exploitation de jeux de données dont le volume dépasse nos capacités cognitives.

Ceci nous entraîne vers la question de la visualisation des données, un ensemble d’outils et de principes pour représenter de manière synthétique des faits stylisés ou contextualiser une donnée individuelle. La visualisation de données est l’art et la science de représenter visuellement des informations complexes et abstraites à l’aide d’éléments visuels. Son objectif principal est de synthétiser l’information présente dans un ensemble de données afin de faciliter la compréhension des enjeux de celle-ci pour une analyse ultérieure. La visualisation de données permet, entre autres, de mettre en évidence des tendances, des corrélations ou des anomalies qui pourraient être difficiles voire impossibles à saisir simplement en examinant des données brutes, ces dernières nécessitant une certaine mise en contexte pour porter du sens.

La visualisation de données joue un rôle crucial dans le processus d’analyse de données en fournissant des moyens visuels pour explorer, interpréter et communiquer des informations. Elle facilite la communication entre experts de la données, décideurs et grand public, en permettant de raconter des histoires basées sur les données de manière plus convaincante et engageante.

1.2 La place de la visualisation dans le processus de valorisation de la donnée

La visualisation des données n’est pas restreinte à la phase finale d’un projet, à la communication de résultats à une audience qui n’a pas accès à la donnée ou n’a pas les moyens de la valoriser. La visualisation intervient à toutes les étapes du processus de valorisation de la donnée. Il s’agit d’ailleurs d’un travail essentiel pour trouver comment basculer de l’enregistrement, un instantané d’un phénomène, à une donnée, un enregistrement qui a une valeur parce qu’il porte une information en tant que telle ou lorsqu’il est combiné avec d’autres enregistrements.

Le travail quotidien du data scientist consiste à regarder un jeu de données sous toutes ses coutures pour identifier les axes prioritaires d’extraction de valeur. Savoir rapidement quelles statistiques représenter, et comment, est essentiel pour gagner du temps sur cette partie exploratoire. Il s’agit principalement d’un travail de communication envers soi-même qui peut se permettre d’être brouillon car il s’agit de dégrossir le travail avant de polir certains angles. L’enjeu à ce niveau du processus est de ne pas manquer une dimension qui pourrait être porteuse de valeur.

Le travail de communication réellement chronophage intervient plutôt lorsqu’on communique à une audience ayant un accès limité à des données, ne connaissant pas bien les sources, ayant un temps d’attention sur limité ou n’ayant pas des compétences quantitatives. Ces publics ne peuvent se satisfaire d’une sortie brute comme un DataFrame dans un notebook ou un graphique produit en quelques secondes avec la méthode plot de Pandas. Il convient de s’adapter à leurs attentes, qui évoluent, et aux outils qu’ils connaissent, d’où la place de plus en plus importante prise par les sites web de data visualisations.

2 Communiquer, une ouverture au data storytelling

La visualisation de données a ainsi une place à part dans l’ensemble des techniques de la data science. Elle intervient à tous les stades du processus de production de la donnée, de l’amont (analyse exploratoire) à l’aval (restitution à des publics multiples) et peut, si elle est bien construite, permettre de saisir de manière intuitive la structure des données ou les enjeux de son analyse.

Art de la synthèse, la visualisation de données est également l’art de raconter une histoire et peut même, lorsqu’elle est bien construite, prétendre au rang de production artistique. La dataviz est un métier en soi dont on trouve de plus en plus de praticiens dans les titres de presse ou dans des entreprises spécialisées (Datawrapper par exemple).

Sans prétendre construire des visualisations aussi riches que celles des spécialistes, tout data scientist se doit d’être en mesure de pouvoir produire rapidement quelques visualisations permettant de synthétiser les jeux de données à sa disposition. Une visualisation claire et lisible tout en restant simple peut être meilleure qu’un discours pour faire passer un message.

De même qu’un discours, une visualisation est une communication pour laquelle un locuteur - la personne construisant la visualisation - cherche à transmettre une information à un récepteur - éventuellement la même personne que le locuteur puisqu’une visualisation peut être construite pour soi-même dans une analyse exploratoire. Il n’est donc pas surprenant qu’à l’époque où la sémiologie occupait une part importante dans les débats intellectuels, notamment autour de la figure de Roland Barthes, le concept de sémiologie graphique ait émergé autour de la personne de Jacques Bertin (Bertin 1967; Palsky 2017). Cette approche permet de réfléchir sur la pertinence des techniques mises en oeuvre pour transmettre un message graphique et de nombreuses visualisations, si elles suivaient quelques-unes de ces règles, pourraient être améliorées à peu de frais.

Eric Mauvière, statisticien français héritier de l’école de la sémiologie graphique de Bertin, propose d’excellents contenus sur le sujet. Certaines des présentations qu’il a pu faire, notamment celle pour le SSPHub présentées dans la Note 2.1 devraient être visionnées dans toutes les formations de data science tant elles évoquent les nombreux écueils rencontrés par les data scientists.

Un exemple de deux visualisations faites sur le même jeu de données par Eric Mauvière, voir Note 2.1

Un exemple de deux visualisations faites sur le même jeu de données par Eric Mauvière, voir Note 2.1

3 Communiquer, une ouverture à la mise à disposition d’applications

L’objectif de ce cours est d’introduire aux principaux outils et à la démarche que doivent adopter les data scientists face à divers jeux de données. Il devient néanmoins de plus en plus commun pour les data scientists de développer et mettre à disposition des applications interactives proposant un certain nombre d’explorations et de visualisations automatisées de données. Il s’agit d’enjeux plus avancés que ce cours mais qui constituent souvent un point d’entrée vers la data science pour des publics proches des data scientists.

Nous évoquerons certains des outils privilégiés pour faire cela, notamment les écosystèmes liés aux applications web et aux outils Javascript. Ce besoin, devenu assez standard pour les data scientists, fait la passerelle avec la mise en production, l’enjeu principal d’un cours de 3e année de l’ENSAE construit par Romain Avouac et moi-même (site web du cours). Le présent site web, par exemple, est construit selon ce principe grâce à des outils permettant d’exécuter de manière reproductible du Python sur des serveurs standardisés et ensuite mettre à disposition ce code par le biais d’un site web.

4 L’écosystème Python

Pour revenir à notre cours, nous présenterons dans cette partie quelques librairies et visualisations basiques en Python permettant de partir sur de bonnes bases. Les ressources pour approfondir et progresser dans l’art de la visualisation ne manquent pas, comme cet ouvrage (Wilke 2019).

4.1 Les packages de visualisations de données

L’écosystème Python pour la visualisation de données est très riche et très éclaté. Il est possible de consacrer des livres entiers à celui-ci (Dale 2022). Python propose de nombreuses librairies pour produire de manière rapide et relativement simple des visualisations de données1.

Les librairies graphiques se distinguent principalement en deux familles:

  • Les librairies de représentations figées. Celles-ci ont plutôt vocation à être intégrées dans des publications figées type PDF ou documents texte. Nous présenterons principalement Matplotlib et Seaborn mais il en existe d’autres, en pleine émergence, comme Plotnine, l’adaptation de ggplot2 à l’écosystème Python.
  • Les librairies de représentations réactives. Celles-ci sont adaptées à des représentations web et offrent la possibilité aux lecteurs d’agir sur la représentation graphique affichée. Les librairies qui proposent ces fonctionnalités reposent généralement sur JavaScript, l’écosystème du développement web, pour lequel elles offrent un point d’entrée via Python. Nous évoquerons principalement Plotly et Folium dans cette famille mais il existe de nombreux autres frameworks dans ce domaine2.

Il est tout à fait possible de faire des visualisations sophistiquées avec une chaine de bout en bout Python puisqu’il s’agit d’un langage couteau-suisse dont l’écosystème est très riche. Néanmoins, Python n’est pas la panacée et il peut parfois être utile, pour obtenir un produit fini parfaitement poli, de finaliser le travail avec d’autres langages, comme Javascript pour les visualisations réactives ou QGIS pour le travail cartographique. Ce cours donnera les outils minimums pour faire un travail rapide et plaisant mais le diable étant dans les détails, il ne faut pas s’arcbouter à vouloir utiliser Python pour tout et n’importe quoi.

Dans le domaine de la visualisation, ce cours adopte le parti pris d’explorer quelques librairies centrales à partir d’un nombre restreint d’exemples en répliquant des graphiques qu’on peut trouver sur le site d’open data de la mairie de Paris. La meilleure école pour la visualisation restant la pratique sur des jeux de données, il est recommandé d’explorer la richesse de l’écosystème de l’open data pour expérimenter des visualisations.

4.2 Les applications de visualisation

Cette partie du cours se focalise sur des représentations synthétiques simples. Elle n’évoque pas (encore ?) la construction d’applications de visualisation de données où un ensemble de graphiques se mettent à jour de manière synchrone en fonction d’actions d’utilisateurs.

Ceci dépasse en effet le cadre d’un cours d’introduction car construire ces applications impliquent de maîtriser des concepts plus complexes comme l’interaction entre une page web et un serveur, d’avoir des rudiments de connaissance en Linux, etc. Les concepts nécessaires à la compréhension de ces outils sont au coeur du cours de 3e année “Mise en production de projets de data science que Romain Avouac donnons en 3e année d’ENSAE.

Néanmoins, comme la valorisation de données sous une forme applicative est très commune, il il est utile a minima d’évoquer la dualité entre sites statiques et applications dynamiques afin de donner les bons gestes et pointer vers les outils adéquat. Dans le monde de l’applicatif, il est important de distinguer le front (la page visible par les utilisateurs de l’application) du back office (le moteur qui effectue des actions en fonction des paramètres choisis par l’utilisateur de la page).

Il existe principalement deux paradigmes pour faire interagir ces deux éléments. La distinction principale entre ces deux approches est qu’elles s’appuient sur des serveurs différents. Un site statique repose sur un serveur web là où Streamlit s’appuie sur serveur classique en backend. La différence principale entre ces deux types de serveurs réside principalement dans leur fonction et leur utilisation:

  • Un serveur web est spécifiquement conçu pour stocker, traiter et livrer des pages web (le front) aux clients. Cela inclut des fichiers HTML, CSS, JavaScript, images, etc. Les serveurs web écoutent les requêtes HTTP/HTTPS provenant des navigateurs des utilisateurs et y répondent en envoyant les données demandées. Cela n’empêche pas d’avoir des étapes complexes de valorisation de données, ni de la réactivité en embarquant du Javascript dans l’application mais les étapes de traitement en Python sont faites en amont de la mise à disposition de l’application. Pour les utilisateurs de Python, il existe plusieurs constructeurs de sites statiques avant une mise à disposition par le biais d’un hébergement sur Github Pages. Les deux écosystèmes les plus communs sont Quarto Markdown et Django, le premier étant plus simple d’usage et de maintenance que le second. Ce site, par exemple, est construit grâce à Quarto ce qui assure la reproductibilité des exemples présentés et une mise en forme ergonomique et paramétrable des résultats.
  • Un serveur backend classique est conçu pour effectuer des opérations en réponse à un front, en l’occurrence une page web. Dans le contexte d’une application construite avec Python, il s’agit d’un serveur avec l’environnement Python ad hoc pour exécuter le code nécessaire à répondre à toute action d’un utilisateur de l’application. Le code est exécuté à la volée et non une fois pour toute comme dans l’approche précédente. Il s’agit donc d’un paradigme pouvant permettre plus de complexité applicative mais représentant un défi supplémentaire lors de la phase de mise en production. Dans l’écosystème Python, les deux principaux outils permettant de construire de telles applications sont Streamlit et Dash, le premier étant plus rapide à mettre en oeuvre que le second. Plus récemment, l’écosystème équivalent dominant en R, Shiny a été adapté en Python par Posit.

Les écosystèmes présentés ci-dessus pour les applications réactives sont des frameworks web. Il se distinguent des clients lourds comme tkinter, l’outil historique pour faire des interfaces graphiques. Outre l’aspect plus rudimentaire des interfaces tkinter par rapport à celles de Streamlit, Dash ou Shiny, il existe des raisons fortes pour privilégier ces derniers à tkinter.

Ce dernier est un client lourd. Autrement dit, il est adhérent à un système d’exploitation et à des installations de packages en amont du fonctionnement de l’interface. Il est bien sûr possible de rendre portable celle-ci mais, comme cela est développé dans le cours de mise en production, il y a de nombreuses raisons pour lesquelles cette approche peut provoquer des erreurs ou des bugs inattendus. Les frameworks web présentent l’intérêt de simplifier cette mise à disposition en dissociant le front (des pages HTML et du CSS) du back (du code Python). Ils se sont donc imposés naturellement même si on retrouve encore beaucoup de ressources en ligne datées sur le développement d’applications avec tkinter.

En ce qui concerne la construction d’applications, le premier réflexe à avoir est: “ai-je besoin de faire une application réactive ou un site statique ne suffit-il pas ?”. Ce dernier étant beaucoup plus facile à mettre en oeuvre et ayant une charge de maintenance minimale, c’est souvent un choix rationnel. S’il devient complexe de faire un site statique, par exemple parce qu’ils impliquent des calculs sophistiqués qu’il serait complexe de mettre en oeuvre sans compétences JavaScript, on peut alors se poser la question de la séparation entre front et back en reportant les calculs vers une API, construite par exemple par le biais de FastAPI. Il s’agit, par exemple, d’une méthode pratique pour mettre à disposition un modèle de machine learning comme le dernier chapitre de la partie modélisation l’évoquera. Si la mise en oeuvre d’une API est compliquée ou bien est un bazooka pour tuer une mouche, alors on pourra aller vers une application réactive du type de Streamlit.

Encore une fois, la construction d’une application fait appel à des concepts qui dépassent un niveau introductif en Python. Avoir conscience des bons réflexes peut néanmoins faire économiser un temps non négligeable en évitant de patauger dans la semoule à cause d’un mauvais choix initial.

4.3 Résumé de cette partie

Pour en revenir au contenu de cette partie après cet aparté, celle-ci est divisée en deux et chaque chapitre est lui-même dual, selon qu’on s’intéresse aux représentations figées ou dynamiques :

  • Dans un premier temps, nous évoquerons des représentations graphiques standards (histogrammes, diagrammes en barre…) pour synthétiser certaines informations quantitatives ;
    • Les représentations fixes reposeront sur Pandas, Matplotlib et Seaborn
    • Les graphiques réactifs s’appuieront sur Plotly
  • Dans un deuxième temps, nous présenterons les représentations cartographiques:
    • Les cartes fixes avec Geopandas ou Geoplot
    • Les cartes réactives avec Folium (adaptation Python de la librairie Leaflet.js)

4.4 Références utiles

La visualisation de données est un art qui s’apprend, au début, principalement par la pratique. Néanmoins, il n’est pas évident de produire des visualisations lisibles et ergonomiques et il est utile de s’inspirer d’exemples de spécialistes (les grands titres de presse disposent d’excellentes visualisations).

Voici quelques ressources utiles sur ces sujets :

Quelques ressources sur Streamlit ou Dash

Outre notre cours de 3e année, le lab de data science de l’Insee a construit de nombreux tutoriels pour s’appropier les écosystèmes d’applications réactives en Python qui sont l’un des produits les plus attractifs de l’écosystème Python.

Voici par exemple un tutoriel 101 très détaillé sur Streamlit permettant de créer une application type Yuka sur les données de l’openfoodfacts.

Et quelques références supplémentaires, citées dans cette introduction :

Bertin, Jacques. 1967. Sémiologie Graphique. Paris: Mouton/Gauthier-Villars.
Dale, Kyran. 2022. Data Visualization with Python and JavaScript. " O’Reilly Media, Inc.".
Palsky, Gilles. 2017. “La sémiologie Graphique de Jacques Bertin a Cinquante Ans.” Visions Carto (En Ligne).
Wilke, Claus O. 2019. Fundamentals of Data Visualization: A Primer on Making Informative and Compelling Figures. O’Reilly Media.

Informations additionnelles

environment files have been tested on.

Latest built version: 2024-05-08

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.15.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
chromedriver-autoinstaller 0.6.4
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.1
greenlet 3.0.3
gunicorn 21.2.0
h11 0.14.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.1
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
outcome 1.3.0.post0
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
selenium 4.20.0
setuptools 69.2.0
shapely 2.0.3
six 1.16.0
smart-open 6.4.0
smmap 5.0.0
sniffio 1.3.1
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.5.3
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
trio 0.25.0
trio-websocket 0.11.1
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
wsproto 1.2.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
d02515b 2024-04-27 21:32:25 Lino Galiana Eléments sur les applis & évaluation (#495)
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)
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)
5d4874a 2023-08-11 15:09:33 Lino Galiana Pimp les introductions des trois premières parties (#387)
2dc82e7 2022-10-18 22:46:47 Lino Galiana Relec Kim (visualisation + API) (#302)
8e5edba 2022-09-02 11:59:57 Lino Galiana Ajoute un chapitre dask (#264)
a4e2426 2022-06-16 19:34:18 Lino Galiana Improve style (#238)
12965ba 2022-05-25 15:53:27 Lino Galiana :launch: Bascule vers quarto (#226)
66a5276 2021-11-23 16:13:20 Lino Galiana Relecture partie visualisation (#181)
4cdb759 2021-05-12 10:37:23 Lino Galiana :sparkles: :star2: Nouveau thème hugo :snake: :fire: (#105)
0a0d034 2021-03-26 20:16:22 Lino Galiana Ajout d’une section sur S3 (#97)
5ac3cbe 2020-09-28 18:59:24 Lino Galiana Continue la partie graphiques (#54)
8ed01f4 2020-09-24 21:27:29 Lino Galiana Ajout d’une partie visualisation
Back to top

Footnotes

  1. Pour être honnête, pendant longtemps Python a été sur ce point un peu moins agréable que R qui bénéficie de l’incontournable librairie ggplot2.

    N’étant pas construite sur la grammaire des graphiques, la principe librairie de graphiques en Python qu’est Matplotlib est plus fastidieuse à utiliser que ggplot2.

    seaborn, que nous présenterons, facilite un peu le travail de représentation graphique mais, là encore, il est difficile de faire plus malléable et universel que ggplot2.

    La librairie plotnine vise à proposer une implémentation similaire à ggplot pour les utilisateurs de Python. Son développement est à suivre.↩︎

  2. A cet égard, je recommande vivement de suivre l’actualité de la dataviz sur la plateforme Observable qui tend à rapprocher les communautés des spécialistes de la dataviz et des analystes de données. La librairie Plot pourrait devenir un nouveau standard dans les prochaines années, sorte d’intermédiaire entre ggplot et d3.↩︎

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.