Skip to content

Commit

Permalink
Merge branch 'InseeFrLab:master' into wrong-url
Browse files Browse the repository at this point in the history
  • Loading branch information
TanguyBarthelemy authored Sep 30, 2024
2 parents 2280975 + fdc3f94 commit 24fce7a
Show file tree
Hide file tree
Showing 11 changed files with 157 additions and 40 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/bookdown-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
retention-days: 5
- name: Install npm
if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
uses: actions/setup-node@v2
uses: actions/setup-node@v4
with:
node-version: '18'
- name: Deploy to Netlify
Expand Down
2 changes: 1 addition & 1 deletion 01_R_Insee/Fiche_utiliser_utilitR.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ Ces jeux de données sont mis à disposition par l'intermédiaire d'un _package_
Voici la liste des tables disponibles dans `doremifasolData` :

```{r "contenu_doremifasolData", echo = FALSE, results = "asis"}
tables <- data(package = "doremifasolData")$result
tables <- data(package = "doremifasolData")$results
output <-
knitr::kable(
Expand Down
3 changes: 2 additions & 1 deletion 02_Bonnes_pratiques/02-structure-code.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@

L'utilisateur souhaite améliorer la structuration de ses projets `R` afin de favoriser leur maintenabilité et leur réutilisation.

::: {.callout-important} ## Tâche concernée et recommandation
::: {.callout-important}
## Tâche concernée et recommandation
- Il est recommandé d'utiliser systématiquement les projets `RStudio` dans
des projets impliquant des programmes `R`.
- Il est recommandé de structurer les projets en dossiers thématiques
Expand Down
2 changes: 1 addition & 1 deletion 03_Fiches_thematiques/Fiche_api.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,7 @@ Le résultat est formaté sous forme de JSON, ce qui est pratique mais peu
intelligible :

```{r}
resultats
jsonlite::prettify(resultats)
```

Pour en faire une information exploitable, il est nécessaire de retraiter le résultat de la requête. Par exemple, pour n'extraire que le libellé et le nutriscore d'un produit, ainsi que son indice de transformation NOVA, il faut utiliser une boucle sur les différentes caractéristiques à extraire :
Expand Down
4 changes: 2 additions & 2 deletions 03_Fiches_thematiques/Fiche_arrow.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ L'utilisateur souhaite manipuler des données structurées sous forme de `data.f

- Pour des tables de données de taille petite et moyenne (inférieure à 1 Go ou moins d'un million d'observations), il est recommandé d'utiliser les *packages* `tibble`, `dplyr` et `tidyr` qui sont présentés dans la fiche [Manipuler des données avec le `tidyverse`](#tidyverse);

