Tutoriel 1 : Rappels sur R et introduction aux données spatiales

Author

Gabrielle Gambuli

Découverte et manipulation des données de Nantes Métropole

Objectifs du tutoriel

Dans ce premier tutoriel, nous allons travailler à partir de données ouvertes de Nantes Métropole afin de revoir les principales notions de manipulation de données dans R, puis d’introduire progressivement les données spatiales.

Ce tutoriel poursuit trois objectifs :

  • revoir les bases de la manipulation de données dans R ;

  • apprendre à récupérer directement des données depuis un portail open data grâce à une API ;

  • découvrir le package sf et les principales notions liées aux données spatiales : géométrie, points, lignes, polygones, systèmes de coordonnées et cartes.

À la fin du tutoriel, vous devrez notamment être capable de :

  • explorer une base de données dans R ;

  • sélectionner des lignes et des colonnes ;

  • filtrer et agréger des données ;

  • comprendre ce qu’est une donnée spatiale ;

  • distinguer points, lignes et polygones ;

  • identifier et transformer un système de coordonnées ;

  • représenter des données spatiales sur une carte.

EXERCICE 1 : Rappels sur R

1. Préparer son environnement de travail

Aujourd’hui, nous allons utiliser quatre packages principaux :

  • dplyr pour manipuler les données

  • ggplot2 pour faire des graphiques

  • sf pour manipuler les données spatiales

  • mapview pour réaliser rapidement des cartes interactives

# install.packages(dplyr)
# install.packages(ggplot2)
# install.packages(sf)
# install.packages(mapview)

library(dplyr)

Attachement du package : 'dplyr'
Les objets suivants sont masqués depuis 'package:stats':

    filter, lag
Les objets suivants sont masqués depuis 'package:base':

    intersect, setdiff, setequal, union
library(ggplot2)
library(sf)
Linking to GEOS 3.11.2, GDAL 3.6.2, PROJ 9.2.0; sf_use_s2() is TRUE
library(mapview)
Warning: le package 'mapview' a été compilé avec la version R 4.3.2
The legacy packages maptools, rgdal, and rgeos, underpinning this package
will retire shortly. Please refer to R-spatial evolution reports on
https://r-spatial.org/r/2023/05/15/evolution4.html for details.
This package is now running under evolution status 0 
A retenir

Un package est une extension de R qui ajoute des fonctions et des outils supplémentaires. Il doit être installé une seule fois sur votre ordinateur, avec la fonction install.packages(), puis chargé à chaque nouvelle session R, avec la fonction library() .

Les packages nécessaires sont chargés au début du script.

2. Découvrir les données ouvertes de Nantes Métropole

Nantes Métropole et la Ville de Nantes mettent à disposition un grand nombre de données publiques sur leur portail open data. Ces données peuvent être consultées et téléchargées sous différents formats, notamment CSV, GeoJSON ou via une API.

Dans ce tutoriel, nous allons travailler avec plusieurs jeux de données :

Jeu de données Type de données Géométrie
Prénoms des enfants nés à Nantes Données tabulaires Aucune
Communes de Nantes Métropole Données spatiales Polygones
Équipements publics Données spatiales Points
Tronçons de voies Données spatiales Lignes

L’objectif est de se refamiliariser avec le fonctionnement de R et de découvrir comment travailler avec des données géographiques.

3. Télécharger des données avec une API

3.1. Qu’est-ce qu’une API ?

Une API (Application Programming Interface) permet à un programme informatique de communiquer avec un autre programme ou un service en ligne.

Dans notre cas, l’API du portail de Nantes Métropole nous permet de demander directement à R un jeu de données.

Cela présente un avantage important : nous n’avons pas besoin de télécharger manuellement le fichier depuis un navigateur. Notre code R peut directement aller chercher les données.

3.2. Pourquoi utiliser une API ?

L’utilisation d’une API permet notamment de faciliter la reproductibilité de votre travail, tout en limitant l’espace de stockage utilisé sur votre ordinateur. Elle permet également d’éviter le téléchargement et l’envoi de fichiers de données volumineux par mail lors de l’évaluation finale du projet, même si cette solution reste bien entendu possible si vous le souhaitez.

