vignettes/aspe_02_construire_un_jeu_de_donnees.Rmd
aspe_02_construire_un_jeu_de_donnees.Rmd
Il s’agit de construire, à partir des tables de la base Aspe, un jeu de données classique. Pour le détail de la structure de la base, voir Irz et al. (2022).
dataframe
de base
Les données ont été préalablement extraites d’un ‘dump’ de la base Aspe (cf. tuto. Elles comprennent deux fichiers de données, l’un pour les mesures individuelles et l’autre pour l’ensemble des autres tables. Seul ce dernier est utilisé ici.
On va ici créer un dataframe
“passerelle” qui met en
correspondance les identifiants des tables principales de la base. La
description des tables est fournie dans l’article cité ci-dessus.
passerelle <- aspe::mef_creer_passerelle()
Cette table contient, comme variables, les identifiants se réfèrant aux lignes des tables suivantes :
sta_id
: station (optionnel)pop_id
: point de prélèvement (obligatoire)ope_id
: opération de pêche (obligatoire)pre_id
: prélèvement élémentaire (obligatoire)lop_id
: lot poisson (obligatoire)Ces identifiants permettent d’opérer des jointures avec les tables de la base qui contiennent les données. Une ligne correspond à un lot de poisson, qui est rattaché, de proche en proche, à son prélèvement élémentaire, lui-même à son opération, elle-même à son point de prélèvelement et lui-même à sa station. Un échantillon :
sta_id |
pop_id |
ope_id |
pre_id |
lop_id |
---|---|---|---|---|
11302 |
44190 |
6473 |
14848 |
797642 |
10844 |
42704 |
6565 |
15113 |
819557 |
10925 |
42959 |
86987 |
94057 |
5404810 |
11302 |
44190 |
6639 |
15664 |
835895 |
11302 |
44190 |
6568 |
14861 |
820069 |
10925 |
42959 |
87839 |
95308 |
5472677 |
La base Aspe est nationale, mais pour la plupart des besoins il est préférable de commencer par en restreindre le périmètre pour alléger les traitements.
Cette sélection est simple car la base contient l’information du département associé à chaque point de prélèvement.
aspe_22 <- passerelle %>%
mef_ajouter_dept() %>%
filter(dept == "22")
Pour sélectionner les points de prélèvement qui se trouvent dans un périmètre donné, il est possible d’opérer une sélection spatiale. La sélection comprend les étapes suivantes :
A noter, pour une sélection sur un périmètre administratif autre que
le département (communes, EPCI, régions), le package R COGiter
est particulièrement pratique.
Comme il existe dans la base plusieurs systèmes de coordonnées (CRS), on doit les homogénéiser et s’assurer que les points et le polygone ont le même CRS.
Ajout du code CRS (EPSG) aux points (table
point_prelevement
) par jointure avec la table
ref_type_projection
qui fait la correspondence entre les
codes internes de la base et les numéros EPSG des CRS.
Coordonnées des points en Lambert 93. Le
dataframe coords
contient uniquement les deux colonnes
X
et Y
pour la longitude et la latitude.
# coordonnées
coords <- aspe::geo_convertir_coords_df(
df = pops,
var_x = pop_coordonnees_x,
var_y = pop_coordonnees_y,
var_crs_initial = typ_code_epsg,
crs_sortie = 2154 # Lambert 93
)
Création d’un objet géographique des points, de classe
sf
:
dataframe pops
les colonnes de
coordonnées qui sont dans le dataframe coords
st_as_sf()
.
# création d'un objet géographique
pops_geo <- pops %>%
cbind(coords) %>%
sf::st_as_sf(coords = c("X", "Y"),
crs = 2154)
Le résultat peut être visualisé par exemple avec
mapview::mapview(pops_geo)
.
mapview::mapview(pops_geo)
Avec les fonctions du package sf
, on charge le
shapefile, puis si besoin on le reprojette s’il n’a pas le même CRS que
les points.
bv_fichier <- "../raw_data/bassin.shp"
mon_bv <- sf::read_sf(dsn = bv_fichier) %>%
sf::st_transform(crs = 2154)
On opère une sélection géographique en ne conservant que les points
pour lesquels la jointure géographique a permis d’obtenir un attribut du
bassin (ici la variable ID
).
pops_geo_bv <- pops_geo %>%
sf::st_join(mon_bv) %>%
filter(!is.na(ID)) %>% # suppression des lignes où ID est manquant
select(names(pops_geo)) # sélection des mêmes colonnes que celles de pops_geo
On collecte un vecteur contenant les identifiants pop_id
des points localisés dans le bassin.
Cette sélection est beaucoup plus simple qu’en spatial. Il suffit d’ajouter la date de l’opération puis de filtrer dessus. Par exemple :
aspe_sel <- passerelle %>%
mef_ajouter_ope_date() %>%
filter(annee > 2008)
Le principe est d’utiliser la famille des fonctions du package
aspe
qui sont préfixées par mef_ajouter
.
Celles-ci servent à ajouter des données à une passerelle.
#> [1] "mef_ajouter_abs" "mef_ajouter_ambiance"
#> [3] "mef_ajouter_dept" "mef_ajouter_esp"
#> [5] "mef_ajouter_groupe_points" "mef_ajouter_intervenants"
#> [7] "mef_ajouter_ipr" "mef_ajouter_libelle"
#> [9] "mef_ajouter_libelle_site" "mef_ajouter_lots"
#> [11] "mef_ajouter_mei" "mef_ajouter_metriques"
#> [13] "mef_ajouter_moyen_prospection" "mef_ajouter_objectif"
#> [15] "mef_ajouter_ope_date" "mef_ajouter_ope_desc_peche"
#> [17] "mef_ajouter_ope_env" "mef_ajouter_passage"
#> [19] "mef_ajouter_proba_presence_ipr" "mef_ajouter_qualification"
#> [21] "mef_ajouter_stats_taille" "mef_ajouter_surf_calc"
#> [23] "mef_ajouter_type_longueur" "mef_ajouter_type_lot"
#> [25] "mef_ajouter_type_materiel" "mef_ajouter_type_prelevement"
#> [27] "mef_ajouter_type_protocole" "mef_ajouter_utilisateurs"
#> [29] "mef_ajouter_validation"
Exemple si l’on veut étudier les notes IPR et les métriques, pour les pêches réalisées dans le cadre du Réseau Hydrobiologique et Piscicole. Comme les notes IPR sont attribuée à chaque pêche, elles sont identiques pour chaque lot de poissons de la même pêche donc on peut dédoublonner les lignes afin de n’avoir qu’une ligne par opération.
aspe_ipr <- aspe_sel %>%
select(-pre_id, -lop_id) %>%
distinct() %>% # dédoublonnage
mef_ajouter_objectif() %>%
filter(obj_libelle == "RHP – Réseau Hydrobiologique Piscicole") %>%
mef_ajouter_ipr() %>%
mef_ajouter_metriques()
On rajoute les libellés des points de prélèvement et sélectionne uniquement les variables d’intérêt.
aspe_ipr <- aspe_ipr %>%
mef_ajouter_libelle() %>%
select(sta_id:ope_id,
pop_libelle,
annee,
ope_date,
ipr,
cli_libelle,
ner:dti)
Visualisation.
sta_id |
pop_id |
ope_id |
pop_libelle |
annee |
ope_date |
ipr |
cli_libelle |
ner |
nel |
nte |
dit |
dio |
dii |
dti |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
10925 |
42959 |
51339 |
Le Ruisseau de Loup à Plougonver |
2010 |
05/10/2010 |
6.36 |
Bon |
0.04 |
0.04 |
1.72 |
2.51 |
0.92 |
0.99 |
0.14 |
10734 |
42437 |
51317 |
Le Gouessant à Andel |
2009 |
08/09/2009 |
19.16 |
Moyen |
1.10 |
1.76 |
3.83 |
3.16 |
6.84 |
0.84 |
1.63 |
10647 |
42207 |
6648 |
L'Arguenon à Dolo |
2009 |
08/09/2009 |
10.72 |
Bon |
0.16 |
0.25 |
3.06 |
2.10 |
3.05 |
1.68 |
0.41 |
10844 |
42704 |
6642 |
TRIEUX à PLESIDY |
2009 |
16/10/2009 |
5.99 |
Bon |
0.17 |
0.47 |
2.09 |
0.98 |
0.57 |
0.98 |
0.72 |
10734 |
42437 |
6676 |
Le Gouessant à Andel |
2010 |
29/09/2010 |
16.75 |
Moyen |
1.16 |
4.30 |
1.10 |
2.16 |
5.38 |
2.21 |
0.44 |
10844 |
42704 |
6837 |
TRIEUX à PLESIDY |
2013 |
01/10/2013 |
5.86 |
Bon |
0.14 |
0.07 |
1.69 |
1.69 |
0.55 |
1.13 |
0.58 |
Dans la même logique, il est possible d’enrichir le jeu de données
avec les informations contenues dans les différentes tables au moyen des
fonctions mef_ajouter_xxx()
.