- Pour des tables de données de grande taille (plus de 1 Go en CSV, plus de 200 Mo en Parquet, ou plus d'un million d'observations), il est recommandé d'utiliser soit les *packages* `arrow` (qui fait l'objet de la présente fiche) et `#duckdb` (voir la fiche [Manipuler des données avec `arrow`](#duckdb)), soit le *package* `data.table` qui fait l'objet de la fiche [Manipuler des données avec `data.table`](#datatable).
- Pour des tables de données de grande taille (plus de 1 Go en CSV, plus de 200 Mo en Parquet, ou plus d'un million d'observations), il est recommandé d'utiliser soit les *packages* `arrow` (qui fait l'objet de la présente fiche) et `#duckdb` (voir la fiche [Manipuler des données avec `duckdb`](#duckdb)), soit le *package* `data.table` qui fait l'objet de la fiche [Manipuler des données avec `data.table`](#datatable).

- Il est essentiel de travailler avec la dernière version d'`arrow`, de `duckdb` et de `R` car les *packages* `arrow` et `duckdb` sont en cours de développement. Par ailleurs, les recommandations d'`utilitR` peuvent évoluer en fonction du développement de ces _packages_.

Expand Down Expand Up @@ -50,7 +50,7 @@ Le projet `arrow` présente cinq spécificités:
<summary>
Illustration de ce principe
</summary>
![Illustration de ce principe du stockage orienté colonnes (droite) par rapport au csv](https://raw.githubusercontent.com/InseeFrLab/ssphub/news-janvier/infolettre/infolettre_17/parquet.png)
![Illustration de ce principe du stockage orienté colonnes (droite) par rapport au csv](https://raw.githubusercontent.com/InseeFrLab/ssphub/main/infolettre/infolettre_17/parquet.png)
</details>


Expand Down
100 changes: 79 additions & 21 deletions 03_Fiches_thematiques/Fiche_donnees_temporelles.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ des séries temporelles (création d'objets `ts` en R).
Pour installer les packages :

```{r}
#| eval: False
#| echo: true
#| eval: false
install.packages(c("lubridate", "parsedate", "zoo"))
install.packages(c("ggplot2", "dygraphs"))
```
Expand All @@ -41,12 +42,7 @@ La fonction `as.Date()`{.r} existe dans les packages `base` et
### Les dates

Une date en R signifie généralement un jour d'une année. Elle peut
s'écrire sous différents formats :

| Format | Type | Exemple (Noël 2023) |
|------------------|------------|---------------------|
| Format européen | JJ/MM/AAAA | 25/12/2023 |
| Format américain | AAAA-MM-JJ | 2023-12-25 |
s'écrire sous différents formats (voir [encadré sur les normes ISO8601 et RFC3339](@iso8601-rfc3339)).

Une date peut aussi désigner un horaire ou un moment précis. On peut
alors spécifier les heures, les minutes, les secondes.
Expand All @@ -67,12 +63,16 @@ Pour créer une date en R, il suffit de faire appel à la fonction
correspond au format américain :

```{r}
#| echo: true
#| eval: true
M_Drucker_birth <- base::as.Date(x = "1942-09-12")
```

Il suffit de le changer pour créer une date à partir d'un autre format :

```{r}
#| echo: true
#| eval: true
noel_2023 <- base::as.Date(x = "25/12/2023", format = "%d/%m/%Y")
```

Expand All @@ -93,6 +93,8 @@ classe `POSIXt`. Pour cela, on peut utiliser les fonctions
composants de la date (année, mois, jour, heure...).

```{r}
#| echo: true
#| eval: true
pied_sur_la_lune <- as.POSIXct(x = "1969-07-21 02:56:20",
format = "%Y-%m-%d %H:%M:%S", tz = "UTC")
```
Expand All @@ -105,16 +107,25 @@ d'appliquer différents fuseaux horaires à un évènement.

Par exemple :

Neil Armstrong a posé le pied sur la lune le
`r as.POSIXct(pied_sur_la_lune, tz = "Europe/Paris")` à Paris mais le
`r as.POSIXct(pied_sur_la_lune, tz = "America/Los_Angeles")` à Los
Angeles.

```{r}
heure_en_france <- as.POSIXct(x = pied_sur_la_lune, tz = "Europe/Paris")
heure_los_angeles <- as.POSIXct(x = pied_sur_la_lune, tz = "America/Los_Angeles")
#| echo: true
#| eval: true
# changement du fuseau horaire avec le package base
heure_en_france <- pied_sur_la_lune
attr(heure_en_france , "tzone") <- "Europe/Paris"
# changement du fuseau horaire avec le package lubridate
heure_los_angeles <- lubridate::with_tz(
time = pied_sur_la_lune,
tzone = "America/Los_Angeles"
)
```

Neil Armstrong a posé le pied sur la lune le
`r heure_en_france` à Paris mais le
`r heure_los_angeles` à Los
Angeles.

Pour connaître la liste des différents fuseaux horaires, il faut appeler
la fonction `OlsonNames()`{.r} (du nom de l'Olson Database).

Expand All @@ -141,27 +152,31 @@ des fuseaux horaires.
- Par exemple en hiver (CET = UTC+1) :

```{r}
#| echo: true
#| eval: true
# définition en date et heure locale avec le bon fuseau horaire
chute_mur_berlin <- as.POSIXct(x = "1989-11-09 18:00", tz = "Europe/Berlin")
# Heure locale
print(chute_mur_berlin)
# Heure UTC (exemple en islande)
print(as.POSIXct(chute_mur_berlin, tz = "UTC"))
print(chute_mur_berlin, tz = "UTC")
```

- En été (CEST = UTC+2) :

```{r}
#| echo: true
#| eval: true
# définition en date et heure locale avec le bon fuseau horaire
victoire_fifa_1998 <- as.POSIXct(x = "1998-07-12 21:00", tz = "Europe/Paris")
# Heure locale
print(victoire_fifa_1998)
# Heure UTC (exemple au Burkina Faso)
print(as.POSIXct(victoire_fifa_1998, tz = "UTC"))
print(victoire_fifa_1998, tz = "UTC")
```

## Autres fonctions
Expand All @@ -174,6 +189,8 @@ formater une date selon *n'importe quelle* représentation.
Par exemple pour des dates :

```{r}
#| echo: true
#| eval: true
# On prend la date d'aujourd'hui
format(Sys.Date(), format = "Nous sommes le %A %d %B %Y.")
format(Sys.Date(), format = "Date du jour : %x")
Expand All @@ -182,6 +199,8 @@ format(Sys.Date(), format = "Date du jour : %x")
Par exemple pour des temps :

```{r}
#| echo: true
#| eval: true
# On prend la date d'aujourd'hui
format(Sys.time(), format = "Nous sommes le %d %B %Y et il est %Hh%M et %Ss.")
format(Sys.time(), format = "Il s'est écoulé %ss depuis le 1er janvier 1970.")
Expand All @@ -192,7 +211,7 @@ La liste des formats de données est disponible sur la page d'aide de
`strptime()`{.r} (accessible via `help(strptime)`{.r}).

::: {.callout-note}
### Les normes ISO8601 et RFC3339
### Les normes ISO8601 et RFC3339 {#iso8601-rfc3339}

Les normes ISO8601 et RFC3339 sont des conventions de représentation des
dates. Selon ces 2 normes, certains formats de dates sont acceptés ou
Expand All @@ -214,7 +233,10 @@ https://ijmacd.github.io/rfc3339-iso8601/.
On peut aussi utiliser le package `parsedate` qui permet de lire une
date au format ISO8601

```{r, warning = FALSE}
```{r}
#| echo: true
#| eval: true
#| warning: false
library("parsedate")
parse_iso_8601("2023-05-24T08:43:00+08:00") # Accepté par ISO8601
Expand All @@ -235,6 +257,8 @@ Il peut être utile de vouloir changer les paramètres régionaux sous R.
Pour cela, il faut faire appel à la fonction `Sys.setlocale()`{.r}

```{r}
#| echo: true
#| eval: true
# Paramètres locaux en France
Sys.setlocale("LC_TIME", "fr_FR.UTF-8")
format(Sys.time(), format = "%c")
Expand Down Expand Up @@ -267,6 +291,8 @@ parmi les 3 restants.
Exemple :

```{r}
#| echo: true
#| eval: true
date1 <- base::as.Date("2016-02-29")
date2 <- base::as.Date("2021-10-02")
date3 <- base::as.Date("2023-08-15")
Expand All @@ -289,6 +315,8 @@ seq(from = time2, to = time3, by = "sec")
Le objets de classe `difftime` représentent des durées.

```{r}
#| echo: true
#| eval: true
age <- Sys.Date() - M_Drucker_birth
print(age)
Expand All @@ -310,6 +338,8 @@ arrivee_toronto - decollage_paris
Avec la fonction `units()`{.r}, on peut changer l'unité de la durée.

```{r}
#| echo: true
#| eval: true
# En minutes
units(age) <- "mins"
print(age)
Expand All @@ -321,7 +351,10 @@ print(age)

Le package `lubridate` propose aussi d'autres formatages des durées :

```{r, warning = FALSE}
```{r}
#| echo: true
#| eval: true
#| warning: false
library("lubridate")
time_length(age, unit = "year")
Expand Down Expand Up @@ -350,6 +383,8 @@ Une date au format `Date` est stockée sous la forme d'un nombre de jours
ainsi :

```{r}
#| echo: true
#| eval: true
# En R base
Sys.Date() + 5L # Date dans 5 jours
Expand All @@ -360,6 +395,8 @@ Sys.Date() + days(5L) # Date dans 5 jours
Par exemple, si je veux avoir la même date il y a 5 ou 4 ans :

```{r}
#| echo: true
#| eval: true
fev_29 <- base::as.Date("2016-02-29")
# Il y a 5 ans, 29 fevrier 2011 n'existe pas :
Expand All @@ -380,6 +417,8 @@ package `stats`. L'argument `frequency` est le nombre de période en 1
an.

```{r}
#| echo: true
#| eval: true
# Pour une série annuelle, frequency = 1L
serie_annuelle <- ts(1:20, start = 2003L, frequency = 1L)
Expand Down Expand Up @@ -438,6 +477,8 @@ fonctions suivantes :
temporelle

```{r}
#| echo: true
#| eval: true
start(serie_mensuelle)
end(serie_mensuelle)
frequency(serie_mensuelle)
Expand All @@ -449,6 +490,9 @@ Les dates en output de `time()`{.r} sont au format ts et non au format
`zoo::as.Date()`{.r} :

```{r, warning = FALSE}
#| echo: true
#| eval: true
#| warning: false
library("zoo")
zoo::as.Date(time(serie_mensuelle))
Expand All @@ -462,6 +506,8 @@ haute-fréquence.
On peut construire des séries journalières :

```{r}
#| echo: true
#| eval: true
#data : https://www.letour.fr/fr/parcours-general
date_tour_de_france <- seq(from = as.Date("2023-06-29"),
to = as.Date("2023-07-21"), by = "day")
Expand All @@ -477,6 +523,8 @@ On peut construire des séries infra-journalières (heure par heure ou
encore plus haute-fréquence) :

```{r}
#| echo: true
#| eval: true
#data : https://joint-research-centre.ec.europa.eu/photovoltaic-geographical-information-system-pvgis/pvgis-tools/hourly-radiation_en
heures_journee <- seq(from = as.POSIXct("2016-07-01 00:10:00"),
to = as.POSIXct("2016-07-01 23:10:00"), by = "hours")
Expand All @@ -498,6 +546,8 @@ La fonction `plot()`{.r} du package `graphics` (méthode `plot.ts()`{.r}
du package `stats`) permet d'afficher simplement des séries temporelles :

```{r plot}
#| echo: true
#| eval: true
plot(x = tour_de_france_ts, col = "blue",
ylab = "Distance (en km)", xlab = "Time",
main = "Distance parcourue par jour (TDF 2023)")
Expand All @@ -511,7 +561,10 @@ Le package `ggplot2` propose une grande variété de graphiques. Il est
nécessaire au préalable de convertir l'objet en `data.frame` pour
construire le graphique.

```{r ggplot2, warning = FALSE}
```{r ggplot2}
#| echo: true
#| eval: true
#| warning: false
library("ggplot2")
sunspots_df <- data.frame(date = time(sunspots), value = sunspots)
Expand All @@ -530,7 +583,10 @@ Le package `dygraphs` propose aussi des graphiques pour séries
temporelles. L'avantage de ce package est l'interactivité et la
possibilité de zoomer dans les graphiques.

```{r dygraphs, warning = FALSE}
```{r dygraphs}
#| echo: true
#| eval: true
#| warning: false
library("dygraphs")
dygraph(temp_ts)
Expand All @@ -539,6 +595,8 @@ dygraph(temp_ts)
On peut aussi afficher plusieurs courbes sur le même graphique :

```{r dygraph_multiple_plot}
#| echo: true
#| eval: true
dygraph(cbind(fdeaths, mdeaths))
```

Expand Down
Loading

0 comments on commit 24fce7a

Please sign in to comment.