Une autre personne qui possède votre script peut exécuter le même code et récupérer les données directement depuis leur source.

4. Les prénoms des enfants nés à Nantes

Nous allons commencer avec un jeu de données qui n’est pas spatial.

Le jeu de données contient notamment des informations sur les prénoms, le sexe, l’année de naissance et le nombre d’occurrences.

4.1. Construire l’URL

url_prenoms <- paste0(
  "https://data.nantesmetropole.fr/api/explore/v2.1/catalog/datasets/", # adresse url générale
  "244400404_prenoms-enfants-nes-nantes/", # référence de la base de données que vous voulez télécharger
  "exports/csv" # format des données à télécharger
)

Nous avons créé un nouvel objet appelé url_prenoms. Il apparaît dans la fenêtre Environment, en haut à droite de votre écran. Il contient l’adresse à laquelle R pourra aller chercher les données.

On peut afficher son contenu :

url_prenoms
[1] "https://data.nantesmetropole.fr/api/explore/v2.1/catalog/datasets/244400404_prenoms-enfants-nes-nantes/exports/csv"

Une première notion importante

Le symbole <- permet d’affecter un résultat à un objet. On peut lire cette instruction comme :

« Je prends le résultat de paste0() et je le stocke dans l’objet appelé url_prenoms. »

4.2. Importer les données

Nous pouvons maintenant utiliser cette URL avec read.csv() :

prenoms <- read.csv(url_prenoms, sep = ";")

Nous avons maintenant créé l’objet prenoms. Il contient notre base de données.

5. Explorer une base de données dans R

Lorsque nous découvrons une nouvelle base de données, il est important de commencer par l’explorer. Avant de faire des analyses, nous devons notamment savoir :

  • combien elle contient de lignes ;

  • combien elle contient de colonnes ;

  • quelles variables sont disponibles ;

  • quel type d’informations contient chaque variable.

5.1. Afficher les premières lignes

head(prenoms)
  commune_nom coll_insee enfant_sexe occurrence    prenom  sexe annee_naissance
1      Nantes      44109          NA         34    Olivia FILLE            2025
2      Nantes      44109          NA         30     Ambre FILLE            2025
3      Nantes      44109          NA         22  Juliette FILLE            2025
4      Nantes      44109          NA         22    Léonie FILLE            2025
5      Nantes      44109          NA         21 Fatoumata FILLE            2025
6      Nantes      44109          NA         20 Gabrielle FILLE            2025

La fonction head() affiche les premières lignes d’un objet. C’est une première manière très rapide de vérifier que l’importation s’est correctement déroulée.

5.2. Afficher les noms des variables

names(prenoms)
[1] "commune_nom"     "coll_insee"      "enfant_sexe"     "occurrence"     
[5] "prenom"          "sexe"            "annee_naissance"

La fonction names() permet d’afficher les noms des colonnes, où chaque colonne correspond à une variable.

Par exemple, notre base contient les informations suivantes :

  • l’année de naissance ;

  • le prénom ;

  • le sexe ;

  • le nombre d’occurrences.

5.3. Connaître les dimensions de la base

dim(prenoms)
[1] 7087    7

La fonction dim() donne les dimensions de la base : nombre de lignes x nombre de colonnes

On peut également obtenir ces deux informations séparément :

nrow(prenoms)
[1] 7087
ncol(prenoms)
[1] 7

Lignes et colonnes

Dans une base de données :

  • une ligne correspond à une observation ;

  • une colonne correspond à une variable.

Par exemple, ici une ligne correspond à un prénom donné pour une année donnée.

6. Accéder à une variable

Il existe plusieurs manières d’accéder à une colonne.

La notation avec $ est particulièrement pratique :

prenoms$prenom

Cette instruction demande à R de récupérer la colonne prenom de l’objet prenoms.

On peut ensuite appliquer des fonctions à cette colonne.

Par exemple :

