Objectif

Le présent document est un guide pour obtenir, à partir de la base Aspe, les résultats de pêche sous différentes formes :

  • richesse en espèces
  • occurrence des espèces
  • abondances des espèces
  • densités des espèces

Les analyses faisant appel aux mesures réalisées sur chaque individu (masse, longueur, pathologies …) ne sont pas abordées ici.

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

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")

Assemblage d’une “passerelle”

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

passerelle <- mef_creer_passerelle()
  • Données de captures \(\Rightarrow\) table lot_poissons
  • Données de superficie échantillonnée, méthode de pêche, etc. \(\Rightarrow\) table operation
  • Numéro de passage (pour éventuellement n’en conserver qu’un) \(\Rightarrow\) table prelevement_elementaire
  • Caractéristiques de la station \(\Rightarrow\) table station

On effectue donc une série de jointures “gauches” pour compléter la passerelle de ces données. En général, comme seuls certains champs des tables sont nécessaires, on effectue des sélections de colonnes pour ne pas surcharger les dataframe.

Le message ci-dessous indique les noms des champs sur lesquels les jointures entre tables ont été opérées.

Filtrage de la passerelle

Il peut être utile de filtrer les données en amont des calculs pour éviter de mélanger des choses peu comparables et alléger les traitements.

Outre le filtrage régional, dans l’exemple ci-dessous, on ne va retenir que les pêches complètes, réalisées à pied.

Filtrage régional

# vecteur avec les numéros de département
depts_bzh <- c(22, 29, 35, 56)

# filtrage de la passerelle sur les identifiants de stations retenus
data <- passerelle %>% 
  mef_ajouter_dept() %>% 
  filter(dept %in% depts_bzh)

Filtrage sur le moyen de pêche

Récupération des champs nécessaires dans les tables operation_description_peche et ref_moyen_prospection. Cette dernière sert juste à faire correspondre un code avec un intitulé.

mop_id mop_libelle
1 A pied
2 En bateau
3 Mixte
4 Non renseigné

La fonction mef_ajouter_moyen_prospection() permet de compléter la table passerelle avec le moyen de prospection pour ensuite filtrer les données :

data <- data %>% 
  mef_ajouter_moyen_prospection() %>% 
  filter(mop_libelle == 'A pied')

On peut supprimer les colonnes qui ne servent plus.

data <- data %>% 
  select(-mop_libelle)

Filtrage sur la méthode de prospection

Dans la table ref_protocole on peut voir que les pêches complètes correspondent à la variable pro_id égale à 1. Pour filtrer plus rapidement que montré dans les exemple ci-dessus, on peut filtrer sur cette méthode.

data <- data %>% 
  left_join(y = operation %>%
                    select(ope_id,
                           pro_id = ope_pro_id)) %>% 
  filter(pro_id == 1) %>% 
  select(-pro_id)

Incorporation des données

Captures

On complète les données par les effectifs, qui sont dans la table lot_poissons et on remplace les codes espèces numériques par les anciens codes à trois lettres qui sont plus interprétables. La correspondance est indiquée dans la table ref_espece.

data <- data %>% 
  left_join(y = lot_poissons %>%
                    select(lop_id,
                           esp_id = lop_esp_id,
                           lop_effectif)) %>%
  left_join(y = ref_espece %>%
                    select(esp_id,
                           esp_code_alternatif)) %>% 
  select(-esp_id)

Surfaces échantillonnées

data <- data %>% 
  left_join(y = operation %>%
              select(ope_id, ope_surface_calculee))

Abondances et densités par espèce, richesse

Agrégation par opération et espèce (somme des effectifs par espèce pour chaque opération).

data <- data %>% 
    group_by(ope_id,
             esp_code_alternatif,
             ope_surface_calculee) %>% 
        summarise(effectif = sum(lop_effectif)) %>% 
    ungroup()

Calcul des densités (en individus pour 1000 m2).

data <- data %>% 
  mutate(densite_p_1000_m2 = 1000 * effectif / ope_surface_calculee) %>% 
  select(-ope_surface_calculee) # suppressio de la variable désormais inutile

Affichage du résultat.

data %>%
  DT::datatable(rownames = FALSE)

On peut simplement en déduire la richesse spécifique, par opération.

richesse <- data %>% 
  group_by(ope_id) %>% 
      summarise(richesse = n_distinct(esp_code_alternatif))

Présentation des résultats

Il peut être utile de présenter les tableaux de données faunistiques avec une colonne par espèce et une ligne par opération.

densites_1col_p_sp <- data %>% 
  select(-effectif) %>% 
  pivot_wider(names_from = esp_code_alternatif,
              values_from = densite_p_1000_m2)

Pour ordonner les espèces par ordre alphabétique dans le dataframe, on procède en deux temps :

  • création d’un vecteur contenant les noms des espèces, que l’on range par ordre alphabétique
  • ordonnancement des colonnes du dataframe selon ce vecteur
noms_esp_ordonnes <- densites_1col_p_sp %>% 
  select(-ope_id) %>% # sélection des colonnes par espèce
  names() %>% # récupération de leurs noms
  sort() # rangement alphabétique 

densites_1col_p_sp <- densites_1col_p_sp %>%
  select(ope_id,
         all_of(noms_esp_ordonnes)) %>% # mise des colonnes dans l'ordre souhaité
  mutate_at(all_of(noms_esp_ordonnes),
            ~ifelse(is.na(.), 0, .)) # remplacement des données manquantes par 0

Visualisation des premières lignes et colonnes.

densites_1col_p_sp %>%
  select(1:7) %>%
  head(20) %>%
  DT::datatable(rownames = FALSE)

Si l’on veut juste les présence / absence.

pa_1col_p_sp <- densites_1col_p_sp %>% 
  mutate_at(all_of(noms_esp_ordonnes),
            ~ifelse(. == 0, 0, 1))

Visualisation des premières lignes et colonnes.

pa_1col_p_sp %>%
  select(1:7) %>%
  head(20) %>%
  DT::datatable(rownames = FALSE)