Chapitre 5 Les opérations sur données attributaires

Dans ce chapitre, nous allons utiliser les packages suivants :

# CRAN
library(mapview)
library(sf)
library(tidyverse)

Nous utiliserons les contours des territoires de la France métropolitaine issus de Admin Express.

load("extdata/admin_express.RData")

Prenons la table des départements, cette table est un dataframe spatial.

class(departements_geo)
[1] "sf"         "data.frame"

On peut utiliser mapview() pour voir ce jeu de données.

mapview(departements_geo, zcol = "NOM_DEP", legend = FALSE)

Comme évoqué dans la partie 1, on peut tout à fait appliquer sur un dataframe spatial les verbes du tidyverse comme sur un dataframe, notamment utiliser les verbes de dplyr.

Nous pouvons à partir de cette table filtrer les départements d’une certaine région.

departements_geo %>%
  filter(INSEE_REG == 52)
# A tibble: 5 × 6
  ID                NOM_DEP INSEE_DEP INSEE_REG   AREA                  geometry
  <fct>             <fct>   <fct>     <fct>      [m^2]        <MULTIPOLYGON [m]>
1 DEP0000000000000… LOIRE-… 44        52        7.00e9 (((276339 6716135, 27628…
2 DEP0000000000000… MAINE-… 49        52        7.16e9 (((419761 6744627, 41976…
3 DEP0000000000000… MAYENNE 53        52        5.21e9 (((398109 6788330, 39810…
4 DEP0000000000000… SARTHE  72        52        6.24e9 (((463283 6791785, 46327…
5 DEP0000000000000… VENDEE  85        52        6.76e9 (((293744 6673579, 29370…

Nous pouvons ne sélectionner que quelques variables

departements_geo %>%
  select(INSEE_DEP) %>%
  glimpse()
Rows: 96
Columns: 2
$ INSEE_DEP <fct> 01, 2B, 02, 2A, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, …
$ geometry  <MULTIPOLYGON [m]> MULTIPOLYGON (((839096 6563..., MULTIPOLYGON ((…

A noter que par défaut, un dataframe spatial gardera toujours la géométrie. On dit qu’elle est collante. Au besoin, pour la supprimer d’un jeu de donnée, il faut lui appliquer la fonction st_drop_geometry() qui ne renverra que les données attributaires.

Nous pouvons agréger nos données.

regions <- departements_geo %>%
  group_by(INSEE_REG) %>%
  summarise(AREA = sum(AREA))

glimpse(regions)
Rows: 13
Columns: 3
$ INSEE_REG <fct> 11, 24, 27, 28, 32, 44, 52, 53, 75, 76, 84, 93, 94
$ AREA      [m^2] 12064378723 [m^2], 39470054055 [m^2], 47980260943 [m^2], 301…
$ geometry  <GEOMETRY [m]> POLYGON ((670084 6886723, 6..., POLYGON ((690565 6713347, 6.…

On voit que summarise permet non seulement d’agréger nos données attributaires, mais également les géométries.

Cette opération permet donc de retrouver directement notre carte des régions métropolitaines.

mapview(regions, zcol = "INSEE_REG", legend = FALSE)

On peut enfin effectuer des jointures attributaires sur nos données en utilisant les verbes à deux dataframes de dplyr.

Par exemple on va pouvoir récupérer, dans la table regions_geo de notre RData, les libellées de nos régions.

regions <- regions %>%
  left_join(regions_geo %>%
    st_drop_geometry(),
  by = c("INSEE_REG")
  )

Nous pouvons alors utiliser ce nouvelle attribut pour nos cartes.

mapview(regions, zcol = "NOM_REG", legend = FALSE)

Attention, quand vous réalisez une jointure entre deux tables de données :

X %>% ZZ_join(Y)

La composante spatiale n’est conservée que pour la première table X.