length(prenoms$prenom)
[1] 7087

Compter les valeurs différentes

Nous pouvons par exemple chercher combien de prénoms uniques (valeurs différentes) sont présentes dans la base :

length(unique(prenoms$prenom))
[1] 773

7. Sélectionner des lignes et des colonnes

Une autre manière très importante de naviguer dans une base de données est d’utiliser les crochets [].

La syntaxe générale est :

base[lignes, colonnes]

Ce qui se trouve :

  • avant la virgule correspond aux lignes ;

  • après la virgule correspond aux colonnes.

7.1. Sélectionner certaines lignes et certaines colonnes

prenoms[c(1:10), c(7, 5, 4)]
   annee_naissance    prenom occurrence
1             2025    Olivia         34
2             2025     Ambre         30
3             2025  Juliette         22
4             2025    Léonie         22
5             2025 Fatoumata         21
6             2025 Gabrielle         20
7             2025    Mariam         17
8             2025      Nour         16
9             2025    Soline         13
10            2025       Léa         12

Nous sélectionnons ici :

  • les lignes 1 à 10 ;

  • les colonnes 7, 5 et 4.

Le résultat est donc un sous-ensemble de la base initiale.

7.2. Filtrer des observations

Nous pouvons également utiliser une condition.

Par exemple, nous voulons conserver uniquement les observations correspondant au prénom Gabrielle :

prenoms[prenoms$prenom == "Gabrielle",  c(7, 5, 4)]
     annee_naissance    prenom occurrence
6               2025 Gabrielle         20
77              2023 Gabrielle         17
332             2016 Gabrielle         10
503             2011 Gabrielle         15
571             2009 Gabrielle         13
1245            2015 Gabrielle          9
1623            2005 Gabrielle          9
2014            2019 Gabrielle         14
2283            2012 Gabrielle         12
3259            2020 Gabrielle         16
3500            2014 Gabrielle         12
3694            2022 Gabrielle         23
3735            2021 Gabrielle         19
4292            2006 Gabrielle          6
4758            2017 Gabrielle         10
5487            2007 Gabrielle         12
5995            2018 Gabrielle         17
6254            2024 Gabrielle         18
6674            2013 Gabrielle         13
6845            2008 Gabrielle          8

Le symbole == signifie :

« est égal à »

Nous demandons donc à R :

« Garde uniquement les lignes pour lesquelles la variable prenom est égale à "Gabrielle" ».

Attention

Il ne faut pas confondre : = ; == ; <-

  • == sert à tester une égalité

  • <- sert à créer ou modifier un objet

  • = sert aussi à créer ou modifier un objet, mais on privilégiera <- pour l’affectation, par convention

8. Manipuler les données avec dplyr

Nous allons maintenant utiliser le package dplyr. Il propose des fonctions très pratiques pour manipuler des bases de données.

Les fonctions principales que nous allons utiliser sont :

Fonction Rôle
select() Sélectionner des colonnes
filter() Sélectionner des lignes
mutate() Créer ou modifier des colonnes
arrange() Trier les observations
group_by() Créer des groupes
summarise() Calculer des statistiques résumées

9. Sélectionner des colonnes avec select()

Nous pouvons sélectionner uniquement les variables qui nous intéressent.

Par exemple

prenoms %>%
  select(annee_naissance, prenom, occurrence) %>% 
  head()
  annee_naissance    prenom occurrence
1            2025    Olivia         34
2            2025     Ambre         30
3            2025  Juliette         22
4            2025    Léonie         22
5            2025 Fatoumata         21
6            2025 Gabrielle         20

Nous conservons ici uniquement trois variables : annee_naissance, prenom , occurrence.

Le symbole %>% (appelé pipe) permet d’enchaîner plusieurs opérations.

On peut lire l’opération comme :

« À partir de prenoms, réalise l’opération select(). »

Astuce

Dans RStudio, vous pouvez utiliser un raccourci clavier pour insérer rapidement le pipe %>% : Ctrl + Maj + M.

10. Filtrer avec filter()

