• 12 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 16/04/2024

Menez une analyse de variation spatio-temporelle

Identifiez les différentes périodicités

Suite à une discussion avec votre cheffe Camille, vous vous êtes rendu compte que les données spatio-temporelles sont rarement analysées pour elles-mêmes, mais plutôt pour voir les variations dans le temps et l’espace des variables qualitatives et quantitatives.

Intuitivement vous vous attendez à avoir des températures plus hautes en été qu’en hiver. Ce savoir est basé sur votre connaissance de la cyclicité des températures. La cyclicité des températures peut être décomposée à plusieurs échelles temporelles :

  • Tendance journalière : les températures sont plus hautes en journée que la nuit.

  • Tendance mensuelle : les températures mesurées en janvier sont plus proches de celles de décembre et février.

  • Tendance saisonnière : les températures en été sont très éloignées de celles de l’hiver.

Les différences de température mesurées entre deux jours consécutifs sont assimilées au bruit. Cette décomposition est représentée dans la partie suivante.

De la même manière, vous vous attendez sûrement à ce que les températures à proximité de la mer Méditerranée soient supérieures à celles mesurées en Bretagne ou près de la mer du Nord.

Représentez les variables quantitatives dans le temps

Seules les mesures de température varient dans le temps, et cela tombe bien car c’est le sujet qui intéresse le plus vos collègues. En effet, Cara est intéressée par la variation des températures entre les départements et Anna par celle entre les mois.

Représentez l’évolution des températures sur les trois années

Afin de suivre l’évolution des températures sur les trois années à l’échelle d’un département, vous décidez de faire un test sur le département du Maine-et-Loire.

Vous allez utiliser la fonction  geom_line()  du package  {ggplot2}  afin de tracer la température moyenne en fonction de la date d’observation.

donnees_temperature |> 
  filter(departement == "Maine-et-Loire") |> 
  ggplot() +
  aes(x = date_obs, y = tmoy) +
  geom_line() +
  ggtitle("Maine et Loire") +
  theme_classic()
Graphique résultat de la fonction geom_line() dans le Maine et Loire entre les années 2021 et 2024.
Graphique résultat de la fonction geom_line()

Vous décidez de rajouter les températures minimales en bleu et moyenne en rouge grâce à la même fonction.

donnees_temperature |> 
  filter(departement == "Maine-et-Loire") |> 
  ggplot() +
  aes(x = date_obs, y = tmoy) +
  geom_line() +
  geom_line(aes(y = tmin), color = "blue") +
  geom_line(aes(y = tmax), color = "red") +
  ggtitle("Maine et Loire") +
  ylab("Température") +
  theme_classic()
Rajout des températures minimales en bleu et moyenne en rouge dans le Maine et Loire entre les années 2021 et 2024.
Rajout des températures minimales en bleu et moyenne en rouge

Malheureusement, Cara n’est pas satisfaite de votre graphique. En effet, il ne permet pas aux visiteurs du site de comprendre d’un coup d'œil les évolutions de température au sein du Maine-et-Loire. Elle vous demande donc de n’afficher que les tendances et non les différences journalières. Vous utilisez alors la fonction  geom_smooth()  pour lisser vos courbes.

donnees_temperature |> 
  filter(departement == "Maine-et-Loire") |> 
  ggplot() +
  aes(x = date_obs, y = tmoy) +
  geom_smooth(color = "black") +
  geom_smooth(aes(y = tmin), color = "blue", se = FALSE) +
  geom_smooth(aes(y = tmax), color = "red") +
  ggtitle("Maine et Loire") +
  ylab("Température") +
  theme_classic()
Affichage des tendances avec la fonction geom_smooth() dans le Maine et Loire entre les années 2021 et 2024.
Affichage des tendances avec la fonction geom_smooth()

Le résultat convient mieux mais une de vos collègues trouve cette visualisation :

Elle aimerait donc que vous fassiez un diagramme circulaire avec les températures.

