Skip to content

Commit

Permalink
reprise app 5.2
Browse files Browse the repository at this point in the history
  • Loading branch information
avouacr committed Nov 26, 2024
1 parent 9e2f6db commit 1d5921b
Show file tree
Hide file tree
Showing 8 changed files with 79 additions and 26 deletions.
4 changes: 2 additions & 2 deletions R/checkpoints/application2/script.R
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ df <- df |>

# STATISTIQUES AGREGEES ---------------------------------------

fonction_de_stat_agregee(df |> filter(SEXE == "Homme") |> pull(AGED))
fonction_de_stat_agregee(df |> filter(SEXE == "Femme") |> pull(AGED))
calculer_stat_agregee(df |> filter(SEXE == "Homme") |> pull(AGED))
calculer_stat_agregee(df |> filter(SEXE == "Femme") |> pull(AGED))


# PYRAMIDE AGES =============================
Expand Down
4 changes: 2 additions & 2 deletions R/checkpoints/application3/script.R
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ df <- df |>
# STATISTIQUES AGREGEES ---------------------------------------


stat_desc_variable(df |> filter(SEXE == "Homme") |> pull(AGED))
stat_desc_variable(df |> filter(SEXE == "Femme") |> pull(AGED))
calculer_stat_agregee(df |> filter(SEXE == "Homme") |> pull(AGED))
calculer_stat_agregee(df |> filter(SEXE == "Femme") |> pull(AGED))


# PYRAMIDE AGES =============================
Expand Down
4 changes: 2 additions & 2 deletions R/checkpoints/application4/script.R
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ df <- df |>
# STATISTIQUES AGREGEES ---------------------------------------


stat_desc_variable(df |> filter(SEXE == "Homme") |> pull(AGED))
stat_desc_variable(df |> filter(SEXE == "Femme") |> pull(AGED))
calculer_stat_agregee(df |> filter(SEXE == "Homme") |> pull(AGED))
calculer_stat_agregee(df |> filter(SEXE == "Femme") |> pull(AGED))


# PYRAMIDE AGES =============================
Expand Down
4 changes: 2 additions & 2 deletions R/checkpoints/application5_part1/script_ls3.R
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ df <- df |>
# STATISTIQUES AGREGEES ---------------------------------------


stat_desc_variable(df |> filter(SEXE == "Homme") |> pull(AGED))
stat_desc_variable(df |> filter(SEXE == "Femme") |> pull(AGED))
calculer_stat_agregee(df |> filter(SEXE == "Homme") |> pull(AGED))
calculer_stat_agregee(df |> filter(SEXE == "Femme") |> pull(AGED))


# PYRAMIDE AGES =============================
Expand Down
4 changes: 2 additions & 2 deletions R/checkpoints/application5_part1/script_sspcloud.R
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ df <- df |>
# STATISTIQUES AGREGEES ---------------------------------------


stat_desc_variable(df |> filter(SEXE == "Homme") |> pull(AGED))
stat_desc_variable(df |> filter(SEXE == "Femme") |> pull(AGED))
calculer_stat_agregee(df |> filter(SEXE == "Homme") |> pull(AGED))
calculer_stat_agregee(df |> filter(SEXE == "Femme") |> pull(AGED))


# PYRAMIDE AGES =============================
Expand Down
45 changes: 45 additions & 0 deletions R/checkpoints/application5_part2/R/functions_stats_desc.R
Original file line number Diff line number Diff line change
@@ -1,3 +1,48 @@
decennie_a_partir_annee <- function(annee) {
return(annee - annee %% 10)
}

#' @title Calcul d'une statistique agrégée
#'
#' @description
#' Cette fonction calcule une statistique agrégée (moyenne, écart-type ou variance) pour un vecteur donné.
#'
#' @param x Un vecteur numérique pour lequel la statistique doit être calculée.
#' @param statistique Le nom de la statistique à calculer. Peut être `"moyenne"`, `"ecart-type"` (ou `"sd"`), ou `"variance"`. Par défaut, `"moyenne"`.
#' @param ... Arguments supplémentaires passés à la fonction de calcul sous-jacente (voir [mean()], [sd()], [var()]).
#'
#' @return La valeur de la statistique agrégée calculée.
#'
#' @details
#' - Pour `"moyenne"`, la fonction utilise [mean()].
#' - Pour `"ecart-type"` ou `"sd"`, la fonction utilise [sd()].
#' - Pour `"variance"`, la fonction utilise [var()].
#'
#' @examples
#' calculer_stat_agregee(rnorm(10))
#' calculer_stat_agregee(rnorm(10), "ecart-type")
#' calculer_stat_agregee(rnorm(10), "variance")
#'
#' @export