Nous pouvons ensuite conserver uniquement certaines observations.

Par exemple :

prenoms %>%
  filter(prenom == "Gabrielle") %>% 
  head()
  commune_nom coll_insee enfant_sexe occurrence    prenom  sexe annee_naissance
1      Nantes      44109          NA         20 Gabrielle FILLE            2025
2      Nantes      44109          NA         17 Gabrielle FILLE            2023
3      Nantes      44109          NA         10 Gabrielle FILLE            2016
4      Nantes      44109          NA         15 Gabrielle FILLE            2011
5      Nantes      44109          NA         13 Gabrielle FILLE            2009
6      Nantes      44109          NA          9 Gabrielle FILLE            2015

Cette instruction conserve uniquement les lignes correspondant au prénom Gabrielle.

Nous pouvons combiner plusieurs opérations :

gabrielle_evolution <- prenoms %>%
  select(annee_naissance, prenom, occurrence) %>%
  filter(prenom == "Gabrielle") %>%
  arrange(annee_naissance)

Nous avons ici :

  1. sélectionné trois variables

  2. filtré les observations (lignes) où le prénom est Gabrielle

  3. trié les observations par année (ordre croissant)

  4. enregistré le résultat dans un nouvel objet appelé gabrielle_evolution

On peut ensuite afficher le résultat :

gabrielle_evolution
   annee_naissance    prenom occurrence
1             2005 Gabrielle          9
2             2006 Gabrielle          6
3             2007 Gabrielle         12
4             2008 Gabrielle          8
5             2009 Gabrielle         13
6             2011 Gabrielle         15
7             2012 Gabrielle         12
8             2013 Gabrielle         13
9             2014 Gabrielle         12
10            2015 Gabrielle          9
11            2016 Gabrielle         10
12            2017 Gabrielle         10
13            2018 Gabrielle         17
14            2019 Gabrielle         14
15            2020 Gabrielle         16
16            2021 Gabrielle         19
17            2022 Gabrielle         23
18            2023 Gabrielle         17
19            2024 Gabrielle         18
20            2025 Gabrielle         20

11. Créer un graphique avec ggplot2

Nous pouvons utiliser le package ggplot2 et sa fonction ggplot() pour représenter graphiquement l’évolution du nombre de naissances associées au prénom Gabrielle au fil des années.

ggplot(gabrielle_evolution, aes(x = annee_naissance, y = occurrence)) + # Indiquez les données et les variables à représenter
  geom_point(size = 2, color = "black") + # Affichez chaque observation par des points
  geom_line(linewidth = 1, color = "black") + # Tracez une ligne qui relie les observations entre elles (bien pour montrer des évolutions)
  labs(
    title = "Évolution de la popularité du prénom Gabrielle",
    x = "Année",
    y = "Nombre de naissances"
  ) + # Définissez le titre et les noms des axes
  theme_minimal(base_size = 12) + # Appliquez une mise en forme épurée
  theme(
    plot.title = element_text(face = "bold")
  ) # Personnalisez certains éléments, ici le titre en gras.

12. Agréger des données

Quels sont les prénoms féminins les plus fréquents dans la base (entre 2000 et 2025) ?

Pour cela, nous allons devoir :

  1. sélectionner les filles

  2. regrouper les observations par prénom

  3. additionner les occurrences

  4. classer les résultats

Les prénoms féminins

prenoms_total_fille <- prenoms %>%
  filter(sexe == "FILLE") %>%
  group_by(prenom) %>%
  summarise(
    occurrence = sum(occurrence),
    .groups = "drop"
  ) %>%
  arrange(desc(occurrence))
A vous de jouer
  1. Quels sont les 10 prénoms féminins les plus fréquents ?

  2. Quels sont les 10 prénoms masculins les plus fréquents ?

  3. Comment obtenir uniquement les prénoms dont le nombre total d’occurrences dépasse 100 ?

  4. Etudiez l’évolution du prénom de votre choix.

EXERCICE 2 : Les données spatiales / géolocalisées