Réalisez un radar plot pour comparer les températures moyennes

Vous allez donc avoir besoin du package  {fmsb}  pour créer un graphique radar, aussi appelé toile d'araignée.

Pour pouvoir le faire, vous allez avoir besoin de calculer la température moyenne par mois et année grâce à la fonction  summarise()  du package  {dplyr}  , en groupant par mois et année grâce à  group_by()  du même package :

representation_radar <- donnees_temperature |>
filter(departement == "Maine-et-Loire") |>
group_by(mois, annee) |>
summarise(moyenne = mean(tmoy))

Vous avez ensuite besoin de pivoter la table pour avoir une ligne par année et une colonne par mois grâce à la fonction  pivot_wider()  du package  {tidyr}  :

representation_radar <- donnees_temperature |>
filter(departement == "Maine-et-Loire") |>
group_by(mois, annee) |>
summarise(moyenne = mean(tmoy)) |>
pivot_wider(
names_from = mois,
values_from = moyenne
)

Puis ajoutez le nom de l’année en tant que nom de ligne grâce à l’utilisation de la fonction  column_to_rownames()  du package  {tibble}  :

representation_radar <- donnees_temperature |>
filter(departement == "Maine-et-Loire") |>
group_by(mois, annee) |>
summarise(
moyenne = mean(tmoy)
) |>
ungroup() |>
pivot_wider(
names_from = mois,
values_from = moyenne
) |>
column_to_rownames("annee")

Il faut ensuite ajouter les limites minimale et maximale pour les températures – donc selon le graphique réalisé précédemment, le minimum sera -5 et le maximum 35 en tant que première ligne – puis réaliser le graphique grâce à la fonction  radarchart()  du package  {fmsb}  :

rbind(
rep(35, 12),
rep(-5, 12),
representation_radar
) |>
radarchart()
Graphique généré par la fonction radarchart() représentant une toile d'araignée avec les mois de l'année dans le désordre faisant le tour de cette toile.
Graphique généré par la fonction radarchart()

Lors d’une pause repas, une de vos collègues vous demande si les températures moyennes montrent une augmentation au cours des trois années, comme le graphique semble le montrer. Vous lui répondez que vous allez tester et que vous lui répondrez en fin de journée.

Décomposez l’évolution de la température moyenne

Vous commencez donc par visualiser la périodicité grâce à la fonction  decompose()  du package  {base}  , après avoir transformé les températures moyennes du Maine-et-Loire en série temporelle grâce à la fonction  ts()  du même package.

dplyr::filter(
donnees_temperature,
departement == "Maine-et-Loire"
)$tmoy |>
ts(frequency = 365) |>
decompose("additive") |>
plot()
Exemple de graphique décomposant l'évolution de la température moyenne
Exemple de graphique décomposant l'évolution de la température moyenne

La partie Trend (tendance générale) montre une augmentation d’environ 1°C sur les trois ans.

Représentez la variation spatiale d’une variable

Lors de l’analyse univariée, vous avez représenté les coordonnées géographiques des différents chefs-lieux, donc vous avez représenté la variation spatiale d’une variable qualitative.

Dans cette section, vous allez apprendre à réaliser des cartes choroplèthes.

Une carte choroplèthe est une carte sur laquelle les zones sont colorées ou remplies en fonction d'une information.

L’information peut être qualitative, par exemple le niveau de densité de la population par département, ou quantitative, comme la température minimale enregistrée.

La carte choroplèthe peut être réalisée avec le package  {ggplot2}  ou  {leaflet}  .

Représentez la variation spatiale de la densité de population

Pour représenter la densité de population en fonction du département, vous allez pouvoir utiliser{ggplot2}.

Il est nécessaire d’utiliser la couche département en l’important avec la fonction  st_read()  du package  {sf}  , à laquelle vous allez ajouter le niveau de densité de population tiré du jeu de données grâce à la fonction  left_join()  de  {dplyr}  . Il faut ensuite transformer le tableau créé en objet  sf  grâce à la fonction  st_transform()  de  {sf}  :

