Objectif

Ce tutoriel est un guide pour obtenir, à partir de la base Aspe, les résultats suivants :

  • distributions en taille et en masse
  • densité surfacique et volumique en biomasse

Il est donc ici nécessaire de faire appel aux mesures réalisées sur chaque individu (masse, longueur). La table contenant ces données est la plus volumineuse de la base donc les traitements peuvent être chronophages à l’échelle de la France entière. Ici, nous allons à titre d’exemple restreindre l’analyse à un département : le Morbihan (56) et ne conserver que les pêches dites “complètes”.

Le chargement du package {aspe} est supposé déjà réalisé (si besoin voir ce support).

Les fonctions dédiées au traitement des mesures individuelles sont nommées avec le préfixe 'mei_'. Celles dédiées à la mise en forme des données par 'mef_'.

Chargement des packages et des données

library(aspe)
library(tidyverse)

load(file = "raw_data/tables_sauf_mei_2021_10_21_11_44_01.RData")
load(file = "raw_data/mei_2021_10_21_11_44_01.RData")

Vérification de la présence des tables dans l’environnement.

map(.x = ls()[sapply(ls(), function(x) any(is.data.frame(get(x))))], # liste des dataframes
    .f = function(x) {
      nom <- x
      lignes <- x %>% get() %>% nrow()
      colonnes <- x %>% get() %>% ncol()
      data.frame(nom, lignes, colonnes)
    }) %>%
  reduce(rbind) %>%
  DT::datatable()

Mise en forme des données

Assemblage d’une “passerelle”

Les données dont il y a besoin sont dispersées dans diverses tables. C’est le tableau “passerelle” qui sert à les relier.

passerelle <- mef_creer_passerelle()

Filtrage sur le département 56

id_stations_56 <- passerelle %>%
  mef_ajouter_dept() %>% # création du champ dept à partir du code Insee station (ou point si manquant)
  filter(dept == '56' & # sélection des observations sur les numéros de dept
         !is.na(sta_id)) %>% # suppression des sta_id manquants
  pull(sta_id) %>%  # extraction des identifiants des stations
  unique()

data <- passerelle %>% 
  filter(sta_id %in% id_stations_56)

Filtrage sur la méthode de prospection

Les libellés en clair des méthodes de prospection sont donnés dans le dataframe nommé ref_protocole.

On peut y voir que les pêches d’inventaire correspondent aux 4 premières modalités de cette table. Pour filtrer sur ces méthodes :

data <- data %>%
  mef_ajouter_type_protocole() %>% 
  filter(pro_libelle %in% c("Pêche complète à un ou plusieurs passages",
                            "Pêche partielle par points (grand milieu)",
                            "Pêche par ambiances",
                            "Pêche partielle sur berge"))

Incorporation des mesures individuelles

Il s’agit de compléter le jeu de données, qui ne contient à ce stade que des identifiants, par les informations qui seront utiles pour l’interprétation. Par exemple il est plus facile de lier les résultats avec les codes espèces à trois lettres ou les noms des stations qu’avec les identifiants.

data_ind <- data %>%
  mef_ajouter_libelle() %>% # ajout nom station ou point
  mef_ajouter_ope_date() %>% # date et année d'échantillonnage
  mef_ajouter_passage() %>% # numéro du passage pour éventuellement filtrer dessus
  mef_ajouter_lots() %>% # lots
  mef_ajouter_esp() %>% # noms des espèces
  mef_ajouter_mei() %>% # mesures individuelles
  mef_ajouter_type_longueur() %>% # type de longueur mesurée
  select(-mei_mep_id,
         -tyl_id,
         -mei_id,
         -tlo_id) # suppression colonnes inutiles

NB : le package propose une liste exhaustive des variables de la base avec leur signification.

data(dictionnaire)
View(dictionnaire)

Histogramme des longueurs lors d’une opération

La fonction gg_histo_longueur() sert à produire l’histogramme des longueurs mesurées (ou estimées à partir des poids) des individus. Elle prend en entrée :

  • le dataframe issu des étapes précédentes
  • le numéro d’opération
  • l’espèce (ou les espèces si l’on veut les regrouper, par exemple sous la forme especes = c("CAS", "CAX", "CAG"))
  • Le type de longueur, à choisir parmi Fourche, Totale ou Estimée d'après le poids avec la possibilité d’indiquer plusieurs types sous la forme type_longueur = c("Fourche", "Estimée d'après le poids").
  • Le nombre d’intervalles de longueur sur le graphique, qui est de 30 par défaut.
gg_histo_longueur(indiv_df = data_ind,
                  operation = 6313,
                  especes = "GOU",
                  type_longueur = "Fourche",
                  n_intervalles = 25)

Variabilité inter-annuelle des distributions

On considère ici qu’une population est une espèce donnée sur un point de prélèvement. On s’intéresse aux populations qui font l’objet d’un suivi pluri-annuel avec des mesures de longueur. Pour illustrer cette fonctionnalité graphique, prenons des populations avec minimum 10 années de suivi comprenant chacune 10 mesures de longueur.

Préparation et sélection des données

# les populations avec plus de 10 ans de données
populations_10ans <- data_ind %>% 
  group_by(pop_id,
           pop_libelle,
           esp_code_alternatif,
           esp_nom_commun) %>% 
    summarise(n_annees = n_distinct(annee)) %>% 
    filter(n_annees > 9) %>% 
  ungroup()

# filtrage des données pour ne garder que les pops > 10 ans
data_populations <- populations_10ans %>% 
  left_join(data_ind)

# parmi les pops > 10 ans, celles qui comprennent + de 10 individus
populations_10_indiv <- data_populations %>% 
  filter(mei_taille > 0) %>% 
  group_by(pop_id,
           pop_libelle,
           esp_code_alternatif,
           esp_nom_commun,
           annee) %>% 
    summarise(n_ind = n()) %>% 
  ungroup %>% 
  filter(n_ind > 9)

# tirage aléatoire de 3 des pops avec + 10 ans + 10 indiv
mes_populations <- populations_10ans %>% 
  inner_join(populations_10_indiv) %>% 
  select(pop_id:n_annees) %>% 
  distinct() %>% 
  sample_n(3)
prov <- data_ind %>% 
  filter(mei_taille > 0) %>% 
  group_by(pop_id,
           pop_libelle,
           esp_code_alternatif,
           esp_nom_commun,
           annee) %>% 
    summarise(n_ind = n()) %>% 
  filter(n_ind > 9) %>% 
  group_by(pop_id,
           pop_libelle,
           esp_code_alternatif,
           esp_nom_commun) %>% 
    summarise(n_annees = n_distinct(annee)) %>% 
    filter(n_annees > 9) %>% 
  ungroup() %>% 
  sample_n(size = 3)
# map2(.x = mes_populations$pop_libelle,
#      .y = mes_populations$esp_nom_commun,
#      .f = gg_dyn_esp,
#      df = data_populations)
map2(.x = prov$esp_nom_commun,
     .y = prov$pop_libelle,
     .f = gg_dyn_esp,
     df = data_populations,
     var_id_espece = esp_nom_commun,
     var_id_station = pop_libelle,
     seuil = 0.01)