Jusqu’à présent, nous avons manipulé des données sous forme de tableau. Nous allons maintenant introduire une nouvelle dimension : l’espace.

Une donnée spatiale contient non seulement des informations sur des objets, mais également des informations permettant de localiser ces objets géographiquement.

Par exemple :

  • une école peut être représentée par un point ;

  • une route peut être représentée par une ligne ;

  • une commune peut être représentée par un polygone.

Le package sf permet de manipuler ce type de données dans R.

1. Les données spatiales avec sf

sf signifie Simple Features. Une couche sf ressemble beaucoup à une base de données classique, mais elle contient en plus une colonne particulière contenant la géométrie. La géométrie permet de savoir où se situe chaque observation.

2. Les communes de Nantes Métropole : des polygones

Commençons par les communes.

Nous allons récupérer le jeu de données au format GeoJSON grâce à l’API.

url_communes <- paste0(
  "https://data.nantesmetropole.fr/api/explore/v2.1/catalog/datasets/",
  "244400404_communes-nantes-metropole/",
  "exports/geojson"
)

Puis nous utilisons st_read() pour importer la base de données dans notre environnement. La fonction st_read() est une fonction du package sf qui permet de lire une donnée spatiale.

communes <- st_read(url_communes)
Reading layer `geojson' from data source 
  `https://data.nantesmetropole.fr/api/explore/v2.1/catalog/datasets/244400404_communes-nantes-metropole/exports/geojson' 
  using driver `GeoJSON'
Simple feature collection with 24 features and 6 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: -1.921795 ymin: 47.10192 xmax: -1.358526 ymax: 47.35328
Geodetic CRS:  WGS 84

Nous pouvons regarder les premières lignes :

head(communes)
Simple feature collection with 6 features and 6 fields
Geometry type: POLYGON
Dimension:     XY
Bounding box:  xmin: -1.921795 ymin: 47.18332 xmax: -1.358526 ymax: 47.34416
Geodetic CRS:  WGS 84
  gid  idobj id_insee   maj_date                       nom
1   9 440074    44074 2022-11-15                     INDRE
2  20 440094    44094 2022-11-15          MAUVES-SUR-LOIRE
3  24 440190    44190 2022-11-15 SAINT-SEBASTIEN-SUR-LOIRE
4   8 440114    44114 2022-11-15                   ORVAULT
5   5 440120    44120 2022-11-15               LE PELLERIN
6  12 440194    44194 2022-11-15                   SAUTRON
                   toponyme                       geometry
1                     Indre POLYGON ((-1.694991 47.1997...
2          Mauves-sur-Loire POLYGON ((-1.395976 47.2849...
3 Saint-Sébastien-sur-Loire POLYGON ((-1.474128 47.1867...
4                   Orvault POLYGON ((-1.589394 47.2392...
5               Le Pellerin POLYGON ((-1.747217 47.2052...
6                   Sautron POLYGON ((-1.66799 47.25178...

Vous remarquerez qu’en plus des variables classiques, l’objet contient une colonne geometry. C’est cette colonne qui contient l’information spatiale.

3. Le système de coordonnées — CRS

Une question essentielle se pose maintenant :

Comment R sait-il où se trouvent ces communes ?

La réponse repose sur le système de coordonnées de référence, ou CRS (Coordinate Reference System).

Nous pouvons connaître le CRS d’une couche avec :

st_crs(communes)
Coordinate Reference System:
  User input: WGS 84 
  wkt:
GEOGCRS["WGS 84",
    DATUM["World Geodetic System 1984",
        ELLIPSOID["WGS 84",6378137,298.257223563,
            LENGTHUNIT["metre",1]]],
    PRIMEM["Greenwich",0,
        ANGLEUNIT["degree",0.0174532925199433]],
    CS[ellipsoidal,2],
        AXIS["geodetic latitude (Lat)",north,
            ORDER[1],
            ANGLEUNIT["degree",0.0174532925199433]],
        AXIS["geodetic longitude (Lon)",east,
            ORDER[2],
            ANGLEUNIT["degree",0.0174532925199433]],
    ID["EPSG",4326]]

Le CRS indique notamment comment interpréter les coordonnées contenues dans la géométrie.

Il est essentiel lorsque nous souhaitons :

  • superposer plusieurs couches ;

  • calculer des distances ;

  • calculer des surfaces ;

  • effectuer des opérations spatiales ;

  • produire des cartes.

4. Transformer le système de coordonnées

Nous pouvons transformer la couche dans un autre système de coordonnées avec st_transform().

Dans notre exemple, nous allons utiliser le Lambert-93, dont le code EPSG est 2154.

communes_lambert <- st_transform(communes, crs = 2154)

Nous pouvons vérifier le résultat :

st_crs(communes_lambert)
Coordinate Reference System:
  User input: EPSG:2154 
  wkt:
PROJCRS["RGF93 v1 / Lambert-93",
    BASEGEOGCRS["RGF93 v1",
        DATUM["Reseau Geodesique Francais 1993 v1",
            ELLIPSOID["GRS 1980",6378137,298.257222101,
                LENGTHUNIT["metre",1]]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433]],
        ID["EPSG",4171]],
    CONVERSION["Lambert-93",
        METHOD["Lambert Conic Conformal (2SP)",
            ID["EPSG",9802]],
        PARAMETER["Latitude of false origin",46.5,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8821]],
        PARAMETER["Longitude of false origin",3,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8822]],
        PARAMETER["Latitude of 1st standard parallel",49,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8823]],
        PARAMETER["Latitude of 2nd standard parallel",44,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8824]],
        PARAMETER["Easting at false origin",700000,
            LENGTHUNIT["metre",1],
            ID["EPSG",8826]],
        PARAMETER["Northing at false origin",6600000,
            LENGTHUNIT["metre",1],
            ID["EPSG",8827]]],
    CS[Cartesian,2],
        AXIS["easting (X)",east,
            ORDER[1],
            LENGTHUNIT["metre",1]],
        AXIS["northing (Y)",north,
            ORDER[2],
            LENGTHUNIT["metre",1]],
    USAGE[
        SCOPE["Engineering survey, topographic mapping."],
        AREA["France - onshore and offshore, mainland and Corsica (France métropolitaine including Corsica)."],
        BBOX[41.15,-9.86,51.56,10.38]],
    ID["EPSG",2154]]
Astuce

Pour représenter des données géographiques en France métropolitaine, deux systèmes de coordonnées sont particulièrement courants :

1. WGS84 — EPSG:4326

Le système WGS84 utilise des coordonnées géographiques exprimées en degrés :

  • Longitude (x) : environ de −5,2° à +9,6°

  • Latitude (y) : environ de +41,3° à +51,1°

2. Lambert 93 — EPSG:2154

Le système Lambert 93 est le système de référence officiel utilisé en France métropolitaine.

Les coordonnées sont exprimées en mètres :

  • Coordonnée x : environ de 100 000 à 1 300 000 m

  • Coordonnée y : environ de 6 000 000 à 7 200 000 m

5. Première carte avec mapview et ggplot

Nous pouvons maintenant représenter nos communes sur une carte de deux façons.

Avec mapview, nous obtenons une carte interactive, particulièrement pratique pour explorer les données :

mapview(communes)

Avec ggplot2, nous pouvons créer une carte statique, davantage adaptée à une présentation ou à un rapport :

ggplot(communes) +
  geom_sf(aes(fill = nom), alpha = 0.5) + # aes(fill = ) permet de colorier les communes selon leur nom
  #geom_sf_label(aes(label = nom), size = 3) +
  theme_void() +
  theme(legend.position = "none")

La ligne geom_sf_label() est ici commentée (#). Elle peut être décommentée pour afficher le nom de chaque commune sur la carte.

6. Les tronçons de voies : des lignes

Nous allons maintenant travailler avec un troisième type de géométrie : les lignes.

Nous allons récupérer les tronçons de voies de Nantes Métropole. Le portail propose notamment un export au format GeoJSON pour ce jeu de données.

url_voies <- paste0(
  "https://data.nantesmetropole.fr/api/explore/v2.1/catalog/datasets/",
  "244400404_troncons-voies-nantes-metropole/",
  "exports/geojson"
)

voies <- st_read(url_voies)
Reading layer `geojson' from data source 
  `https://data.nantesmetropole.fr/api/explore/v2.1/catalog/datasets/244400404_troncons-voies-nantes-metropole/exports/geojson' 
  using driver `GeoJSON'
