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
Le cours de Science des données I : visualisation se divise en deux parties. La première partie traite principalement de la réalisation de graphiques et la seconde du remaniement des données. Ce tutoriel doit vous permettre de :
44
72
45
-
- Vérifier l'acquisition des notions relatives au remaniement des données avec les fonctions `select()`/`sselect()`, `filter()`/`sfilter()`, `mutate()`/`smutate()`, `group_by()`/`sgroup_by()`, `summarise()`/`ssummarise()`
73
+
- Vérifier l'acquisition des notions relatives au remaniement des données avec les fonctions `select_()`/`select()`, `filter_()`/`filter()`, `mutate_()`/`mutate()`, `group_by_()`/`group_by()`, `summarise_()`/`summarise()`
46
74
- Vérifier l'acquisition des compétences relatives au chaînage des instructions
47
75
48
-
## Les fonctions speedy/tidy
76
+
## Les fonctions svTidy/Tidyverse
49
77
50
78
L'instruction `SciViews::R` ou `SciViews::R()` qui est équivalente, est employée pour charger une série cohérente de packages R. Nous l'utilisons en début de script R ou dans le premier chunk d'un document Quarto ou R Markdown.
51
79
52
80
```{r, echo=TRUE, eval=FALSE}
53
81
SciViews::R()
54
82
```
55
83
56
-
Vous employez des tableaux de données depuis le premier module de ce cours pour réaliser des graphiques. Vous allez à présent apprendre à les manipuler. Il existe dans R plusieurs types d'objets pour contenir des jeux de données, dont **data.frame**, tibble (objet **tbl_df**) ou **data.table**. Par défaut dans `SciViews::R`, vous travaillez avec des **data.table**s. La vitesse de traitements et la gestion en mémoire des objets **data.table** en font le choix idéal pour traiter des gros jeux de données. Actuellement, vous n'avez pas encore traité de gros jeux de données mais cela va venir plus vite que vous ne l'imaginez.
84
+
Vous employez des tableaux de données depuis le premier module de ce cours pour réaliser des graphiques. Vous allez à présent apprendre à les manipuler. Il existe dans R plusieurs types d'objets pour contenir des jeux de données, dont **data.frame**, tibble (objet **tbl_df**) ou **data.table**. Par défaut dans `SciViews::R`, vous travaillez avec des **data.trame**s. La vitesse de traitements et la gestion en mémoire des objets **data.trame** en font le choix idéal pour traiter des gros jeux de données. Actuellement, vous n'avez pas encore traité de gros jeux de données mais cela va venir plus vite que vous ne l'imaginez.
57
85
58
86
Le remaniement de données est tout un art que vous devez maîtriser. Vous devez être capable de sélectionner des colonnes, de filtrer des lignes, de trier un tableau, de résumer vos observations...
59
87
60
-
Parmi les fonctions de remaniement de tableaux, nous avons les fonctions "speedy" qui visent à accélérer le traitement dans R. Ces fonctions speedy sont compatibles avec les objets **data.table**. Elles sont préfixées avec un "s" pour les reconnaître facilement.
61
-
62
-
```{r, echo=TRUE}
63
-
list_speedy_functions()
64
-
```
88
+
Parmi les fonctions de remaniement de tableaux, nous avons les fonctions svTidy qui visent à accélérer le traitement dans R. Ces fonctions sont compatibles avec les objets **data.trame**. Elles sont suffixées avec un "_" pour les reconnaître facilement.
65
89
66
-
Un second ensemble est constitué des fonctions "tidy" du [Tidyverse](https://www.tidyverse.org), et portant le même nom que leurs homologues speedy, mais non préfixées d'un "s".
67
-
68
-
```{r, echo=TRUE}
69
-
list_tidy_functions()
70
-
```
90
+
Un second ensemble est constitué des fonctions [Tidyverse](https://www.tidyverse.org), et portant le même nom que leurs homologues svTidy, mais non suffixées d'un "_". Elles sont couramment utilisées dans R, mais, dans la plupart des cas, plus lentes que les fonctions svTidy correspondantes, et elles n'utilisent pas l'interface formule qsui vous est familière avec, entre autres, `chart()`.
71
91
72
-
Nous retrouvons donc des paires de fonctions speedy/tidy qui réalisent des traitements très similaires et ont une syntaxe identique ou très proche. Elles permettent de :
92
+
Nous retrouvons donc des paires de fonctions svTidy/Tidyverse qui réalisent des traitements très similaires et ont une syntaxe relativement proche. Elles permettent de :
73
93
74
-
- sélectionner des colonnes d'un jeu de données avec `sselect()`/`select()`
75
-
- filtrer des lignes dans un jeu de données avec `sfilter()`/`filter()`
76
-
- calculer de nouvelles variables dans un jeu de données avec `smutate()`/`mutate()`
77
-
- indiquer les variables de regroupement à utiliser dans un tableau avec `sgroup_by()`/`group_by()`
78
-
- résumer les variables d'un jeu de données avec `ssummarise()`/`summarise()`
94
+
- sélectionner des colonnes d'un jeu de données avec `select_()`/`select()`
95
+
- filtrer des lignes dans un jeu de données avec `filter_()`/`filter()`
96
+
- calculer de nouvelles variables dans un jeu de données avec `mutate_()`/`mutate()`
97
+
- indiquer les variables de regroupement à utiliser dans un tableau avec `group_by_()`/`group_by()`
98
+
- résumer les variables d'un jeu de données avec `summarise_()`/`summarise()`
79
99
80
-
*Nous vous conseillons d'employer préférentiellement les fonctions speedy.* Dans ce tutoriel, nous utiliserons alternativement les deux pour se familiariser avec les deux syntaxes.
100
+
*Nous vous conseillons d'employer préférentiellement les fonctions svTidy.*Cependant, dans ce tutoriel nous utiliserons alternativement les deux pour se familiariser avec les deux syntaxes.
81
101
82
102
## Deux variétés de crabes
83
103
@@ -93,7 +113,7 @@ Ce tableau contient `r nrow(crabs)` observations et `r ncol(crabs)` variables. L
93
113
94
114
### Calculer de nouvelles variables
95
115
96
-
Calculez sur le tableau `crabs` à l'aide de la fonction speedy `smutate()` :
116
+
Calculez sur le tableau `crabs` à l'aide de la fonction svTidy `mutate_()` :
97
117
98
118
- le logarithme (`log()`) de la longueur de la carapace (`length`) des crabes et nommez cette nouvelle variables `log_length`
99
119
- la racine carrée (`sqrt()`) de la largueur de la carapace (`width`) et nommez cette nouvelle variable `sqrt_width`
@@ -102,10 +122,10 @@ Calculez sur le tableau `crabs` à l'aide de la fonction speedy `smutate()` :
102
122
Affichez ensuite les premières lignes du tableau (`head()`). Par défaut, les six premières lignes sont affichées. Vous devez obtenir le tableau ci-dessous :
103
123
104
124
```{r}
105
-
crabs <- smutate(crabs,
106
-
log_length = log(length),
107
-
sqrt_width = sqrt(width),
108
-
front_m = front / 1000)
125
+
crabs <- mutate_(crabs,
126
+
log_length = ~log(length),
127
+
sqrt_width = ~sqrt(width),
128
+
front_m = ~front / 1000)
109
129
# Visualisation des premières lignes du tableau
110
130
head(crabs)
111
131
```
@@ -120,7 +140,7 @@ ___(___)
120
140
```
121
141
122
142
```{r mutate_h3-hint-1}
123
-
DF <- smutate(___,
143
+
DF <- mutate_(___,
124
144
log_length = ___,
125
145
sqrt_width = ___,
126
146
front_m = ___)
@@ -129,9 +149,9 @@ head(___)
129
149
```
130
150
131
151
```{r mutate_h3-hint-2}
132
-
crabs <- smutate(crabs,
133
-
log_length = log(___),
134
-
sqrt_width = sqrt(___),
152
+
crabs <- mutate_(crabs,
153
+
log_length = ~log(___),
154
+
sqrt_width = ~sqrt(___),
135
155
front_m = ___ / 1000)
136
156
# Visualisation des premières lignes du tableau
137
157
head(___)
@@ -141,16 +161,16 @@ head(___)
141
161
142
162
```{r mutate_h3-solution}
143
163
## Solution ##
144
-
crabs <- smutate(crabs,
145
-
log_length = log(length),
146
-
sqrt_width = sqrt(width),
147
-
front_m = front / 1000)
164
+
crabs <- mutate_(crabs,
165
+
log_length = ~log(length),
166
+
sqrt_width = ~sqrt(width),
167
+
front_m = ~front / 1000)
148
168
# Visualisation des premières lignes du tableau
149
169
head(crabs)
150
170
```
151
171
152
172
```{r mutate_h3-check}
153
-
grade_code("Vous savez maintenant comment calculer de nouvelles variables avec la fonction speedy `smutate()`.")
173
+
grade_code("Vous savez maintenant comment calculer de nouvelles variables avec la fonction svTidy `mutate_()` qui utilise des formules commençant par `~` pour effectuer les transformations désirées.")
154
174
```
155
175
156
176
### Filtrer et sélectionner des données
@@ -162,7 +182,7 @@ Reprenons le jeu de données initial `crabs`.
162
182
(crabs <- read("crabs", package = "MASS", lang = "fr"))
163
183
```
164
184
165
-
Réalisez les opérations suivantes avec les fonctions **tidy** `filter()` et `select()` et assignez votre résultat à `crabs2` :
185
+
Réalisez les opérations suivantes avec les fonctions **Tidyverse**`filter()` et `select()` et assignez votre résultat à `crabs2` :
166
186
167
187
- Retirer la variable index (`index`) du jeu de données
168
188
- Garder uniquement les individus mâles (`"M"`) du jeu de données dont la longueur de la carapace est supérieure ou égale à 25 mm (variables `sex` et `length` respectivement)
@@ -216,10 +236,10 @@ head(crabs2)
216
236
```
217
237
218
238
```{r pipe1_h3-check}
219
-
grade_code("La sélection de vos variables avec `select()` et de vos observations avec `filter()` (fonctions tidy) réalisent cette transformation. En général dans un pipeline, finissez toujours en assignant avec -> pour que l'assignation apparaisse à la fin dans la logique de succession des opérations et mettez en évidence le nom auquel vous assignez en le plaçant sur une nouvelle ligne.")
239
+
grade_code("La sélection de vos variables avec `select()` et de vos observations avec `filter()` (fonctions tidyverse) réalisent cette transformation. En général dans un pipeline, finissez toujours en assignant avec `->` pour que l'assignation apparaisse à la fin dans la logique de succession des opérations et mettez en évidence le nom auquel vous assignez en le plaçant sur une nouvelle ligne.")
220
240
```
221
241
222
-
Afin de comparer les fonctions speedy et tidy, réalisez le même exercice en utilisant des fonctions "speedy".
242
+
Afin de comparer les fonctions svTidy et tidyverse, réalisez le même exercice en utilisant cette fois-ci des fonctions svTidy.
223
243
224
244
```{r pipe1s_h2, exercise=TRUE}
225
245
crabs ___
@@ -231,7 +251,7 @@ head(crabs2)
231
251
232
252
```{r pipe1s_h2-hint-1}
233
253
crabs %>.%
234
-
sselect(___, ___) ___
254
+
select_(___, ___) ___
235
255
___(___, ___ & ___) ->
236
256
crabs2
237
257
head(crabs2)
@@ -242,14 +262,14 @@ head(crabs2)
242
262
```{r pipe1s_h2-solution}
243
263
## Solution ##
244
264
crabs %>.%
245
-
sselect(., -index) %>.%
246
-
sfilter(., sex == "M" & length >= 25) ->
265
+
select_(., ~-index) %>.%
266
+
filter_(., ~sex == "M" & length >= 25) ->
247
267
crabs2
248
268
head(crabs2)
249
269
```
250
270
251
271
```{r pipe1s_h2-check}
252
-
grade_code("Vous voyez que les fonctions `select()` et `sselect()`, ainsi que `filter()` et `sfilter()` apparaissent souvent interchageables. Les résultats ne sont cependant pas toujours similaires et vous devez restez attentif à cela dans votre code, par exemple, si vous traduisez un exemple tidy trouvé sur le Web en version speedy.")
272
+
grade_code("Vous voyez que les fonctions `select()` et `select_()`, ainsi que `filter()` et `filter_()` apparaissent souvent interchageables, à condition de bien penser à utiliser des formules avec les fonctions svTidy (ajouter un `~` au début des expressions. Les résultats ne sont cependant pas toujours similaires et vous devez restez attentif à cela dans votre code, par exemple, si vous traduisez un exemple tidyverse trouvé sur le Web en version svTidy.")
253
273
```
254
274
255
275
### Résumer des données
@@ -264,16 +284,16 @@ Réalisez les opérations suivantes sur `crabs` :
264
284
- Assignez le résultat à `crabs2`
265
285
- Formatez votre tableau `crabs2` avec `knitr::kable()`
266
286
267
-
Employez des fonction speedy et fstat uniquement et le chaînage des opérations avec `%>.%` dans un pipeline pour résoudre cette exercice. Vous devez obtenir le tableau ci-dessous :
287
+
Employez des fonction svTidy et fstat uniquement (pour rappel, les functions fast commencent par un `f`, par exemple, `fmean()` est l'équivalent fast de la fonction R de base `mean()`) et le chaînage des opérations avec `%>.%` dans un pipeline pour résoudre cette exercice. Vous devez obtenir le tableau ci-dessous :
268
288
269
289
```{r}
270
290
crabs %>.%
271
-
sfilter(., length > 25) %>.%
272
-
sgroup_by(., sex, species) %>.%
273
-
ssummarise(.,
274
-
mean = fmean(width),
275
-
ntot = fn(width),
276
-
nobs = fnobs(width)) ->
291
+
filter_(., ~length > 25) %>.%
292
+
group_by_(., ~sex, ~species) %>.%
293
+
summarise_(.,
294
+
mean = ~fmean(width),
295
+
ntot = ~fn(width),
296
+
nobs = ~fnobs(width)) ->
277
297
crabs2
278
298
knitr::kable(crabs2)
279
299
```
@@ -293,9 +313,9 @@ ___(___)
293
313
294
314
```{r pipe2_h3-hint-1}
295
315
crabs %>.%
296
-
sfilter(___, ___) ___
297
-
sgroup_by(___, ___, ___) ___
298
-
ssummarise(___,
316
+
filter_(___, ___) ___
317
+
group_by_(___, ___, ___) ___
318
+
summarise_(___,
299
319
mean = ___(___),
300
320
ntot = ___(___),
301
321
nobs = ___(___)) ___
@@ -306,12 +326,12 @@ knitr::kable(___)
306
326
307
327
```{r pipe2_h3-hint-2}
308
328
crabs %>.%
309
-
sfilter(., length > ___) %>.%
310
-
sgroup_by(., ___, ___) %>.%
311
-
ssummarise(.,
312
-
mean = fmean(___),
313
-
ntot = fn(___),
314
-
nobs = fnobs(___)) ___
329
+
filter_(., ~length > ___) %>.%
330
+
group_by_(., ___, ___) %>.%
331
+
summarise_(.,
332
+
mean = ~fmean(___),
333
+
ntot = ~fn(___),
334
+
nobs = ~fnobs(___)) ___
315
335
___
316
336
# Tableau formaté avec knitr::kable()
317
337
knitr::kable(___)
@@ -322,22 +342,22 @@ knitr::kable(___)
322
342
```{r pipe2_h3-solution}
323
343
## Solution ##
324
344
crabs %>.%
325
-
sfilter(., length > 25) %>.%
326
-
sgroup_by(., sex, species) %>.%
327
-
ssummarise(.,
328
-
mean = fmean(width),
329
-
ntot = fn(width),
330
-
nobs = fnobs(width)) ->
345
+
filter_(., ~length > 25) %>.%
346
+
group_by_(., ~sex, ~species) %>.%
347
+
summarise_(.,
348
+
mean = ~fmean(width),
349
+
ntot = ~fn(width),
350
+
nobs = ~fnobs(width)) ->
331
351
crabs2
332
352
# Tableau formaté avec knitr::kable()
333
353
knitr::kable(crabs2)
334
354
```
335
355
336
356
```{r pipe2_h3-check}
337
-
grade_code("Vous avez maintenant compris comment résumer vos données avec `(s)group_by()` et `(s)summarise()` et formater vos sorties avec `knitr::kable()`.")
357
+
grade_code("Vous avez maintenant compris comment résumer vos données avec `group_by_()` et `summarise_()` et formater vos sorties avec `knitr::kable()`.")
338
358
```
339
359
340
-
Réalisez à présent un exercice similaire, toujour avec les fonctions speedy :
360
+
Réalisez à présent un exercice similaire, toujour avec les fonctions svTidy :
341
361
342
362
- Sélectionnez les individus dont la longueur (`length`) est strictement *inférieur ou égale* à 25 mm
343
363
- Résumez le jeu de données par le sexe (`sex`) et par la variété (`species`) de crabe
@@ -350,11 +370,11 @@ Employez le chaînage des opérations `%>.%` au sein d'un pipeline pour résoudr
350
370
351
371
```{r}
352
372
crabs %>.%
353
-
sfilter(., length <= 25) %>.%
354
-
sgroup_by(., sex, species) %>.%
355
-
ssummarise(.,
356
-
median = fmedian(width),
357
-
ntot = fn(width)) ->
373
+
filter_(., ~length <= 25) %>.%
374
+
group_by_(., ~sex, ~species) %>.%
375
+
summarise_(.,
376
+
median = ~fmedian(width),
377
+
ntot = ~fn(width)) ->
358
378
crabs2
359
379
# Tableau formaté avec knitr::kable()
360
380
knitr::kable(crabs2)
@@ -374,9 +394,9 @@ ___(___)
374
394
375
395
```{r pipe3_h3-hint-1}
376
396
crabs %>.%
377
-
sfilter(___, ___) ___
378
-
sgroup_by(___, ___, ___) ___
379
-
ssummarise(___,
397
+
filter_(___, ___) ___
398
+
group_by_(___, ___, ___) ___
399
+
summarise_(___,
380
400
median = ___(___),
381
401
ntot. = ___(___)) ___
382
402
___
@@ -386,11 +406,11 @@ knitr::kable(___)
386
406
387
407
```{r pipe3_h3-hint-2}
388
408
crabs %>.%
389
-
sfilter(., length <= ___) %>.%
390
-
sgroup_by(., ___, ___) %>.%
391
-
ssummarise(.,
392
-
median = fmedian(___),
393
-
ntot = fn(___)) ___
409
+
filter_(., ~length <= ___) %>.%
410
+
group_by_(., ___, ___) %>.%
411
+
summarise_(.,
412
+
median = ~fmedian(___),
413
+
ntot = ~fn(___)) ___
394
414
___
395
415
# Tableau formaté avec knitr::kable()
396
416
knitr::kable(___)
@@ -401,18 +421,18 @@ knitr::kable(___)
401
421
```{r pipe3_h3-solution}
402
422
## Solution ##
403
423
crabs %>.%
404
-
sfilter(., length <= 25) %>.%
405
-
sgroup_by(., sex, species) %>.%
406
-
ssummarise(.,
407
-
median = fmedian(width),
408
-
ntot = fn(width)) ->
424
+
filter_(., ~length <= 25) %>.%
425
+
group_by_(., ~sex, ~species) %>.%
426
+
summarise_(.,
427
+
median = ~fmedian(width),
428
+
ntot = ~fn(width)) ->
409
429
crabs2
410
430
# Tableau formaté avec knitr::kable()
411
431
knitr::kable(crabs2)
412
432
```
413
433
414
434
```{r pipe3_h3-check}
415
-
grade_code("Vous savez maintenant résumer vos données avec `sgroup_by()` et `ssummarise()`.")
435
+
grade_code("Vous savez maintenant résumer vos données avec `group_by_()` et `summarise_()`.")
416
436
```
417
437
418
438
## Conclusion
@@ -421,9 +441,8 @@ Bravo ! Vous venez de terminer votre séance d'exercices relative à la manipul
421
441
422
442
Vous avez maintenant un aperçu de :
423
443
424
-
- notions relatives aux remaniement des données avec les fonctions `(s)select()`, `(s)filter()`, `(s)mutate()`, `(s)group_by()`, `(s)summarise()`
444
+
- notions relatives aux remaniement des données avec les fonctions `select_()`/`select()`, `filter_()`/`filter()`, `mutate_()`/`mutate()`, `group_by_()`/`group_by()`, `summarise_()`/`summarise()`
425
445
- chaînages des instructions dans un pipeline avec `%>.%`
426
-
- l'assignation alternative `%->%` en fin de pipeline tidy pour collecter les résultats dans un tableau
0 commit comments