calculer_stat_agregee <- function(x, statistique = "moyenne", ...) {

stopifnot(is.numeric(x),
is.character(statistique),
statistique %in% c("moyenne", "ecart-type", "sd", "variance"))

if (statistique == "moyenne") {
resultat <- mean(x, na.rm = TRUE, ...)
} else if (statistique == "ecart-type" || statistique == "sd") {
resultat <- sd(x, na.rm = TRUE, ...)
} else if (statistique == "variance") {
resultat <- var(x, na.rm = TRUE, ...)
}

return(resultat)
}


# Fonction pour générer une pyramide des âges
generer_pyramide_ages <- function(df) {
print("Pyramide des âges de la population française")
Expand Down
4 changes: 2 additions & 2 deletions R/checkpoints/application5_part2/main_sspcloud.R
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ part_seniors <- compute_part_seniors_by_dep(bucket_path)
# STATISTIQUES AGREGEES ---------------------------------------


stat_desc_variable(df |> filter(SEXE == "Homme") |> pull(AGED))
stat_desc_variable(df |> filter(SEXE == "Femme") |> pull(AGED))
calculer_stat_agregee(df |> filter(SEXE == "Homme") |> pull(AGED))
calculer_stat_agregee(df |> filter(SEXE == "Femme") |> pull(AGED))


# Pyramide des âges
Expand Down
36 changes: 22 additions & 14 deletions slides/applications_r/_application5.qmd
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## Application 5 {.smaller}

:::: {.callout-tip .nonincremental collapse="true" icon=false}
:::: {.callout-tip .nonincremental collapse="true" icon=false .nonincremental}
## Partie 1 : Transition vers le stockage `S3`

::: {.justify}
Expand Down Expand Up @@ -81,32 +81,40 @@ departements <- aws.s3::s3read_using(
:::




## Application 5 {.smaller}

:::: {.callout-tip collapse="true" icon=false}
:::: {.callout-tip collapse="true" icon=false .nonincremental}
## Partie 2 : Orchestrer sa chaîne de production

Au fil des chapitres précédents, nous avons appliqué un ensemble de bonnes pratiques à notre chaîne de production pour accroître sa qualité et sa maintenabilité. Néanmoins, celle-ci est encore sous la forme d'un unique *script*.
::: {.justify}
Au fil des chapitres précédents, nous avons appliqué un ensemble de bonnes pratiques à notre chaîne de production pour accroître sa qualité et sa maintenabilité. Néanmoins, celle-ci est encore sous la forme d'un unique *script*. De manière générale, on a plutôt envie de **modéliser les étapes d'une chaîne comme une série de fonctions, avec un script "chef d'orchestre"** qui les appelle dans le bon ordre.
:::

* Créer les scripts suivants et inspecter leur contenu respectif :
+ `R/functions_import.R` ([contenu](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/R/functions_import.R))
+ `R/functions_stats_desc.R` ([contenu](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/R/functions_stats_desc.R))
+ `R/functions_models.R` ([contenu](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/R/functions_models.R))

De manière générale, on a plutôt envie de modéliser les étapes d'une chaîne comme une série de fonctions, avec une fonction "cheffe d'orchestre" qui appelle les autres dans le bon ordre.
* Modifier `script.R` pour qu'il appelle les fonctions des scripts précédemment créés, avec les paramètres pertinents

::: {.nonincremental}
* Renommer `script.R` en `main.R`, une convention qui permet de comprendre que le script est le **"point d'entrée"** du projet

1. Créer les scripts suivants:
* `R/functions_import.R` ([contenu](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/R/functions_import.R))
* `R/functions_stats_desc.R` ([contenu](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/R/functions_stats_desc.R))
* `R/functions_models.R` ([contenu](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/R/functions_models.R))
* En vue de sortir du mode interactif et aller vers le **mode batch**, exécuter le script `main.R` via le terminal avec les commandes suivante :

2. Modifier `main.R` pour tenir compte de la modularisation ([version {{< fa brands github >}} + sspcloud](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/main_sspcloud.R) ou [version {{< fa brands gitlab >}} + LS3](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/main_sspcloud.R))
```bash
cd nom_du_projet
Rscript main.R &> main.log # Redirige stdout et stderr vers un fichier
```

3. Passer la souris sur une des nouvelles fonctions et faire <kbd>F1</kbd>
* Analyser les *logs* générés dans le fichier `main.log`

:::
:::::::

::::


::: {.callout-note}
::: {.callout-note .nonincremental}
## `targets`: un orchestrateur formel

On aurait pu également utiliser un **orchestrateur** dédié pour effectuer cette tâche, comme le package [targets](https://books.ropensci.org/targets/). Les plus curieux d'entre vous pourront aller voir [le chapitre et les exercices](https://github.com/InseeFrLab/formation-bonnes-pratiques-git-R/blob/main/slides/legacy/targets.qmd) qui lui étaient auparavant dédiés dans cette formation.
Expand Down

0 comments on commit 1d5921b

Please sign in to comment.