Simple feature collection with 40541 features and 30 fields
Geometry type: MULTILINESTRING
Dimension:     XY
Bounding box:  xmin: -1.904228 ymin: 47.11702 xmax: -1.360156 ymax: 47.3533
Geodetic CRS:  WGS 84

Nous pouvons explorer l’objet :

View(voies)

Nous avons différents types de voies :

cat("==== Classement PDU ====\n")
==== Classement PDU ====
unique(voies$classement_pdu)
[1] "Voie Secondaire"                "Voie principale de catégorie A"
[3] "Voie principale de catégorie B" "Voie Magistrale"               
[5] NA                              
cat("==== Classement Circulation ====\n")
==== Classement Circulation ====
unique(voies$classement_circulation)
[1] "Circulation Non Sensible"  "Circulation Très Sensible"
[3] "Circulation Sensible"      NA                         
cat("==== Statut ====\n")
==== Statut ====
unique(voies$statut)
[1] "Voie publique" "Voie privée"   "Mixte"         "Inconnu"      
[5] NA             
A vous de jouer

Visualiser la base de données :

  1. Combien a-t-elle de lignes et de colonnes ?
  2. Comment s’appelle la géométrie utilisée ?
  3. Quel CRS est utilisé ?
  4. Faites une carte en ne faisant apparaître que les voies principales et magistrales de la zone d’étude.

