Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions 01_R_Insee/Fiche_installer_packages.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,8 @@ Certains _packages_ sont mis à disposition sur une [forge logicielle](https://f
Le _package_ `remotes` a pour finalité principale d'installer des _packages_ depuis des forges logicielles. Pour installer un _package_ depuis une forge, il faut utiliser la fonction dédiée : `install_github` pour GitHub, `install_gitlab` pour GitLab, `install_svn` pour SVN, etc... Voici un exemple :

```{r, eval = FALSE}
# installe depuis `https://github.com/InseeFrLab/doremifasolData`
remotes::install_github(repo = "InseeFrLab/doremifasolData")
# installe depuis `https://github.com/InseeFrLab/doremifasol`
remotes::install_github(repo = "InseeFrLab/doremifasol")
```

Seul le premier argument (`repo`) est obligatoire. Il est formé du nom du
Expand All @@ -122,7 +122,7 @@ contiendra les modifications les plus récentes. Installer depuis une forge
permet ainsi de récupérer la version de développement d'un _package_
(seules les versions stables sont en général disponibles sur le CRAN). Pour installer
un _package_ tel qu'il était à un moment donné, il est également possible de
faire suivre le nom du dépôt par une référence à un `commit`, à un _tag_ (une version) ou à une ` branche`. Voici un exemple avec un _tag_ : `remotes::install_gitlab("py_b/funprog@v-0.3.0")`. Voici un exemple avec un commit : `remotes::install_github("InseeFrLab/doremifasolData@a9df2d3d0e372")`.
faire suivre le nom du dépôt par une référence à un `commit`, à un _tag_ (une version) ou à une ` branche`. Voici un exemple avec un _tag_ : `remotes::install_gitlab("py_b/funprog@v-0.3.0")`. Voici un exemple avec un commit : `remotes::install_github("InseeFrLab/doremifasol@a03bf37c54bdf2f9bc4f99754aac453a44a0b86c")`.

::: {.callout-note}
Lorsque vous installez un _package_ depuis une forge logicielle, `R` crée automatiquement une archive temporaire (un fichier `.tar.gz`), puis installe le _package_ à partir de celle-ci. Si vous travaillez dans un environnement Windows, il est nécessaire que `Rtools` soit installé sur votre poste pour que `R` puisse construire l'archive.
Expand Down
38 changes: 23 additions & 15 deletions 01_R_Insee/Fiche_utiliser_utilitR.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -107,30 +107,38 @@ Voici un exemple : la fiche sur la manipulation de données textuelles commence

Ces jeux de données sont mis à disposition par l'intermédiaire d'un _package_ nommé `doremifasolData` développé par les contributeurs du projet `utilitR`. La documentation détaillée de ce _package_ est disponible [sur GitHub](https://inseefrlab.github.io/DoReMIFaSolData/).

Voici la liste des tables disponibles dans `doremifasolData` :
Comme les bonnes pratiques sont de stocker le code sur Git et les données sur un serveur de stockage (S3 pour le SSPCloud et LS3), les tables de sortie du package `doremifasolData` ont aussi été stockées sur un serveur S3 du SSPCloud à l'adresse https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/ au format `.parquet`.

```{r "contenu_doremifasolData", echo = FALSE, results = "asis"}
tables <- data(package = "doremifasolData")$results
Voici la liste des tables disponibles dans `doremifasolData` et stockées sur le S3 du SSPCloud :

output <-
knitr::kable(
as.data.frame(list("Table" = tables[, "Item"], "Description" = tables[, "Title"])),
format = "html",
escape = F, position = "center", full_width = F, align="cl") %>%
kableExtra::column_spec(1, width = "4cm") %>%
kableExtra::column_spec(2, width = "13cm") %>%
kableExtra::row_spec(0, bold=TRUE, align = "c")
output
```
| Table | Description | Chemin S3 |
| --- | --- | --- |
| bpe_ens_2018 | Base Permanente des Équipements 2018 | [s3/projet-formation/diffusion/utilitR/doremifasoldata/bpe_ens_2018.parquet](https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/bpe_ens_2018.parquet) |
| cog_com_2019 | Code Officiel Géographique 2019 | [s3/projet-formation/diffusion/utilitR/doremifasoldata/cog_com_2019.parquet](https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/cog_com_2019.parquet) |
| data_iris_paris_2017 | Données sociales sur les IRIS de Paris 2017 | [s3/projet-formation/diffusion/utilitR/doremifasoldata/data_iris_paris_2017.parquet](https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/data_iris_paris_2017.parquet) |
| filosofi_com_2016 | Données sur les revenus et la pauvreté en 2016, niveau communal | [s3/projet-formation/diffusion/utilitR/doremifasoldata/filosofi_com_2016.parquet](https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/filosofi_com_2016.parquet) |
| filosofi_epci_2016 | Données sur les revenus et la pauvreté en 2016, niveau EPCI | [s3/projet-formation/diffusion/utilitR/doremifasoldata/filosofi_epci_2016.parquet](https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/filosofi_epci_2016.parquet) |

::: {.callout-note}

Le package tire son nom de son "grand frère", le _package_ [`doremifasol`](https://inseefrlab.github.io/DoReMIFaSol). Ce _package_ a pour finalité de charger dans `R` des données disponibles sur le site de l'Insee, sans que l'utilisateur n'ait ni à naviguer sur ce site, ni à effectuer l'import des données. Tous les jeux de données présents dans `doremifasolData` ont été téléchargés avec `doremifasol`.
:::


### Comment installer le _package_ `doremifasolData`

Le _package_ `doremifasolData` n'est pas disponible sur le répertoire central des _packages_ `R` (le CRAN). Pour installer installer le _package_, il est nécessaire d'exécuter les deux commandes suivantes :
Vous n'avez pas besoin d'installer le _package_ `doremifasolData`. Le code va directement télécharger les données depuis le S3 du SSPCloud avec une requête SQL de la forme :

```{r, eval = FALSE}
duckdb::sql_query("
INSTALL httpfs;
LOAD httpfs;
SELECT * FROM 'https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/cog_com_2019.parquet'
") |>
dplyr::slice_head(n = 5)
```

Cependant, si vous voulez utiliser le _package_ `doremifasolData`, il n'est pas disponible sur le répertoire central des _packages_ `R` (le CRAN). Pour installer installer le _package_, il est nécessaire d'exécuter les deux commandes suivantes :

```{r, eval = FALSE}
install.packages("remotes")
Expand All @@ -140,7 +148,7 @@ remotes::install_github("InseeFrLab/doremifasolData", ref = "main")
::: {.callout-warning}
## Spécificité Insee

Si vous utilisez `R` sur un poste Insee (y compris en télétravail) ou dans l'environnement de travail AUS, il faut exécuter la commande suivante :
Si vous utilisez `R` sur un poste Insee (y compris en télétravail) ou dans l'environnement de travail AUS, les données du SSPCloud ne sont pas accessibles. Il faut alors utiliser directement le package `doremifasolData` pour accéder aux données. Pour installer le _package_ `doremifasolData`, il est nécessaire d'exécuter la commande suivante :

```{r, eval = FALSE}
install.packages(
Expand Down
6 changes: 5 additions & 1 deletion 02_Bonnes_pratiques/01-qualite-code.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,11 @@ car il est nécessaire d'exécuter le code pour les détecter. Par exemple, le c
#| error: true
library(dplyr)
library(MASS)
bpe_ens_2018 <- doremifasolData::bpe_ens_2018
bpe_ens_2018 <- duckdb::sql_query("
INSTALL httpfs;
LOAD httpfs;
SELECT * FROM 'https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/bpe_ens_2018.parquet'
")

nombre <- bpe_ens_2018 %>%
as_tibble() %>%
Expand Down
12 changes: 10 additions & 2 deletions 03_Fiches_thematiques/Fiche_arrow.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,18 @@ Par rapport à un `data.frame` standard ou à un `tibble`, le `Arrow Table` se d

```{r}
# Charger les données et les convertir en tibble
bpe_ens_2018_tbl <- doremifasolData::bpe_ens_2018 |> as_tibble()
bpe_ens_2018_tbl <- bpe_ens_2018 <- duckdb::sql_query("
INSTALL httpfs;
LOAD httpfs;
SELECT * FROM 'https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/bpe_ens_2018.parquet'
") |> as_tibble()

# Charger les données et les convertir en Arrow Table
bpe_ens_2018_arrow <- doremifasolData::bpe_ens_2018 |> as_arrow_table()
bpe_ens_2018_arrow <- bpe_ens_2018 <- duckdb::sql_query("
INSTALL httpfs;
LOAD httpfs;
SELECT * FROM 'https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/bpe_ens_2018.parquet'
") |> as_arrow_table()
```

Première différence: alors que les `data.frames` et les `tibbles` apparaissent dans la rubrique `Data` de l'environnement `RStudio` (cadre rouge dans la capture d'écran), les objets `Arrow Table` apparaissent dans la rubrique `Values` (cadre blanc).
Expand Down
39 changes: 23 additions & 16 deletions 03_Fiches_thematiques/Fiche_datatable.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@ L'utilisateur souhaite manipuler des données structurées sous forme de `data.f
* Pour des tables de données de grande taille (plus de 1 Go ou plus d'un million d'observations), il est recommandé d'utiliser soit le _package_ `data.table` qui fait l'objet de la présente fiche, soit les _packages_ `arrow` et `duckdb` présentés dans les fiches [Manipuler des données avec `arrow`](#arrow) et [Manipuler des données avec `duckdb`](#duckdb).
:::

::: {.callout-note}
Certains exemples de cette fiche utilisent les données disponibles dans le _package_ `doremifasolData` ; vous ne pourrez reproduire ces exemples que si ce _package_ est installé sur la machine sur laquelle vous travaillez. Si vous ne savez pas si ce _package_ est déjà installé, consultez la fiche [Comment utiliser la documentation `utilitR`](#presentation-utilitr).
:::

## Présentation de `data.table`

Expand Down Expand Up @@ -233,11 +230,7 @@ Partir de `dt`, créer une nouvelle variable `newvar` qui vaut 1 pour les observ

## Manipuler des tables de données avec `data.table`

Nous allons illustrer les fonctions de manipulation de données de `data.table` avec les jeux de données du _package_ `doremifasolData`.

```{r, echo = TRUE}
library(doremifasolData)
```
Nous allons illustrer les fonctions de manipulation de données de `data.table`.

### Mettre des données dans un `data.table`

Expand All @@ -250,9 +243,13 @@ Dans la suite de cette section, on va illustrer les opérations de base en `data

```{r}
# Charger la base permanente des équipements
bpe_ens_2018 <- doremifasolData::bpe_ens_2018
bpe_ens_2018 <- duckdb::sql_query("
INSTALL httpfs;
LOAD httpfs;
SELECT * FROM 'https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/bpe_ens_2018.parquet'
")
# Convertir ce data.frame en data.table
bpe_ens_2018_dt <- as.data.table(bpe_ens_2018)
bpe_ens_2018_dt <- data.table::as.data.table(bpe_ens_2018)
```

### Manipuler une seule table avec `data.table`
Expand Down Expand Up @@ -406,13 +403,17 @@ La fonction `melt()` réorganise les donnée dans un format long. Elle prend les
* `variable.name` : le nom de la nouvelle colonne qui contient le nom des variables transposées ;
* `value.name` : le nom de la nouvelle colonne qui contient la valeur des variables transposées.

Pour illustrer l'usage de cette fonction, nous allons utiliser les données du répertoire Filosofi 2016 agrégées au niveau des EPCI (table `filosofi_epci_2016`), et disponibles dans le package `doremifasolData`. On convertit cette table en `data.table` et on conserve uniquement certaines variables.
Pour illustrer l'usage de cette fonction, nous allons utiliser les données du répertoire Filosofi 2016 agrégées au niveau des EPCI (table `filosofi_epci_2016`), et disponibles sur S3. On convertit cette table en `data.table` et on conserve uniquement certaines variables.

```{r}
# Charger la table de Filosofi
filosofi_epci_2016 <- doremifasolData::filosofi_epci_2016
filosofi_epci_2016 <- duckdb::sql_query("
INSTALL httpfs;
LOAD httpfs;
SELECT * FROM 'https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/filosofi_epci_2016.parquet'
")
# Convertir la table en data.table
filosofi_epci_2016_dt <- as.data.table(filosofi_epci_2016)
filosofi_epci_2016_dt <- data.table::as.data.table(filosofi_epci_2016)
# Sélectionner des colonnes
filosofi_epci_2016_dt <-
filosofi_epci_2016_dt[, .(CODGEO, TP6016, TP60AGE116, TP60AGE216,
Expand Down Expand Up @@ -501,7 +502,7 @@ bpe_ens_2018_wide2

**Il est conseillé de bien réfléchir avant de restructurer des données en format *wide*, et de ne le faire que lorsque cela paraît indispensable**. En effet, s'il est tentant de restructurer les données sous format *wide* car ce format peut paraître plus intuitif, il est généralement plus simple et plus rigoureux de traiter les données en format *long*. Ceci dit, il existe des situations dans lesquelles il est indiqué de restructurer les données en format *wide*. Voici deux exemples :

* produire un tableau synthétique de résultats, prêt à être diffusé, avec quelques colonnes donnant des indicateurs par catégorie (exemple : la table `filosofi_epci_2016` du _package_ `doremifasolData`) ;
* produire un tableau synthétique de résultats, prêt à être diffusé, avec quelques colonnes donnant des indicateurs par catégorie (exemple : la table `filosofi_epci_2016`) ;
* produire une table avec une colonne par année, de façon à calculer facilement un taux d'évolution entre deux dates.
:::

Expand Down Expand Up @@ -669,11 +670,17 @@ L'utilisation de la fonction `:=` est déroutante lorsqu'on découvre `data.tabl

## Programmer des fonctions avec `data.table`

Une des forces de `data.table` est qu'il est relativement simple d'utiliser ce _package_ dans des fonctions. Pour illustrer l'usage des fonctions, nous allons utiliser la table `filosofi_com_2016` disponible dans le _package_ `doremifasolData`. Cette table donne des informations sur les revenus des ménages au niveau communal. Nous créons une variable donnant le numéro du département (`departement`) en extrayant les deux premiers caractères du code commune (`CODGEO`) avec la fonction `str_sub` du _package_ `stringr` (vous pouvez consulter la fiche [Manipuler des données textuelles pour en apprendre davantage sur `stringr`]). Enfin, nous utilisons la fonction `.SD` pour sélectionner uniquement quelques variables.
Une des forces de `data.table` est qu'il est relativement simple d'utiliser ce _package_ dans des fonctions. Pour illustrer l'usage des fonctions, nous allons utiliser la table `filosofi_com_2016` disponible sur le [stockage de données (dit S3) du sspcloud](https://datalab.sspcloud.fr/s3/?profile=default). Cette table donne des informations sur les revenus des ménages au niveau communal. Nous créons une variable donnant le numéro du département (`departement`) en extrayant les deux premiers caractères du code commune (`CODGEO`) avec la fonction `str_sub` du _package_ `stringr` (vous pouvez consulter la fiche [Manipuler des données textuelles pour en apprendre davantage sur `stringr`]). Enfin, nous utilisons la fonction `.SD` pour sélectionner uniquement quelques variables.

```{r}
# Charger la table de données et la transformer en data.table
filosofi_com_2016_dt <- as.data.table(doremifasolData::filosofi_com_2016)
filosofi_com_2016_dt <- data.table::as.data.table(
duckdb::sql_query("
INSTALL httpfs;
LOAD httpfs;
SELECT * FROM 'https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/filosofi_com_2016.parquet'
")
)
# Créer une variable donnant le département
filosofi_com_2016_dt[, departement := stringr::str_sub(CODGEO, start = 1L, end = 2L)]
# Supprimer les départements d'outre-mer
Expand Down
12 changes: 10 additions & 2 deletions 03_Fiches_thematiques/Fiche_duckdb.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,11 @@ __La fonction `duckdb_register()` permet de charger dans `duckdb` des données p

```{r}
# Charger la Base permanente des équipements 2018 dans la session R
bpe_ens_2018 <- doremifasolData::bpe_ens_2018 |> as_tibble()
bpe_ens_2018 <- duckdb::sql_query("
INSTALL httpfs;
LOAD httpfs;
SELECT * FROM 'https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/bpe_ens_2018.parquet'
") |> as_tibble()

# Etablir le lien logique entre la base de données duckdb et la table de données
conn_ddb %>% duckdb::duckdb_register(
Expand Down Expand Up @@ -228,7 +232,11 @@ Dans l'exemple suivant, on calcule le nombre d'équipements par région, à part
__Manipulation d'un `tibble`__

```{r message=FALSE}
doremifasolData::bpe_ens_2018 |>
duckdb::sql_query("
INSTALL httpfs;
LOAD httpfs;
SELECT * FROM 'https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/bpe_ens_2018.parquet'
") |>
group_by(REG) |>
summarise(
NB_EQUIP_TOT = sum(NB_EQUIP)
Expand Down
22 changes: 12 additions & 10 deletions 03_Fiches_thematiques/Fiche_graphiques.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@ L'utilisateur souhaite réaliser des graphiques (nuages de points, histogrammes,
* Il est conseillé aux utilisateurs débutants d'utiliser l'*add-in* `esquisse` pour se familiariser avec `ggplot2`.
:::

::: {.callout-note}
Certains exemples de cette fiche utilisent les données disponibles dans le _package_ `doremifasolData` ; vous ne pourrez reproduire ces exemples que si ce _package_ est installé sur la machine sur laquelle vous travaillez. Si vous ne savez pas si ce _package_ est déjà installé, consultez la fiche [Comment utiliser la documentation `utilitR`](#presentation-utilitr).
:::


## Découvrir `ggplot2` avec l'_add-in_ `esquisse`

Expand All @@ -39,11 +35,14 @@ L'_add-in_ `esquisse` est disponible sous la forme d'un _package_, qu'il faut in
install.packages("esquisse")
```

Cette section illustre l'utilisation d'`esquisse` avec la table `data_iris_paris_2017` du _package_ `doremifasolData`, qui contient des données économiques et sociales sur les iris de la ville de Paris en 2017. Il faut donc charger ces données dans `R` :
Cette section illustre l'utilisation d'`esquisse` avec la table `data_iris_paris_2017`, qui contient des données économiques et sociales sur les iris de la ville de Paris en 2017. Il faut donc charger ces données dans `R` :

```{r, message = FALSE}
library(doremifasolData)
data_iris_paris2017 <- doremifasolData::data_iris_paris_2017
data_iris_paris2017 <- duckdb::sql_query("
INSTALL httpfs;
LOAD httpfs;
SELECT * FROM 'https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/data_iris_paris_2017.parquet'
")
```

Une fois qu'il est installé, vous pouvez accéder à cet _add-in_ en cliquant sur *'ggplot2' builder* dans le menu _Addins_ de RStudio.
Expand Down Expand Up @@ -83,12 +82,15 @@ Une fois que le graphique est terminé, vous pouvez récupérer le code `ggplot2

L'objectif du *package* `ggplot2` est de fournir une approche unique pour produire quasiment toute représentation graphique de données. Ce _package_ propose un grand nombre de fonctions permettant de personnaliser finement les représentations graphiques. Cette fiche n'est donc qu'une introduction succincte à `ggplot2`. Pour des formations plus détaillées, se référer à {#ggplot2Ressources}.

Pour commencer, il faut charger le _package_ avec `library`. Cette fiche illustre l'utilisation de `ggplot2` avec la table `data_iris_paris_2017` du _package_ `doremifasolData`, qui contient des données économiques et sociales sur les iris de la ville de Paris en 2017.
Pour commencer, il faut charger le _package_ avec `library`. Cette fiche illustre l'utilisation de `ggplot2` avec la table `data_iris_paris_2017` stockée sur le S3, qui contient des données économiques et sociales sur les iris de la ville de Paris en 2017.

```{r, message = FALSE}
library(ggplot2)
library(doremifasolData)
data_iris_paris_2017 <- doremifasolData::data_iris_paris_2017
data_iris_paris_2017 <- duckdb::sql_query("
INSTALL httpfs;
LOAD httpfs;
SELECT * FROM 'https://minio.lab.sspcloud.fr/projet-formation/diffusion/utilitR/doremifasoldata/data_iris_paris_2017.parquet'
")
ggplot2::theme_set(theme_minimal())
```

Expand Down
Loading
Loading