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
## Partie 3 : ajout de contrôles de qualité des données
534
534
535
535
Un critère de qualité majeur d'une chaîne de production est sa robustesse. Naturellement, les données en entrée de la chaîne peuvent évoluer dans le temps. Afin de gérer au mieux les risques posés par de telles évolutions, on va ajouter des contrôles sur la qualité des données, en entrée et en sortie de la chaîne.
## Partie 4 : tests unitaires et versionnage de la chaîne
541
541
542
542
Notre chaîne tourne à présent de manière robuste. Pour autant, ce n'est pas un objet fixe : on peut vouloir lui apporter des corrections ou des améliorations fonctionnelles. Et ces modifications peuvent, à leur tour, provoquer des nouvelles erreurs. Pour gérer ces risques, on va :
@@ -545,14 +545,14 @@ Notre chaîne tourne à présent de manière robuste. Pour autant, ce n'est pas
## Partie 5 : un rapport reproductible pour documenter sa chaîne de production
550
550
551
551
Une bonne manière de favoriser à la fois la maintenabilité de sa chaîne et la réutilisationde ses produits est de documenter son fonctionnement. Le format [quarto](https://quarto.org) — successeur de `R Markdown` — permet de reproduire facilement des **rapports reproductibles, qui intègrent code et texte**. En plus, ces rapports peuvent être facilement publiés en différents formats, du plus **interactif** (`html`) aux plus classiques (`pdf`, `odt`, etc.).
On dispose finalement d'une chaîne **orchestrée, robuste et bien documentée**. Afin d'en faire une chaîne vraiment intégrée de bout en bout, on va **automatiser** les étapes, de sorte à ce que les modifications apportées au projet se répércutent sur ses sorties. Pour cela, on va utiliser les outils de l'**intégration continue** proposés par `GitHub` / `GitLab`.
Copy file name to clipboardExpand all lines: slides/applications_r/_application1.qmd
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -124,7 +124,7 @@ Dans cette application, on va explorer deux manières possibles de gérer les se
124
124
125
125
## Checkpoint
126
126
127
-
::: {.callout-caution .noincremental}
127
+
::: {.callout-caution .nonincremental}
128
128
## Checkpoint
129
129
130
130
* Le script [`script.R`](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application1/script.R)
Copy file name to clipboardExpand all lines: slides/applications_r/_application2.qmd
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -40,7 +40,7 @@
40
40
41
41
## Checkpoint
42
42
43
-
::: {.callout-caution}
43
+
::: {.callout-caution .nonincremental}
44
44
## Checkpoint
45
45
46
46
* Le script [`script.R`](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application2/script.R)
Copy file name to clipboardExpand all lines: slides/applications_r/_application3.qmd
+9-15Lines changed: 9 additions & 15 deletions
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,6 @@
9
9
# Partie 0 : préparation
10
10
11
11
* Remplacer le contenu du script `get_data.R` en copiant-collant le contenu de [ce fichier](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application3/get_data.R). Exécuter ce script, il importe les fichiers nécessaires pour cette application.
12
-
* Créer un script `benchmark_parquet.R` afin de réaliser les comparaisons de performance des parties suivantes de l'application
* Remplacer le contenu du script `get_data_ls3.R` en copiant-collant le contenu de [ce fichier](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application3/get_data_ls3.R). Exécuter ce script, il importe les fichiers nécessaires pour cette application.
22
-
* Créer un script `benchmark_parquet.R` afin de réaliser les comparaisons de performance des parties suivantes de l'application
20
+
* Remplacer le contenu du script `get_data.R` en copiant-collant le contenu de [ce fichier](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application3/get_data_ls3.R). Exécuter ce script, il importe les fichiers nécessaires pour cette application.
23
21
24
22
:::
25
23
@@ -34,7 +32,7 @@
34
32
35
33
Tout au long de cette application, nous allons voir comment utiliser le format `Parquet` de manière la plus efficiente. Afin de comparer les différents formats et méthodes d'utilisation, nous allons **comparer le temps d'exécution et l'usage mémoire d'une requête standard**. Commençons par comparer les formats `CSV` et `Parquet`.
36
34
37
-
*Remplacer le contenu du script `get_data.R`en copiant-collant le contenu de [ce fichier](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application3/get_data.R). Exécuter ce script, il importe les fichiers nécessaires dans cette application
35
+
*Créer un script `benchmark_parquet.R`afin de réaliser les différentes comparaisons de performance de l'application
38
36
* Pour effectuer les comparaisons de performance, on va utiliser la fonction [bench::mark](https://bench.r-lib.org/#benchmark). Analyser la documentation pour comprendre ce que la fonction attend en entrée.
39
37
* La requête suivante permet de calculer les données pour construire une pyramide des âges sur un département donné, à partir du fichier `CSV` du recensement. Encapsuler la requête dans une fonction `req_csv` (sans argument).
40
38
@@ -77,20 +75,17 @@ _❓️ Quelle méthode retenir pour lire un `Parquet` avec `Arrow` ?_
77
75
La *lazy evaluation* et les optimisations d'`Arrow` apportent des gain de performance considérables. Mais on peut encore faire mieux ! Lorsqu'on sait qu'on va être amené à **filter régulièrement les données selon une variable d'intérêt**, on a tout intérêt à **partitionner** le fichier `Parquet` selon cette variable.
78
76
79
77
* Parcourir la documentation de la fonction [arrow::write_dataset](https://arrow.apache.org/docs/r/reference/write_dataset.html) pour comprendre comment spécifier la clé de partitionnement d'un fichier `Parquet`. Plusieurs méthodes sont possibles !
80
-
*Dans une même chaîne, importer la table individus complète du recensement `data/RPindividus.parquet` avec la fonction [arrow::open_dataset](https://arrow.apache.org/docs/r/reference/open_dataset.html) et l'exporter en une table `data/RPindividus_partitionne.parquet` partitionnée par la région (`REGION`) et le département (`DEPT`)
78
+
*Importer la table individus complète du recensement `data/RPindividus.parquet` avec la fonction [arrow::open_dataset](https://arrow.apache.org/docs/r/reference/open_dataset.html) et l'exporter en une table `data/RPindividus_partitionne.parquet` partitionnée par la région (`REGION`) et le département (`DEPT`)
81
79
* Observer l'arborescence de fichiers de la table exportée
82
80
* Modifier la fonction `req_open_dataset` de la partie précédente pour partir de la table complète (non-partitionnée) `data/RPindividus.parquet` au lieu de l'échantillon
83
-
* Construire une fonction `req_open_dataset_partitionne` sur le modèle de `req_open_dataset`, qui importe cette fois les données partitionnées `data/RPindividus_dept.parquet`. Ne pas oublier de spécifier le paramètre `hive_style = TRUE`.
81
+
* Construire une fonction `req_open_dataset_partitionne` sur le modèle de `req_open_dataset`, qui importe cette fois les données partitionnées `data/RPindividus_partitionne.parquet`. Ne pas oublier de spécifier le paramètre `hive_style = TRUE`.
84
82
* Comparer les performances (temps d'exécution et allocation mémoire) des deux méthodes grâce à la fonction [bench::mark](https://bench.r-lib.org/#benchmark)
85
83
86
84
:::
87
85
88
86
::: {.nonincremental}
89
87
90
-
_❓️ Dans le cadre d'une mise à disposition de données en `Parquet` :_
91
-
92
-
*_Comment bien choisir la/les clé(s) de partitionnement ?_
93
-
*_Quelle est la limite à garder en tête ?_
88
+
*❓️ Dans le cadre d'une mise à disposition de données en `Parquet`, comment bien choisir la/les clé(s) de partitionnement ? Quelle est la limite à garder en tête ?*
94
89
95
90
:::
96
91
@@ -102,18 +97,17 @@ _❓️ Dans le cadre d'une mise à disposition de données en `Parquet` :_
102
97
103
98
Convaincus par ce comparatif, nous allons maintenant mettre à jour le format des données utilisées pour notre chaîne de production.
104
99
105
-
* Modifier le script `script.R` pour importer les données d'entrée de votre chaîne à partir de la table `Parquet` partitionnée par département
106
-
* Vérifier que le code tourne de A à Z et l'adapter si ce n'est pas le cas
107
-
*
100
+
* Modifier le script `script.R` pour importer les données d'entrée de votre chaîne à partir de la table `Parquet` partitionnée `data/RPindividus_partitionne.parquet`
101
+
* Vérifier que le script complet s'exécute correctement et l'adapter si ce n'est pas le cas
108
102
109
103
:::
110
104
111
-
_❓️ Cette mise à jour des données utilisées en source de la chaîne de production vous semble-t-elle complexe ? Pourquoi ?_
105
+
_❓️ Cette mise à jour des données utilisées en source de la chaîne de production vous a-t-elle paru compliquée ? Pourquoi ?_
112
106
113
107
114
108
## Checkpoint
115
109
116
-
::: {.callout-caution .noincremental}
110
+
::: {.callout-caution .nonincremental}
117
111
## Checkpoint
118
112
119
113
* Le script [`benchmark_parquet.R`](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application3/benchmark_parquet.R)
* Le script [`main.R`](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application4/main.R)
* Le script [`main.R`](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application4/main_ls3.R)
0 commit comments