Skip to content

Commit

Permalink
reprise app 5.2 fin
Browse files Browse the repository at this point in the history
  • Loading branch information
avouacr committed Nov 26, 2024
1 parent 1d5921b commit 6a05fb9
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 11 deletions.
72 changes: 72 additions & 0 deletions R/checkpoints/application5_part2/main_ls3.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
library(arrow)
library(dplyr)
library(ggplot2)
library(forcats)


api_token <- Sys.getenv("JETON_API")
bucket_formation <- "public"
path_within_bucket <- "/ssplab-formation"


source("R/functions_import.R", encoding = "UTF-8")
source("R/functions_stats_desc.R", encoding = "UTF-8")
source("R/functions_models.R", encoding = "UTF-8")


# ENVIRONNEMENT DE STOCKAGE -------------------

bucket <- s3_bucket(bucket_formation, endpoint_override = Sys.getenv("AWS_S3_ENDPOINT"))
bucket_path <- bucket$path(paste0(path_within_bucket, "/RPindividus"))


# IMPORT ET STRUCTURATION DONNEES -------------

columns_subset <- c(
"REGION", "AGED", "ANAI", "CATL", "COUPLE",
"SEXE", "SURF", "TP", "TRANS", "IPONDI"
)


# Données recensement
df <- import_recensement_subset(
bucket_path, REGION = 24, cols = columns_subset
)


# Shapefile départements
departements <- import_shapefile_departement(
path = paste0(bucket_formation, "/", path_within_bucket)
)

print("Calcul de la part de seniors dans chaque département")
part_seniors <- compute_part_seniors_by_dep(bucket_path)


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


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


# Pyramide des âges
generer_pyramide_ages(df)

# Modalités de transport par statut familial
resultats_transport <- calculer_transport_par_statut(df)
print(resultats_transport)

# Part des hommes dans chaque cohorte
plot_part_hommes <- calculer_part_hommes(df)
print(plot_part_hommes)

# Carte des seniors
generer_carte_seniors(departements, part_seniors)


# MODELISATION --------------------------------

print("Modélisation")
modelisation_recensement(df)

1 change: 0 additions & 1 deletion R/checkpoints/application5_part2/main_sspcloud.R
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ bucket_formation <- "projet-formation"
path_within_bucket <- "/bonnes-pratiques/data"


source("R/functions.R", encoding = "UTF-8")
source("R/functions_import.R", encoding = "UTF-8")
source("R/functions_stats_desc.R", encoding = "UTF-8")
source("R/functions_models.R", encoding = "UTF-8")
Expand Down
45 changes: 35 additions & 10 deletions slides/applications_r/_application5.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
## Partie 1 : Transition vers le stockage `S3`

::: {.justify}
Tout au long de la formation, on se plaçait déjà dans le paradigme *cloud* dans la mesure où l'on développait dans des **conteneurs** hébergés sur des serveurs distants. Néanmoins, on a traité le stockage de manière "traditionnelle", en important/exportant les fichiers depuis/vers le stockage **local** au conteneur. L'objectif de cet exercice est de transitionner vers un stockage *cloud*, en l'occurence le stockage de type `S3`.
Tout au long de la formation, on se plaçait déjà dans le paradigme *cloud* dans la mesure où l'on développait dans des **conteneurs** hébergés sur des serveurs distants. Néanmoins, on a traité le stockage de manière "traditionnelle", en important/exportant les fichiers depuis/vers le stockage **local** au conteneur. L'objectif de cet exercice est de **faire la transition vers un stockage *cloud***, en l'occurence le stockage de type `S3`.
:::

* En début de script, créer les chemins où les données pourront être trouvées sur `S3`
Expand Down Expand Up @@ -89,39 +89,64 @@ departements <- aws.s3::s3read_using(
## Partie 2 : Orchestrer sa chaîne de production

::: {.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.
Notre chaîne de production est encore sous la forme d'un unique *script*, exécuté interactivement. L'objectif de cette partie est de **modéliser notre chaîne avec un script "chef d'orchestre" qui appelle différentes fonctions**. Par ailleurs, on veut pouvoir exécuter ce script en mode **batch**.
:::

* 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))
* Créer les scripts `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)) et inspecter leur contenu

* Modifier `script.R` pour qu'il appelle les fonctions des scripts précédemment créés, avec les paramètres pertinents

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

* 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 :
* En vue de sortir du mode interactif et aller vers le **mode batch**, exécuter le script `main.R` via le terminal :

```bash
cd nom_du_projet
Rscript main.R &> main.log # Redirige stdout et stderr vers un fichier
```

* Analyser les *logs* générés dans le fichier `main.log`
* Analyser les *logs* générés dans le fichier `main.log`. Comment les rendre plus pertinents ?

:::::::



::: {.callout-note .nonincremental}
::: {.callout-note .nonincremental .justify}
## `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.

:::


## Checkpoint

::: {.callout-caution .nonincremental}
## Checkpoint

::: {.panel-tabset}

## {{< fa brands github >}}

* Le script [`main.R`](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/main_ls3.R)
* Le script [`R/functions_import.R`](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/R/functions_import.R)
* Le script [`R/functions_models.R`](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/R/functions_models.R)
* Le script [`R/functions_stats_desc.R`](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/R/functions_stats_desc.R)

## {{< fa brands gitlab >}} insee

* Le script [`main.R`](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/main_sspcloud.R)
* Le script [`R/functions_import.R`](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/R/functions_import.R)
* Le script [`R/functions_models.R`](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/R/functions_models.R)
* Le script [`R/functions_stats_desc.R`](https://raw.githubusercontent.com/InseeFrLab/formation-bonnes-pratiques-git-R/refs/heads/main/R/checkpoints/application5_part2/R/functions_stats_desc.R)

:::

![](checkpoint.jpg){width=40% fig-align="center"}

:::



## Application 5 {.smaller}

Expand Down

0 comments on commit 6a05fb9

Please sign in to comment.