You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Nous avons vu dans les chapitres précédents comment récupérer, et harmoniser, des données issues de multiples sources: fichiers type CSV, API, _webscraping_, etc. Le panorama des manières possibles de consommer de la donnée serait incomplet sans évoquer un nouveau venu dans le paysage de la donnée, à savoir le format de données `Parquet`. Du fait de ses caractéristiques techniques pensées pour l'analyse de données, et de sa simplicité d'usage avec `Python`, ce format devient de plus en plus incontournable. Il s'agit d'ailleurs d'une pierre angulaire des infrastructures _cloud_ qui, depuis le milieu des années 2010, tendent à devenir l'environnement usuel dans le domaine de la _data science_ (pour plus de détails, voir le [cours de mise en production de Romain Avouac et moi](https://ensae-reproductibilite.github.io/website/chapters/big-data.html)).
18
+
Nous avons vu dans les chapitres précédents comment récupérer, et harmoniser, des données issues de multiples sources: fichiers type CSV, API, _webscraping_, etc. Le panorama des manières possibles de consommer de la donnée serait incomplet sans évoquer un nouveau venu dans le paysage de la donnée, à savoir le format de données `Parquet`.
19
+
20
+
Du fait de ses caractéristiques techniques pensées pour l'analyse de données, et de sa simplicité d'usage avec `Python`, ce format devient de plus en plus incontournable. Il s'agit d'ailleurs d'une pierre angulaire des infrastructures _cloud_ qui, depuis le milieu des années 2010, tendent à devenir l'environnement usuel dans le domaine de la _data science_ (pour plus de détails, voir le [cours de mise en production de Romain Avouac et moi](https://ensae-reproductibilite.github.io/website/chapters/big-data.html)).
Ce chapitre est consacré à la visualisation de données et propose une tâche classique du quotidien des _data scientists_ et _data engineers_ : la construction de figures utiles à un tableau de bord (_dashboard_). Pour faire ceci, nous allons répliquer quelques figures disponibles en ligne - pas toujours parfaites - et utiliser plusieurs écosystèmes de visualisation disponibles en `Python` afin d'en mesurer les forces et faiblesses.
24
24
25
+
25
26
::: {.callout-tip}
26
27
## Compétences à l'issue de ce chapitre
27
28
@@ -45,7 +46,7 @@ Les bonnes visualisations de données, comme celles du _New York Times_, reposen
45
46
46
47
Transmettre une information synthétique de manière limpide à un public ne s'inventant pas, il est recommandé de réfléchir à la réception d'une visualisation et aux messages principaux que celle-ci est censée transmettre. Cette [présentation d'Eric Mauvière](https://ssphub.netlify.app/talk/2024-02-29-mauviere/) illustre, avec de nombreux exemples, la manière dont des choix de visualisation affectent la pertinence du message délivré.
47
48
48
-
Parmi les autres ressources que j'ai trouvées utiles par le passé, ce post de blog de `datawrapper`](https://blog.datawrapper.de/text-in-data-visualizations/) (une référence dans le domaine de la visualisation) est très intéressant. Ce [post de blog d'Albert Rapp](https://albert-rapp.de/posts/ggplot2-tips/10_recreating_swd_look/10_recreating_swd_look) est montre également comment construire graduellement une bonne visualisation de données et mérite d'être relu de temps en temps.
49
+
Parmi les autres ressources que j'ai trouvées utiles par le passé, ce post de blog de [`datawrapper`](https://blog.datawrapper.de/text-in-data-visualizations/) (une référence dans le domaine de la visualisation) est très intéressant. Ce [post de blog d'Albert Rapp](https://albert-rapp.de/posts/ggplot2-tips/10_recreating_swd_look/10_recreating_swd_look) est montre également comment construire graduellement une bonne visualisation de données et mérite d'être relu de temps en temps.
49
50
50
51
51
52
:::
@@ -154,7 +155,7 @@ Pour les chapitres de visualisation, il est vivement recommandé d’utiliser `P
154
155
155
156
Cela permet de visualiser les graphiques immédiatement sous chaque cellule de code, de les ajuster facilement, et de tester des modifications en temps réel.
156
157
157
-
À l’inverse, si l'on exécute des scripts depuis une console classique (par exemple en écrivant dans un fichier `.py` et en exécutant ligne à ligne avec <kbd>MAJ</kbd>+,<kbd>ENTREE</kbd> dans `VSCode`) les graphiques ne vont pas s'afficher dans une fenêtre popup_ ce qui nécessite de faire des commandes supplémentaires pour les enregistrer, avant d'ouvrir les exports manuellement et pouvoir corriger le cas échéant le code. L’expérience d’apprentissage en devient plus laborieuse.
158
+
À l’inverse, si l'on exécute des scripts depuis une console classique (par exemple en écrivant dans un fichier `.py` et en exécutant ligne à ligne avec <kbd>MAJ</kbd>+,<kbd>ENTREE</kbd> dans `VSCode`) les graphiques ne vont pas s'afficher dans une fenêtre _popup_. Cela nécessite de faire des commandes supplémentaires pour les enregistrer, avant d'ouvrir les exports manuellement et pouvoir corriger le cas échéant le code. L’expérience d’apprentissage en devient plus laborieuse.
158
159
:::
159
160
160
161
::::
@@ -209,6 +210,7 @@ Pour importer les librairies graphiques que nous utiliserons dans ce chapitre, i
209
210
210
211
```{python}
211
212
#| echo: true
213
+
#| label: import-libs-fig
212
214
import matplotlib.pyplot as plt
213
215
import seaborn as sns
214
216
from plotnine import * #<1>
@@ -230,6 +232,7 @@ To import the graphical libraries we will use in this chapter, execute
230
232
231
233
```{python}
232
234
#| echo: true
235
+
#| label: import-libs-fig-en
233
236
import matplotlib.pyplot as plt
234
237
import seaborn as sns
235
238
from plotnine import * #<1>
@@ -332,7 +335,6 @@ These elements are the minimum required to understand the logic of `matplotlib`.
332
335
333
336
{{< include "01_matplotlib/_exo1_solution.qmd" >}}
334
337
335
-
336
338
::: {.content-visible when-profile="fr"}
337
339
On commence à avoir quelque chose qui commence à transmettre un message synthétique sur la nature des données. On peut néanmoins remarquer plusieurs éléments problématiques (par exemple les labels) mais aussi des éléments ne correspondant pas (les titres des axes, etc.) ou manquants (le nom du graphique...).
338
340
@@ -541,7 +543,6 @@ On va maintenant se concentrer sur la dimension temporelle de notre jeu de donn
541
543
- Un diagramme en barre synthétisant l'information de notre jeu de données de manière mensuelle ;
542
544
- Des séries instructives sur la dynamique temporelle. Cela sera l'objet de la prochaine partie.
543
545
544
-
Avant cela, nous allons enrichir ces données pour bénéficier d'un historique plus long, permettant notamment d'avoir la période Covid dans nos données, ce qui présente un intérêt du fait de la dynamique particulière du trafic dans cette période (arrêt brutal, reprise très forte...).
545
546
:::
546
547
547
548
::: {.content-visible when-profile="en"}
@@ -559,13 +560,8 @@ We will now focus on the temporal dimension of our dataset using two approaches:
559
560
560
561
- A bar chart summarizing the information in our dataset on a monthly basis;
561
562
- Informative series on temporal dynamics, which will be the subject of the next section.
562
-
563
-
Before that, we will enhance this data to include a longer history, particularly encompassing the Covid period in our dataset. This is interesting due to the unique traffic dynamics during this time (sudden halt, strong recovery, etc.).
564
563
:::
565
564
566
-
{{< include "_historical_data_bike.qmd" >}}
567
-
568
-
569
565
::: {.content-visible when-profile="fr"}
570
566
Pour commencer, reproduisons la troisième figure qui est, encore une fois, un _barplot_. Ici, sur le plan sémiologique, ce n'est pas justifié d'utiliser un _barplot_, une simple série suffirait à fournir une information similaire.
0 commit comments