Skip to content

Commit

Permalink
correction R v4.2 (#526)
Browse files Browse the repository at this point in the history
  • Loading branch information
TanguyBarthelemy authored Jun 5, 2024
1 parent a0b1faf commit 12a8638
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 22 deletions.
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
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

0 comments on commit 12a8638

Please sign in to comment.