Versement de données d’inventaires piscicoles OFB à la plateforme Biodiv’Bretagne
Introduction
Contexte
Le Système d’information de l’inventaire du patrimoine naturel, ou SINP, permet de rassembler, structurer et bancariser les données sur la biodiversité en France. La plupart des jeux de données collectés au niveau national y sont versés directement. En revanche, les observations collectées à des échelles infra-nationales sont collectées par des plateformes régionales totalement interopérables avec le SINP national. En Bretagne il s’agit de la plateforme régionale “Biodiv’Bretagne” administrée par l’Observatoire de l’Environnement en Bretagne (OEB).
La Direction Régionale Bretagne de l’Office Français de la Biodiversité a entrepris, depuis 2015, un projet visant à améliorer les connaissances sur la faune piscicole des cours d’eau de la région. Les équipes des 4 services départementaux ont effectué des pêches d’inventaire en ciblant les petits bassins côtiers, particulièrement méconnus. Les données collectées à cette occasion doivent être versées au SINP via la plateforme “Biodiv’Bretagne”.
Objet du tuto
Ce guide décrit comment mettre à jour du jeu de données “pêches atlas” de la plateforme “Biodiv’Bretagne”. Celui-ci est identifié dans son ensemble par un identifiant unique (UUID) dont la valeur est 1e727cde-8ce3-48c2-874f-b76a5eca9e5f, stable au fil des millésimes et commun à la plateforme régionale et au SINP. Il est accompagné de deux fiches de métadonnées (liens à rajouter).
Principe
Les données sont saisies et administrées dans un fichier shapefile. Elles doivent être mises en forme avant d’être intégrées à la plateforme régionale du SINP :
- Passage depuis le format de table “large” (une colonne par espèce) au format “long”.
- Reprojection pour obtenir les coordonnées en WGS84.
- Sélection et renommage des colonnes.
- Création d’une variable contenant un identifiant unique (UUID) par observation \(\Rightarrow\) donnée d’occurrence.
- Ajout des identifiants du référentiel taxonomique de l’INPN Taxref.
Les étapes de la procédures de mise à jour sont les suivantes :
- Lecture du nouveau fichier de données au format shapefile et mise en forme selon les étapes ci-dessus.
- Lecture du précédent fichier de données qui a déjà été versé à la plateforme. Il est déjà en forme.
- Fusion des deux en conservant les identifiants uniques des observations existantes et en les créant pour les nouvelles observations.
- Exportation du tableau de données au format
.csvcompatible avec Biodiv’Bretagne. - Envoi au correspondant de la plateforme à l’OEB.
NB Le fichier
.csvexporté doit impérativement être archivé car il sera indispensable pour la mise à jour suivante.
Mise en oeuvre
Chargement des packages
Le package of3b (pour OFB \(\Rightarrow\) Biodiv’Bretagne) a été développé pour faciliter le versement des données régionales de l’OFB vers la plateforme “Biodiv’Bretagne”.
Le package aspe permet d’opérer la conversion depuis les codes espèces de l’OFB (ex : TRF pour la truite commune) vers les identifiants du référentiel taxonomique de l’INPN Taxref.
tidyverse comprend plusieurs packages utiles pour la mise en forme des données (sélection, agrégation, nommage, etc.).
library(of3b)
library(aspe)
library(tidyverse)Préparation du nouveau tableau de données
La fonction mef_donnees_sd_atlas() du package of3b prend en entrée le fichier shapefile de la base, le lit et le met en forme. Son argument passerelle_taxonomique correspond à un dataframe permettant la conversion entre les codes espèces à trois lettres et les identifiants Taxref des taxons. Par défaut elle considère que le système de coordonnées du fichier shapefile est Lambert 93 et le reprojette pour donner des colonnes de longitude et latitude en WGS84 qui est le standard de Biodiv’Bretagne. Ces colonnes sont respectivement nommées x_wgs84 et y_wgs84.
Désignation du fichier de données et activation de la passerelle taxonomique :
sd_file <- "../raw_data/peche_georect_sd_2015_2019_20210818.shp"
data("passerelle_taxo")Mise en forme :
df_actuel <- mef_donnees_sd_atlas(fichier_shp_a_jour = sd_file,
passerelle_taxonomique = passerelle_taxo)## OGR data source with driver: ESRI Shapefile
## Source: "C:\Users\pascal.irz\Documents\projets\observatoires\OEB\package_of3b\of3b_test\raw_data\peche_georect_sd_2015_2019_20210818.shp", layer: "peche_georect_sd_2015_2019_20210818"
## with 242 features
## It has 57 fields
## Integer64 fields read as strings: ABH ABL ALA ANG ASP BAF BBG BOU BRB BRE BRO CAX CCX CHA CHE CTI EPI EPT FLE GAM GAR GOU GRE HOT IDE LOF LPM LPP LPR OBR PCH PER PES PSR ROT SAN SAT SDF SIL SPI TAC TAN TRF TRM VAI VAX qualif
On peut examiner le tableau df_actuel. Il contient les variables suivantes :
## tibble[,15] [11,062 x 15] (S3: tbl_df/tbl/data.frame)
## $ unique_obs_id : chr [1:11062] "8f294ac2-abbc-4b0f-b166-b00bedc2632f" "920af62a-3245-4a22-abff-68053f063bfe" "d5124236-d415-4967-a7e5-f84dd2666ffb" "49214f84-923c-4fd6-8c4f-30078b496cbe" ...
## $ unique_dataset_id: chr [1:11062] "1e727cde-8ce3-48c2-874f-b76a5eca9e5f" "1e727cde-8ce3-48c2-874f-b76a5eca9e5f" "1e727cde-8ce3-48c2-874f-b76a5eca9e5f" "1e727cde-8ce3-48c2-874f-b76a5eca9e5f" ...
## $ unique_ope_id : chr [1:11062] "007ef271-ab06-422f-a0b1-4f7a1c7b5acb" "007ef271-ab06-422f-a0b1-4f7a1c7b5acb" "007ef271-ab06-422f-a0b1-4f7a1c7b5acb" "007ef271-ab06-422f-a0b1-4f7a1c7b5acb" ...
## $ date_peche : chr [1:11062] "2017/06/27" "2017/06/27" "2017/06/27" "2017/06/27" ...
## $ date_saisie : chr [1:11062] "2017/06/27" "2017/06/27" "2017/06/27" "2017/06/27" ...
## $ date_modif : chr [1:11062] NA NA NA NA ...
## $ code_exutoire : chr [1:11062] "exut_643" "exut_643" "exut_643" "exut_643" ...
## $ code_station : chr [1:11062] NA NA NA NA ...
## $ localisation : chr [1:11062] "BV DE LA DONAC" "BV DE LA DONAC" "BV DE LA DONAC" "BV DE LA DONAC" ...
## $ x_wgs84 : num [1:11062] -1.82 -1.82 -1.82 -1.82 -1.82 ...
## $ y_wgs84 : num [1:11062] 48.4 48.4 48.4 48.4 48.4 ...
## $ ctxte_peche : chr [1:11062] "Atlas" "Atlas" "Atlas" "Atlas" ...
## $ code_espece : chr [1:11062] "ABH" "ABL" "ALA" "ANG" ...
## $ effectif : int [1:11062] 0 0 0 1 0 0 0 0 0 0 ...
## $ esp_code_taxref : num [1:11062] 67286 67111 66967 66832 67131 ...
|| || || ||
Quelques-unes de ces colonnes, pour une dizaine de lignes tirées aléatoirement :
| unique_obs_id | date_peche | localisation | x_wgs84 | y_wgs84 | code_espece | esp_code_taxref | effectif |
|---|---|---|---|---|---|---|---|
| 25db6863-e359-4bf0-b25d-10457fe73ab0 | 2017/09/22 | R. de KERSIMON | -4.223716 | 48.28501 | OBR | 67759 | 0 |
| 70aa7ab4-40b2-4577-8e00-f0a2f6457d03 | 2019/10/18 | Pont Henvez | -4.049789 | 47.88337 | SAT | 67765 | 0 |
| 111367f1-ba9b-4493-8a61-53d5fa837ba9 | 2015/01/01 | GOVELLO | -2.581195 | 47.61597 | OBR | 67759 | 0 |
| 0d0b55be-bad5-43b2-a74d-8c0eec8db858 | 2016/09/22 | Rossulien | -4.134119 | 47.93270 | ABL | 67111 | 0 |
| ba223ff3-3259-472d-a05d-d40feaa273c0 | 2016/09/22 | Corroac’h | -4.181178 | 47.92473 | SIL | 67585 | 0 |
| 841deb82-6ce5-460f-82ae-3ffd46a3675e | 2016/06/13 | Le ruisseau de Saint Laurent à Pleubian saint Laurent (aval buse) | -3.161035 | 48.84925 | PSR | 67415 | 0 |
| e032b5a4-228c-459b-9666-3792c10e68c7 | 2019/10/18 | Pont Henvez | -4.049789 | 47.88337 | ANG | 66832 | 1 |
| c11ad711-ffbb-49b1-8227-b03319b98d49 | 2016/06/24 | Affluent RD ruisseau moulin Quintin | -3.239028 | 48.39160 | LPR | 66330 | 0 |
| 8a822d82-734b-4f4f-9d84-f801764c802a | 2016/07/01 | Le Saint Guillaume | -2.721546 | 48.18100 | CAX | 190332 | 0 |
| 9f93085d-e14b-45a3-8018-9b4a48496276 | 2016/07/01 | Le Saint Guillaume | -2.718073 | 48.18402 | BAF | 67143 | 0 |
Lecture du tableau du millésime précédent
Ce fichier de données est au format csv et est déjà mis en forme car c’est lui qui a servi à la précédente mise à jour du jeu de données sur Biodiv’Bretagne. Il est lu au moyen de la fonction read_csv2() du package readr. Les colonnes dont le nom commente par ‘date’ sont contraintes en caractères, alors que par défaut importées en format ‘Date’, pour assurer la cohérence avec les formats issus shapefile. La variable unique_obs_id est renommée unique_obs_id_old pour éviter la confusion avec le champ unique_obs_id du nouveau jeu de données.
df_ancien <- read_csv2(file = '../processed_data/sd_ancien.csv') %>%
mutate_at(vars(starts_with("date")), as.character) Les noms des colonnes du tableau sont les suivants :
names(df_ancien)## [1] "unique_obs_id" "unique_dataset_id" "unique_ope_id"
## [4] "date_peche" "date_saisie" "date_modif"
## [7] "code_exutoire" "code_station" "localisation"
## [10] "x_wgs84" "y_wgs84" "ctxte_peche"
## [13] "code_espece" "effectif" "esp_code_taxref"
Fusion des deux tables
Avant d’opérer la fusion, on s’assure que les noms des deux dataframes sont bien les mêmes.
identical(names(df_ancien), names(df_actuel))## [1] TRUE
Puisque c’est bon, on peut les fusionner.
df_maj <- maj_donnees_sd_atlas(df_a_jour = df_actuel,
df_precedent = df_ancien)Vérifications
Combien d’UUID du dataframe df_maj sont issus des UUID de df_ancien ?
old_obs_id <- df_ancien %>%
pull(unique_obs_id)
n_old_uuids <- df_maj %>%
filter(unique_obs_id %in% old_obs_id) %>%
nrow()
n_old_uuids## [1] 9600
Combien d’UUID du dataframe df_maj sont issus des UUID de df_actuel ?
new_obs_id <- df_actuel %>%
pull(unique_obs_id)
n_new_uuids <- df_maj %>%
filter(unique_obs_id %in% new_obs_id) %>%
nrow()
n_new_uuids## [1] 1462
Le total fait :
n_old_uuids + n_new_uuids## [1] 11062
Le nombre de lignes de df_actuel est :
nrow(df_actuel)## [1] 11062
\(\Rightarrow\) On retrouve bien chacune de nos observations.
Représentation cartographique :
df_maj %>%
select(localisation, x_wgs84, y_wgs84) %>%
distinct() %>%
sf::st_as_sf(coords = c("x_wgs84", "y_wgs84"), crs = 4326) %>%
mapview::mapview(legend = FALSE, color = "blue")Exportation en CSV du fichier à jour
export_donnees_sd_atlas(df = df_maj)RAPPEL : Le fichier
.csvexporté doit impérativement être archivé car il sera indispensable pour la mise à jour suivante.
Pour vérifier, on liste les fichiers .csv dont le nom commence par les caractères “sd_” dans le répertoire de sortie.
list.files(path = "../processed_data",
pattern = "^sd_.*csv$")## [1] "sd_2021_09_08_10_34_02.csv" "sd_ancien.csv"
A ce stade, le fichier
sd_aaaa_mm_jj_hh_mm_ss.csv, stocké dans le sous-répertoire “processed_data”, peut être transmis à l’OEB pour la mise à jour sur Biodiv’Bretagne.