7. Les équipements publics : des points

Nous allons maintenant travailler avec les équipements publics de Nantes Métropole.

Nous construisons l’URL et importons les données :

url_equip_pub <- paste0(
  "https://data.nantesmetropole.fr/api/explore/v2.1/catalog/datasets/",   
  "244400404_equipements-publics-nantes-metropole/",   
  "exports/geojson" )

equip_pub <- st_read(url_equip_pub)
Reading layer `geojson' from data source 
  `https://data.nantesmetropole.fr/api/explore/v2.1/catalog/datasets/244400404_equipements-publics-nantes-metropole/exports/geojson' 
  using driver `GeoJSON'
Simple feature collection with 3842 features and 42 fields
Geometry type: POINT
Dimension:     XY
Bounding box:  xmin: -1.827033 ymin: 47.12003 xmax: -1.371781 ymax: 47.34134
Geodetic CRS:  WGS 84
A vous de jouer
  1. Visualiser les équipements publiques par type d’équipement.
  2. Visualiser un unique point sur une carte : notre IAE.
  3. Compter le nombre d’infrastructures de sport et loisirs présents dans chaque commune de la métropole de Nantes.
  4. Faites une carte chloropèthe affichant le nombre d’infrastructures de sport et loisirs par commune.

Conclusion

Dans ce premier tutoriel, nous avons commencé par revoir les bases de la manipulation de données dans R avant de passer progressivement aux données spatiales.

Nous avons appris à récupérer des données directement depuis une API, à explorer une base de données, à sélectionner et filtrer des observations, puis à agréger des informations avec dplyr.

Nous avons ensuite découvert sf et la notion de géométrie. Nous avons vu que les données géographiques peuvent être représentées sous forme de points, lignes ou polygones, et qu’elles sont associées à un système de coordonnées.

Enfin, nous avons produit nos premières cartes interactives avec mapview.

L’idée centrale à retenir : une donnée spatiale est une donnée classique à laquelle est associée une information géographique permettant de localiser les observations dans l’espace.

C’est cette dimension spatiale qui va nous permettre, dans les prochains tutoriels, de réaliser des opérations plus avancées : croiser des données géographiques (jointures spatiales), calculer des distances, construire des indicateurs territoriaux, etc.