library(learnr)
library(knitr)
library(rio)
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)

file.copy(from = system.file(package = "funcampR","data","chapitre9/naissances.csv"),
          to = "naissances.csv")
# loading data for in-tutorial calculations
naissances<-import("naissances.csv")
# relative path to data from "local random repo" of learnr exercise
naissances<-import("../../../naissances.csv")

Le registre des naissances

Pour répondre à l'énigme posée par Mam'Grouxi, nous allons explorer le registre des naissances, que vous venez de découvrir dans le village de Sandia. Ce registre est déjà chargé, sous le nom de naissances. Souvenez-vous le chapitre 2 du grimoire IGoR : nous avions appris à découvrir le contenu d'un fichier avec les instructions names() pour avoir le noms des variables, head() pour consulter les premiers enregistrements, et nrow()pour en connaître le nombre de lignes. Allons-y :

names(naissances)
head(naissances)
nrow(naissances)

Le registre des naissances comporte 6 variables : le Nom de l'enfant, son Genre, l'An de sa naissance, la Taillede l'enfant et son Poidsà la naissance, son niveau de Forceet sa spiritualité Spirit. Nous devrions donc avoir toutes les informations appropriées pour résoudre l'énigme qui vous est posée : "Les enfants du royaume de Statis naissent avec une force et une spiritualité dont la somme égale ce que l'on appelle le Mana. Dans quel village est née la fille dont le Mana a la naissance était le plus grand ?"

Manipuler les données en toute facilité

Dans le chapitre précédent, vous avez découvert des nouveaux sortilèges à ajouter à votre grimoire, grâce à la plume tidyverse. Parmi ces sortilèges, nous allons désormais apprendre à utiliser les sorts de l'extension dplyr, qui facilite le traitement et la manipulation de données contenues dans une table. dplyr fait partie du coeur du tidyverse, elle est donc chargée automatiquement en écrivant library(tidyverse) au début du programme R.

library(tidyverse)

Nous allons désormais utilisés les sortilèges apportés par dplyr pour étudier le registre des naissances.

De nouvelles fonctions apportées par dplyr

La manipulation de données avec dplyr se fait en utilisant de nouvelles fonctions, qui correspondent chacun à une action différente appliquée à un tableau de données.

Les fonctions filter() et arrange()

La fonction filter() sélectionne des lignes d’une table selon la condition que vous choisissez. Par exemple, si vous voulez filtrer les données de naissance selon le village de naissance :

filter(naissances, Village == "Kokoro")

Plusieurs conditions peuvent être combinées, en utilisant le caractère & entre chaque condition. Par exemple, pour n'afficher que les données relatives au village de Kokoro et à l'année 1212 :

filter(naissances, Village == "Kokoro", An == "1212")

La fonction arrange() réordonne les lignes d’un tableau selon une ou plusieurs colonnes. Ainsi, si on veut trier le tableau des naissances selon la taille des nourrissons :

arrange(naissances, Taille)

On peut trier selon plusieurs colonnes. Par exemple selon le village puis la taille :

arrange(naissances, Village, Taille)

Si on veut trier selon une colonne par ordre décroissant, on lui applique la fonction desc(). Illustration en triant les naissances par village puis par taille décroissante du nourrisson.

arrange(naissances, Village, desc(Taille))

A vous de prendre la plume !

# Filtrer le registre des naissances pour avoir les naissances
# de l'année 1213 dans le village de Kokoro



# fin de l'exercice
# Filtrer le registre des naissances pour avoir les naissances
# de l'année 1213 dans le village de Kokoro
filter(naissances, An == 1213, Village == "Kokoro")


# fin de l'exercice

La fonction mutate()

La fonction mutate() permet de créer de nouvelles colonnes dans le tableau de données, en général à partir de variables existantes. Par exemple, la table naissances contient à la fois la taille et le poids des nourrissons. Par exemple, créons une nouvelle variable Ratio qui mesure leur indice de masse corporelle comme le ratio entre la Taille et le Poids au carré :

naissances <- mutate(naissances, Ratio = Taille / Poids^2)

On peut ensuite afficher la liste des naissances rangée selon le Ratio:

arrange(naissances,Ratio)

Au fait, n'oublions pas de conjuguer les sortilèges en utilisant le pipe %>%. A vous de prendre la plume dans l'exercice suivant :

# (i) Filtrer le registre des naissances pour l'année 1212 
# (ii) Ajouter la variable Ratio comme le ratio
# entre la variable Taille et la variable Poids au carré
# (iii) Trier selon le Ratio, de façon décroissante 
# (du plus grand au plus petit)





# fin de l'exercice
# (i) Filtrer le registre des naissances pour l'année 1212 
# (ii) Ajouter la variable Ratio comme le ratio
# entre la variable Taille et la variable Poids au carré
# (iii) Trier selon le Ratio, de façon décroissante 
# (du plus grand au plus petit)

naissances %>% filter(An == 1212) %>%
  mutate(Ratio = Taille / Poids^2) %>%
  arrange(desc(Ratio))

# fin de l'exercice

Résoudre l'énigme de Mam' Grouxi

Voyons comment utiliser ces nouveaux pouvoirs pour résoudre l'énigme posée par Mam' Grouxi. Voici l'énigme : "Les enfants du royaume de Statis naissent avec une force et une spiritualité dont la somme égale ce que l'on appelle le Mana. De quel village vient la fille dont le Mana était le plus grand à la naissance ?"

A vous de jouer ! La première ligne du tableau final vous donnera le nom et surtout le village de naissance de cette petite fille pas tout à fait comme les autres... N'oubliez pas d'utiliser le pipe %>% pour combiner les sortilèges entre eux !

# A partir du fichier naissances,
# (i) Sélectionner les observations de genre féminin (F)
# (ii) Ajouter la variable Mana 
# Comme somme de la Force et de Spiritualité
# (iii) Triez par ordre décroissant selon le Mana
# (iv) la première ligne vous donnera la réponse !





# fin de l'exercice
# A partir du fichier naissances,
# (i) Sélectionner les observations de genre féminin (F)
# (ii) Ajouter la variable Mana 
# Comme somme de la Force et de Spiritualité
# (iii) Triez par ordre décroissant selon le Mana
# (iv) la première ligne vous donnera la réponse !
naissances %>% 
  filter(Genre=="F") %>%
  mutate(Mana = Force + Spirit) %>%
  arrange(desc(Mana))

# fin de l'exercice
question("Le village de naissance de la petite fille avec le plus grand Mana est :",
type="single",
allow_retry = TRUE,
incorrect="Retente ta chance",
answer("Sandia"),
answer("Hylia",correct=TRUE),
answer("Kokoro"),
correct="Félicitations, la réponse à donner à Mam' Grouxi est donc : Hylia (avec H majuscule)"
)

Vous avez trouvé ? Reportez la réponse dans le jeu Icarius pour reprendre la partie...

Fin du chapitre >> reprenez la partie d'Icarius !!!

Version 0.9.2



InseeFrLab/funcamp-r-grimoire documentation built on Oct. 30, 2023, 3:25 p.m.