Skip to content

Commit 7d013ae

Browse files
committed
Learnrs for modules 9 and 10 ready for 2024-2025
1 parent 79a328e commit 7d013ae

File tree

5 files changed

+66
-54
lines changed

5 files changed

+66
-54
lines changed

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Package: BioDataScience2
2-
Version: 2024.8.0
2+
Version: 2024.9.0
33
Title: A Series of Learnr Documents for Biological Data Science 2
44
Description: Interactive documents using learnr for studying biological data science (second course).
55
Authors@R: c(

NEWS.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# BioDataScience2 2024.9.0
2+
3+
- Learnrs **B09La_db** and **B09Lb_mds** and **B10La_som** revised for 2024-2025.
4+
15
# BioDataScience2 2024.8.0
26

37
- Learnrs **B08La_mfa** and **B08Lb_bigd** revised for 2024-2025.

inst/tutorials/B09La_db/B09La_db.Rmd.inactivated renamed to inst/tutorials/B09La_db/B09La_db.Rmd

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ author: "Guyliann Engels & Philippe Grosjean"
44
description: "**SDD II Module 9** Bases de données."
55
tutorial:
66
id: "B09La_db"
7-
version: 2.0.7/7
7+
version: 2.1.0/7
88
output:
99
learnr::tutorial:
1010
progressive: true
@@ -68,7 +68,7 @@ BioDataScience2::learnr_server(input, output, session)
6868

6969
Une base de données est un ensemble structuré de données, avec un accès facile et rapide pour des applications logicielles et des utilisateurs autorisés. Elle peut être considérée comme un grand conteneur **organisé** pour stocker des informations de manière **structurée**.
7070

71-
Parmi les différents types de bases de données, nous allons nous intéresser aux bases de données relationnelles. Une base de données **relationnelle** est une collection de tables liées entre elles par des relations. Les bases de données relationnelles sont très répandues et utilisées dans de nombreux domaines, notamment dans la gestion des entreprises, les services financiers, l'administration publique et la recherche scientifique. Elles sont conçues pour gérer des quantités massives de données de manière fiable et cohérente. Ce tutoriel vous permettra de :
71+
Parmi les différents types de bases de données, nous allons nous intéresser aux bases de données relationnelles. Une base de données **relationnelle** est une collection de tables liées entre elles par des relations. Les bases de données relationnelles sont très répandues et utilisées dans de nombreux domaines, notamment dans la gestion des entreprises, les services financiers, l'administration publique et la recherche scientifique. Elles sont conçues pour gérer des quantités massives de données de manière fiable et cohérente. Ce tutoriel vous permettra de :
7272

7373
- créer une base de données relationnelle
7474
- normaliser les données dans votre base
@@ -77,9 +77,9 @@ Parmi les différents types de bases de données, nous allons nous intéresser a
7777

7878
## Base de données et normalisation
7979

80-
Ajouter des tables dans une base de données n'est pas une étape complexe. Si l'on ne s'intéresse pas à la **normalisation** des données, les avantages d'une base de données restent très limité. La normalisation des données dans une base vise à optimiser la structure de ces données en **évitant la redondance** et en définissant des liens entre les tables. La normalisation va permettre de diminuer la taille d'une base de données, de simplifier les requêtes, et d'optimiser le traitement des requêtes.
80+
Ajouter des tables dans une base de données n'est pas une étape complexe. Si l'on ne s'intéresse pas à la **normalisation** des données, les avantages d'une base de données restent très limités. La normalisation vise à optimiser la structure de ces données en **évitant la redondance** en définissant des liens entre les tables. La normalisation va permettre de diminuer la taille d'une base de données, de simplifier les requêtes, et d'optimiser le traitement des requêtes.
8181

82-
Le tableau de données présenté est inspiré des travaux de fin d'étude de Benzerkallah [Effet des facteurs pédologiques sur les communautés d'abeilles sauvages dans les potagers de la commune de Mons](http://www.atlashymenoptera.net/biblio/02000/BENREZKALLAH_2022_potager_Mons.pdf) dont voici la citation.
82+
Le tableau de données présenté est inspiré des travaux de fin d'études de Benrezkallah [Effet des facteurs pédologiques sur les communautés d'abeilles sauvages dans les potagers de la commune de Mons](http://www.atlashymenoptera.net/biblio/02000/BENREZKALLAH_2022_potager_Mons.pdf) dont voici la citation.
8383

8484
> Benrezkallah J. 2022. Effet des facteurs pédologiques sur les communautés d'abeilles sauvages dans les potagers de la commune de Mons. Mémoire de Master 2 en Sciences biologiques, Université de Mons, Mons, 127 pp.
8585
@@ -89,32 +89,32 @@ Cette étude a nécessité la collecte de nombreuses données que le chercheur s
8989
head(bees, 10)
9090
```
9191

92-
Les colonnes de ce tableau sont les suivantes :
92+
Les colonnes de ce tableau sont les suivantes :
9393

94-
- **id :** l'identifiant de l'insecte collecté
95-
- **species :** le nom latin (genre et espèce) de l'insecte capturé
96-
- **author :** la personne qui a collecté et identifié l'insecte
97-
- **country :** le pays de la collecte
98-
- **city:** la ville de la collecte
99-
- **station :** le lieu précis de la collecte
100-
- **localisation :** les coordonnées de la station (WGS84)
94+
- **id :** l'identifiant de l'insecte collecté
95+
- **species :** le nom latin (genre et espèce) de l'insecte capturé
96+
- **author :** la personne qui a collecté et identifié l'insecte
97+
- **country :** le pays de la collecte
98+
- **city :** la ville de la collecte
99+
- **station :** le lieu précis de la collecte
100+
- **localisation :** les coordonnées de la station (dans le système WGS84)
101101

102-
Utilisez la zone de code R ci-dessous pour explorez le jeu de données `bees` comme bon vous semble afin de répondre aux questions plus bas (utilisez le bouton **Run Code** uniquement).
102+
Utilisez la zone de code R ci-dessous pour explorer le jeu de données `bees` comme bon vous semble afin de répondre aux questions plus bas (utilisez le bouton **Run Code** uniquement).
103103

104104
```{r explo_noscore, exercise=TRUE}
105105
106106
```
107107

108108
```{r qu_db}
109109
quiz(
110-
question("Est-ce que la tableau présenté ci-dessus peut être ajouté comme une table dans une base de données relationnelle ?",
110+
question("Est-ce que le tableau présenté ci-dessus peut être ajouté comme une table dans une base de données relationnelle ?",
111111
answer("Oui", correct = TRUE),
112112
answer("Non"),
113113
allow_retry = TRUE,
114114
random_answer_order = TRUE,
115115
correct = "Ce tableau correspond bien à un format cas par variable. Il est donc possible de l'utiliser dans une base de données. Il n'est cependant pas normalisé."
116116
),
117-
question("Sélectionnez parmi les variables suivantes celles présentant de la redondance optimisable par une normalisation niveau 3 (déependance transitive).",
117+
question("Sélectionnez parmi les variables suivantes celles présentant de la redondance optimisable par une normalisation niveau 3 (dépendance transitive).",
118118
answer("country", correct = TRUE, , message = "Il n'est pas utile de répliquer le nom de pays d'une station pour chaque collecte."),
119119
answer("localisation", correct = TRUE, message = "Il n'est pas utile de répliquer les coordonnées d'une station pour chaque collecte."),
120120
answer("id", message = "La variable 'id' est un identifiant unique pour chaque individu collecté. Cette variable n'est pas redondante."),
@@ -125,7 +125,7 @@ quiz(
125125

126126
## Base de données et schéma
127127

128-
Suite à votre exploration du tableau `bees`, vous avez pu observer que son schéma peut être optimisé. Deux tables sont réalisées pour assurer une normalisation au niveau 3 de la base. Vous pouvez observer qu'une colonne 'id_station' a été ajoutée.
128+
Suite à votre exploration du tableau `bees`, vous avez pu observer que son schéma peut être optimisé. Deux tables sont réalisées pour assurer une normalisation au niveau 3 de la base. Vous pouvez observer qu'une colonne `id_station` a été ajoutée.
129129

130130
```{r, echo=TRUE}
131131
head(stations)
@@ -179,7 +179,7 @@ grade_code("Vous venez de créer une base de données en mémoire avec deux tabl
179179

180180
Il est à présent temps de définir des clés pour ces deux tables. Vous allez pour ce faire employer le package {dm}.
181181

182-
Créez un objet **dm** associé à votre base de données (`bees_db`) et nommez-le `bees_dm`. Indiquez ensuite que vous voulez utiliser la couleur rouge pour la table `stations` et la couleur orange pour la table `captures`. Terminez par visualiser le schéma de la base en l'état.
182+
Créez un objet **dm** associé à votre base de données (`bees_db`) et nommez-le `bees_dm`. Indiquez ensuite que vous voulez utiliser la couleur rouge pour la table `stations` et la couleur orange pour la table `captures`. Enfin, visualisez le schéma de la base en l'état.
183183

184184
```{r dm, exercise=TRUE}
185185
# Création d'un objet `dm`
@@ -203,7 +203,7 @@ dm_draw(bees_dm, view_type = "all")
203203
```
204204

205205
```{r dm-check}
206-
grade_code("Vous avez un objet dm. La visualition de l'objet vous permet d'observer vos deux tables. Actuellement, les clés primaires et les clés étrangères n'ont pas encore été définie.")
206+
grade_code("Vous avez un objet dm. La visualisation de l'objet vous permet d'observer vos deux tables. Actuellement, les clés primaires et les clés étrangères n'ont pas encore été définies.")
207207
```
208208

209209
Afin de compléter le schéma de votre base de données (finaliser le niveau 1 de normalisation), définissez une clé primaire pour chaque table.
@@ -254,7 +254,7 @@ grade_code("Votre objet bees_dm1 comprend à présent deux clés primaires, une
254254
Définissez maintenant une clé étrangère qui fait le lien entre vos deux tables (`captures` et `stations`) selon une relation un à plusieurs en partant de l'objet `bees_dm1` et placez le résultat dans `bees_dm2`. Enfin, visualisez le schéma de la base depuis `bees_dm2`.
255255

256256
```{r fk, exercise=TRUE, , paged.print=FALSE}
257-
# Clés étrangères potentiels
257+
# Clés étrangères potentielles
258258
___(___, ___, ___)
259259
# Ajout de la clé étrangère
260260
bees_dm2 <- ___(___, ___, ___, ___)
@@ -264,7 +264,7 @@ dm_draw(___, view_type = "all")
264264

265265
```{r fk-solution}
266266
## Solution ##
267-
# Clés étrangères potentiels
267+
# Clés étrangères potentielles
268268
dm_enum_fk_candidates(bees_dm1, captures, stations)
269269
# Ajout de la clé étrangère
270270
bees_dm2 <- dm_add_fk(bees_dm1, captures, id_station, stations)
@@ -278,7 +278,7 @@ grade_code("Votre objet bees_dm2 comprend à présent deux clés primaires et un
278278

279279
## Requête sur la base de données
280280

281-
Répondez à la question suivante à l'aide d'un tableau résumé : *Combien d'individus par espèce ont été collectés dans la station "Abbaye Saint Denis" par l'auteur "Benrezkallah" ?*
281+
Répondez à la question suivante à l'aide d'un tableau résumé : *Combien d'individus par espèce ont été collectés dans la station "Abbaye Saint Denis" par l'auteur "Benrezkallah" ?*
282282

283283
Le schéma de la base de données est repris ci-dessous afin de vous aider à répondre à cette question.
284284

@@ -289,12 +289,12 @@ dm_draw(bees_dm2, view_type = "all")
289289
```{r request_h2, exercise=TRUE}
290290
# Filtre
291291
bees_dm2 %>.%
292-
___(___, ___, ____) %>.% # filtre sur `stations`
293-
___(___, ___, ____) %>.% # filtre sur `captures`
292+
___(___, ___ = ___, # filtre sur `stations`
293+
___, ___ = ___) %>.% # filtre sur `captures`
294294
___(., ___) -> # combinaison des tables
295295
bees_request
296296
# Résumé des données
297-
____ %>.%
297+
___ %>.%
298298
___(., ___) %>.%
299299
___(.) ->
300300
request2
@@ -306,8 +306,8 @@ ____ %>.%
306306
```{r request_h2-hint-1}
307307
# Filtre
308308
bees_dm2 %>.%
309-
dm_filter(., stations, station == "Abbaye Saint Denis") %>.% # filtre sur `stations`
310-
dm_filter(., ___, ___) %>.% # filtre sur `captures`
309+
dm_filter(., stations = station == "Abbaye Saint Denis", # filtre sur `stations`
310+
___ = ___) %>.% # filtre sur `captures`
311311
dm_flatten_to_tbl(., captures) -> # combinaison des tables
312312
bees_request
313313
# Résumé des données par espèce
@@ -326,8 +326,8 @@ bees_request %>.%
326326
## Solution ##
327327
# Filtre
328328
bees_dm2 %>.%
329-
dm_filter(., stations, station == "Abbaye Saint Denis") %>.% # filtre sur `stations`
330-
dm_filter(., captures, author == "Benrezkallah") %>.% # filtre sur `captures`
329+
dm_filter(., stations = station == "Abbaye Saint Denis", # filtre sur `stations`
330+
captures = author == "Benrezkallah") %>.% # filtre sur `captures`
331331
dm_flatten_to_tbl(., captures) -> # combinaison des tables
332332
bees_request
333333
@@ -342,12 +342,12 @@ bees_request %>.%
342342
```
343343

344344
```{r request_h2-check}
345-
grade_code("L'espèce la plus présente est *Bombus pascorum*. La mise en place d'un schéma avec {dm} a permis de réaliser une requête sur deux tables et de les combiner facilement. Vous avez ensuite résumé ces observations. Vous avez réalisé tout cela directement dans votre base de données et sans vous préoccuper de l'écriture de la requête. En effet, {dbplyr} que vous avez utilisé ici vous permet d'écrire du code Tidyverse classique et il vous le traduit en requête SQL lorsque vous collectez le résultat avec `collect_dtx()`.")
345+
grade_code("L'espèce la plus présente est *Bombus pascorum*. La mise en place d'un schéma avec {dm} a permit de réaliser une requête sur deux tables et de les combiner facilement. Vous avez ensuite résumé ces observations. Vous avez réalisé tout cela directement dans votre base de données et sans vous préoccuper de l'écriture de la requête. En effet {dbplyr} que vous avez utilisé ici vous permet d'écrire du code Tidyverse classique et il vous le traduit en requête SQL lorsque vous collectez le résultat avec `collect_dtx()`.")
346346
```
347347

348348
## Conclusion
349349

350-
Félicitation ! Vous avez créé une base de données relationnelle avec DuckDB. Ensuite, vous l'avez retravaillée en deux tables et défini les clés primaires et secondaires pour arriver à une normalisation des données au niveau 3 en limitant la redondance. Vous avez ensuite défini un schéma clair de la base avec le package {dm}. Enfin, vous avez réalisé une requête multitable avec les fonctions du package {dm} et de {dbplyr}.
350+
Félicitation ! Vous avez créé une base de données relationnelle avec DuckDB. Ensuite, vous l'avez retravaillée en deux tables et défini les clés primaires et secondaires pour arriver à une normalisation des données au niveau 3 en limitant la redondance. Vous avez ensuite défini un schéma clair de la base avec le package {dm}. Enfin, vous avez réalisé une requête multitable avec les fonctions du package {dm} et de {dbplyr}.
351351

352352
Maintenant que vous avez compris les grands principes des bases de données relationnelles et que vous êtes capable d'écrire le code permettant de réaliser une requête, vous pouvez appliquer cette technique par vous-même.
353353

0 commit comments

Comments
 (0)