departement <- st_read(
dsn = "data/departement",
layer = "DEPARTEMENT",
quiet = TRUE
) |>
left_join(
donnees_temperature |>
distinct(departement, densite_pop),
by = join_by(NOM == departement)
) |>
st_transform()

Pensez à utiliser la fonction  summary()  pour vérifier qu’il n’y a pas de valeurs manquantes qui seraient apparues :  summary(departement)  .

La représentation se fait ensuite grâce à la fonction  geom_sf()  du package  {ggplot2}  .

ggplot(departement) +
aes(fill = densite_pop) +
geom_sf() +
coord_sf(crs = 4326) +
theme(legend.position = "none") +
theme_classic()
Représentation graphique générée avec la fonction geom_sf()
Représentation graphique générée avec la fonction geom_sf()

Représentez la variation spatiale des températures en fonction du mois

Il paraît difficile de représenter l’intégralité des températures sur une seule carte. L’idée que votre collègue a eue est de calculer par département la température moyenne moyennée sur les trois ans. C’est la température que la carte montrera. Les températures extrêmes enregistrées seront présentées dans un pop-up.

Pour pouvoir faire cela, vous allez avoir besoin d’une table résumée comme avec la variation temporelle, grâce à  summarise()  du package  {dplyr}  , et de l’ajout des contours des départements comme précédemment avec  {ggplot2}  .

departement_quanti <-
st_read(
dsn = "data/departement",
layer = "DEPARTEMENT"
) |>
inner_join(
donnees_temperature |>
group_by(departement) |>
summarise(
temperature_moyenne = mean(tmoy),
temperature_minimale = min(tmin),
temperature_maximale = max(tmax)
),
by = c("NOM" = "departement")
) |>
st_transform(crs = '+proj=longlat +datum=WGS84')

Une fois le jeu de données créé, il reste à faire la carte interactive grâce au package  {leaflet}  , à la fonction  addPolygons()  pour créer les polygones et à  colorQuantile()  pour créer une échelle de couleurs en fonction des températures.

leaflet() |>
addTiles() |>
addPolygons(
data = departement_quanti,
color = ~ colorQuantile(
"YlOrRd",
temperature_moyenne)(temperature_moyenne),
stroke = 1,
opacity = 0.8,
label = ~ glue::glue("temperature minimal : {temperature_minimale} °C temperature maximal : {temperature_maximale} °C")
)
Exemple de résultat de carte interactive
Exemple de résultat de carte interactive

À vous de jouer

Contexte

Antoine est super content de votre réalisation, mais Anna vous rappelle que vous aviez décidé de réaliser une carte fixe par mois avec la température moyenne uniquement, et qui sera actualisée chaque mois pour ne présenter que le mois choisi, afin d’alléger le trafic sur le site internet.

Consignes

Vous devez donc générer 12 cartes fixes avec la température moyenne.

Pour ce faire, vous devez :

  1. Reprendre les lignes ci-dessous pour faire la table  departement_quanti  en ajoutant le  mois  dans la fonction  group_by()  en plus du département, et en ne calculant que la température moyenne dans la fonction  summarise()  .

  2. Représenter ces données grâce au package{ggplot2} comme dans la carte de densité de population par département. 

En résumé

  • L’ajout d’une dimension temporelle permet de prendre en compte la saisonnalité.

  • L’ajout d’une dimension spatiale est basé sur le type d’objet géographique : points, vecteurs et polygones.

  • L’ajout d’une dimension spatio-temporelle permet de mieux comprendre les données.

  • Les statistiques associées sont trop complexes pour ce cours.

  • Les graphiques produits sont intéressants.

Vos collègues sont ravis de votre travail et vous félicitent.

Il vous reste à vérifier que tous les points d’analyse du blueprint sont bien traités, et c’est ce que nous allons voir dans le dernier chapitre de ce cours !

Exemple de certificat de réussite
Exemple de certificat de réussite