Script : 03_selection_especes

Après avoir sélectionné les points de prélèvements et les opérations de pêche de l’aire géographique ciblée, un tri sur les données des espèces péchées durant ces opérations est réalisé. Il s’agit de retirer du jeu initial les données non nécessaires ou obsolètes pour notre étude.

1 Installation

1.1 Chargement des packages et des données

library(tidyverse)
library(aspe)
library(ggrepel)
library(janitor)
library(scales)
load(file = "../processed_data/selection_pop_ope.rda")

Nous avons besoin de charger la table aspe des données de mesures individuelles (cette dernière est lourde, elle peut donc mettre un certain temps à charger).

rdata_tables <- misc_nom_dernier_fichier(
  repertoire = "../../../../Liste_rouge_BFC/raw_data",
  pattern = "^tables")
load(rdata_tables) # Chargement des données 

2 Chargement de la table aspe des données de mesures individuelles

mei_table <- misc_nom_dernier_fichier(
  repertoire = "../../../../Liste_rouge_BFC/raw_data",
  pattern = "^mei")
load(mei_table) # Chargement des données 

3 Chargement de la base taxref

Pour constituer la liste complètes des espèces à évaluer de la liste rouge régionale de BFC, on importe la base taxref_v18. Pour pouvoir ajouter les libéllés de nom d’espèces au jeu de donnée de base par la suite, on importe un dataframe avec les codes espèces de la BDD Aspe esp_code_alternatif.

base_tax_ref_aspe <- readxl::read_xlsx("../raw_data/ASPE_Suivi référentiel taxon_20250603 (1).xlsx", skip = 3)
base_tax_ref_uicn <- readr::read_delim('../raw_data/TAXREFv18.txt') 
tax_ref_uicn <- base_tax_ref_uicn %>%
  clean_names() %>%
  select(
    phylum,
    classe,
    ordre,
    famille,
    sous_famille,
    cd_ref,
    cd_nom,
    nom_complet,
    nom_valide,
    nom_vern,
    lb_nom,
    fr
  ) %>%
  filter(classe == "Actinopterygii" | classe == "Petromyzonti") %>%
  select(cd_nom, classe, ordre, famille, nom_valide, nom_vern,lb_nom ) %>%
  rename(code_taxref = cd_nom, 
         nom_commun = nom_vern,
         nom_scientifique = lb_nom)
tax_ref_aspe <- base_tax_ref_aspe %>%
  clean_names() %>% 
  rename(esp_code_alternatif = code_alternatif_aspe,
         localite = hexagone_h_outre_mer_om, 
         nom_vernaculaire = nom_commun, 
         taxon = poisson_p_macro_crustaces_mc_amphibien_a) %>% 
  filter(localite == "H", 
         taxon == "P") %>% 
  select(esp_code_alternatif, nom_vernaculaire, nom_latin, code_taxref, esp_code_alternatif)

On importe également une liste d’espèces réalisé par l’OFB en 2016 avec les statut d’autochtonie qu’on appelera liste_esp_bfc.

liste_esp_bfc <- readxl::read_xlsx("../raw_data/espèces de poisson BFC.xlsx") %>% 
  rename(esp_code_alternatif = "Code espèce") %>% 
  mutate(esp_code_alternatif = fct_recode(esp_code_alternatif, "GTN" = "GOT"))  # Correction de l'ancien code du gobie à tâche noire de GOT en GTN

4 Constitution du jeu de données

4.1 Création du dataframe

Un nouveau jeu de données esp_ope_selection est créé à partir des stations et des opérations retenues dans la passerelle. Il contient les données spécifiques aux opérations : les résultats des pêches et certaines données de contexte (surface de pêche / date de pêche / effectifs / lots de poissons / données individuelles).

esp_ope_selection <- passerelle %>% # dataframe contenant toutes les espèces présentes dans les opérations de pêches sélectionnées
  left_join(y=lot_poissons %>% # Ajout des lots de poissons
              select(lop_id,
                     esp_id = lop_esp_id,
                     lop_effectif)) %>% 
  left_join(y= ref_espece %>% # Ajout des références des espèces péchées
               select(esp_id,
                      esp_code_alternatif)) %>% 
  left_join(y=operation %>% 
               select(ope_id, 
                       ope_surface_calculee, # Ajout des surfaces de pêches
                       passage$pas_numero)) %>% 
  mef_ajouter_ope_date() %>%  # Ajout des dates de pêches
  select(ope_id,
         lop_effectif,
         lop_id,
         esp_code_alternatif,
         annee,
         ope_surface_calculee) %>%
  distinct()

4.2 Tri du dataframe

Dans le cadre de notre étude, seules les espèces de poissons d’eau douce nous intéressent. Nous retirons alors les autres espèces du jeu de données esp_ope_selection établis dans les paramètres (cf params : “especes_a_retier”)

  • Différents éco-types de Carpe (“CCX” _ “CMI” _ “CCU”) sont rassemblés sous un même code esp_code_alternatif : “CCO”.

  • “APP”,“ASA”, “OCL”, “PCC”,“PFL” sont retirées car ce sont des espèces d’écrevisses

  • “BRX”,“CAX”,“CCU”,“GOX”, “LPX”, “CYP” sont retirées car ce sont des espèces indéterminées.

  • “HBG” : Hybride Brème/Gardon

A finir la prise de décision !!! :

  • “CAA” est le nouveau code de “CAD”

  • “VAR” : arrivé de la vandoise rostrée où modification de l’identification de “VAN”?

  • “ROI” Rotengle italien ?

  • “GOU”=> “GOO” : à partir d’environ 2018 : changement d’identification le Goujon (GOU) devient le Goujon occitan (GOO)

esp_ope_selection <- esp_ope_selection %>%
  mutate(esp_code_alternatif =
           case_when(
             esp_code_alternatif %in% c("CCX", "CMI", "CCU") ~ "CCO",
             # Transformation CCX, CMI et CCU en CCO
             TRUE ~ esp_code_alternatif
           )) %>%
  filter(!(esp_code_alternatif %in% params$especes_a_retirer)) %>% # Espèces à retirer
  mutate(esp_code_alternatif = fct_recode(esp_code_alternatif, "CAA" = "CAD")) # Correction de l'ancien code du Carassin doré de CAD en CAA

5 Analyse des données espèces

Nous souhaitons obtenir une vision globale des données contenues dans le dataframe esp_ope_selection afin de savoir si les espèces sélectionnées dans la liste rouge régionale 2014 sont bien cohérentes avec les espèces contenues dans ce nouveau jeu de données (ayant eu une décenies de données ajoutées depuis la dernière LRR.

Pour obtenir un point de vue générale sur les différentes espèces contenues dans ce jeu de données, un graphique bivarié est réalisé : il représente le pourcentage d’occurrence des espèces en fonction de la densité surfacique moyenne des espèces sur les 20 dernières années. Ce graphique pourra alors nous indiquer quelles espèces sont majoritairement présentes sur le territoire, ainsi que pour lesquelles les donnée disponibles sont suffisantes pour pouvoir étudier leur évolution démographique.

5.1 Densités surfaciques des espèces

Les densités surfaciques moyennes sont calculées pour chaque espèce à l’opération. Elles sont regroupées dans le dataframe ope_esp_densite.

ope_esp_densite <- esp_ope_selection %>% 
  group_by(ope_id,
           esp_code_alternatif,
           ope_surface_calculee) %>% # Ajout des surfaces d'opération
  summarise(effectif= sum(lop_effectif)) %>% # Calcul des effectifs par espèces, par opérations
  ungroup() %>% 
  mutate(valeur = effectif/ope_surface_calculee) # Densités surfaciques par espèces, par opérations

ope_esp_densite_cal <- ope_esp_densite %>% # Création d'un dataframe simplifié pour le futur calcul
  select(ope_id,
         esp_code_alternatif,
         valeur)

# Calcul de la densité surfacique moyenne pour chaque espèce (toutes opérations confondues)
esp_densite_moyenne <- ope_esp_densite %>%
  group_by(esp_code_alternatif) %>%
  summarise(densite_moy = mean(valeur)) 

5.2 Effectif des espèces

Les effectifs de chaque espèce sont calculés, à l’échelle de l’opération, sur les 30 dernières années de données dans esp_effectif :

esp_effectif <- ope_esp_densite %>% # Calcul de l'effectif total pour chaque espèce sur toutes les opérations
  group_by(esp_code_alternatif) %>%
  summarise(effectif_total = sum(effectif)) 
ggplot(esp_effectif,
       aes(x = esp_code_alternatif, y = effectif_total, fill = effectif_total)) +
  geom_col() +
  scale_fill_gradient(low = "darkseagreen3", high = "darkseagreen4") +
  scale_y_log10(
    name = "Effectif total (échelle log10)",
    breaks = c(1, 10, 100, 1000),
    labels = comma
  ) +
  coord_flip() +
  theme_minimal() +
  labs(x = "Espèces", y = "Effectif total") +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    panel.grid.major = element_line(color = "#ffffff"),
    panel.grid.minor = element_line(color = "#ffffff"),
    panel.background = element_rect(fill = "#faf0e6")
  )

5.3 Construction du jeu de donnée finale esp_ope_selection

Pour construire le df esp_ope_selection, pusieurs jeu de donnée vont être fusionné :

  1. tax_ref_uicn possède les nom commun et nom complet scientique des espèces de poissons.

  2. tax_ref_aspe possède les codes espèces de la base aspe permettant des jointures entre tables.

  3. liste_esp_bfc possède les codes espèces, une liste des espèces de 2016 sur la région avec les statuts d’autochtonies.

  4. base_liste_complete_bfc_aspe correspond au df de la période complète régionale de la base aspe toute stations confondues, export présent directement dans processed_data.

  5. liste_correc_autochtonie correspond à une liste provisoire issus des fusions des df précédent. Il est présent en export dans processed_data

  6. liste_bfc_sp_cor correspond à un df de toutes les espèces présentes en BFC avec les noms taxref, les codes aspe, les statut d’autochtonie par bassins- versants et quelques corrections. Il est présent en export dans processed_data. Il a été construit à partir de la fusion des jeux de données précédents ainsi qu’un ajout de correction manuellement sur de nouvelles colonnes, sur Excel. Il est une correction directe du df précédent liste_correc_autochtonie.

  7. esp_ope_selection correspond au df de la période 2007-2025 avec les stations sélectionnées pour l’analyse des données.

5.3.1 Ajout des noms espèces - taxref v18 au dataframe esp_ope_selection

On cherche à intégrer les libelle de nom d’espèces taxref à notre dataframe esp_ope_selection in fine, pour cela :

  • On joint le df avec les noms taxref au df avec les codes espèces Aspe
  • On joindra ce nouveau df tax_ref_ape au df esp_ope_selection
# Jointure taxref avec ref taxe aspe
tax_ref_aspe <- tax_ref_aspe %>%
  left_join(tax_ref_uicn, by = "code_taxref") %>%
  select(esp_code_alternatif, ordre, nom_vernaculaire, nom_latin, nom_valide, nom_commun, nom_scientifique, code_taxref)

5.3.2 Liste d’espèces complète 2016 BFC à partir de la base ASPE (période 2007-2025)

esp_list <- liste_esp_bfc %>% 
  full_join(tax_ref_aspe, by = "esp_code_alternatif")
esp_full_list <- esp_list %>% 
  full_join(esp_effectif, by = "esp_code_alternatif") %>% # jointure effectif à la liste bfc
  filter(!(is.na(Introduction) & is.na(effectif_total))) %>% 
  select(ordre, nom_vernaculaire,nom_latin, nom_commun, nom_scientifique, nom_valide,esp_code_alternatif, Introduction, effectif_total)

5.3.3 Liste d’espèces période complete de BFC sélectionnées à partir de la base ASPE

#base_liste_complete_bfc_aspe <- readr::read_delim('../processed_data/liste_complete_aspe_bfc.csv') %>% 
#  select(ordre,nom_vernaculaire, nom_latin, nom_commun, nom_scientifique, nom_valide, Introduction, esp_code_alternatif)
#esp_full_list_eff <- esp_full_list %>% 
#  select(effectif_total, esp_code_alternatif)

#liste_complete_bfc_lrr <- base_liste_complete_bfc_aspe %>% 
# left_join(esp_full_list_eff, by ="esp_code_alternatif") 

6

#liste_correc_autochtonie <-  liste_bio_autochtonie %>% 
#  select(esp_code_alternatif, statut_autochtonie, categorie_lr_france_2019)

#liste_complete_bfc_lrr <- liste_complete_bfc_lrr %>% 
#  left_join(liste_correc_autochtonie, by = "esp_code_alternatif") %>% 
#  select(ordre, nom_commun, nom_valide, esp_code_alternatif, statut_autochtonie , effectif_total, categorie_lr_france_2019) %>% 
#  rename(nom_vernaculaire_v18 = nom_commun, 
 #        nom_scientifique_v18 = nom_valide)
#write_excel_csv(liste_complete_bfc_lrr, "../processed_data/liste_esp_lrr_bfc.csv")

6.0.1 Après expertise de Gael Denys, voici une liste corrigée d’espèces.

liste_bfc_sp_cor <- readxl::read_xlsx("../processed_data/liste_esp_lrr_bfc_GD.xlsx") %>% 
  clean_names() %>% 
  select(esp_code_alternatif, statut_autochtonie, effectif_total, categorie_lr_france_2019, statut_rhin, statut_seine, statut_loire, statut_rhone)
liste_bfc_sp_cor <- liste_bfc_sp_cor %>%
  left_join(tax_ref_aspe, by = "esp_code_alternatif") %>%
  select(
    ordre,
    nom_valide,
    nom_vernaculaire,
    esp_code_alternatif,
    statut_autochtonie,
    effectif_total,
    categorie_lr_france_2019,
    statut_rhin,
    statut_seine,
    statut_loire,
    statut_rhone,
    nom_commun
  ) 
liste_bfc_sp_cor <- liste_bfc_sp_cor %>%
  filter(!esp_code_alternatif == "TRL") %>% # On ne ^prend pas en compte les ecotypes de truite dans la liste rouge
  mutate(statut_loire = fct_recode(statut_loire, "endémique" = "endémqiue"))
liste_bfc_sp_cor <- liste_bfc_sp_cor %>%
  
  mutate(autochtonie_new = if_else(if_any(
    c(statut_rhone, statut_seine, statut_loire),
    ~ . %in% c(
      "a priori introduit avant 1500",
      "endémique",
      "introduit avant 1500",
      "natif",
      "natif*", 
      "éteint"
    )
  ), "autochtone", "allochtone"))
liste_bfc_sp_cor <- liste_bfc_sp_cor %>%
 # filter(autochtonie_new == "autochtone") %>% 
  select(ordre,
    nom_valide,
   # nom_commun,
    esp_code_alternatif,
    autochtonie_new,
    effectif_total,
    #statut_rhin,
   # statut_seine,
   # statut_loire,
  #  statut_rhone,
    categorie_lr_france_2019 
    )
liste_bfc_sp_cor <- liste_bfc_sp_cor %>%
    mutate(effectif_total = na_if(effectif_total, "NA"))
table_liste_bfc_sp_cor <- liste_bfc_sp_cor %>%
  arrange(desc(autochtonie_new)) %>%
  flextable::flextable() %>%
  flextable::autofit() %>%
  flextable::colformat_int(j = c(1, 3), big.mark = " ")
table_liste_bfc_sp_cor

ordre

nom_valide

esp_code_alternatif

autochtonie_new

effectif_total

categorie_lr_france_2019

Acipenseriformes

Acipenser sturio Linnaeus, 1758

EST

autochtone

CR

Anguilliformes

Anguilla anguilla (Linnaeus, 1758)

ANG

autochtone

686

CR

Clupeiformes

Alosa alosa (Linnaeus, 1758)

ALA

autochtone

CR

Clupeiformes

Alosa fallax (Lacepède, 1803)

ALF

autochtone

Cypriniformes

Abramis brama (Linnaeus, 1758)

BRE

autochtone

1561

LC

Cypriniformes

Alburnoides bipunctatus (Bloch, 1782)

SPI

autochtone

64660

LC

Cypriniformes

Alburnus alburnus (Linnaeus, 1758)

ABL

autochtone

66692

LC

Cypriniformes

Barbatula barbatula (Linnaeus, 1758)

LOF

autochtone

41676

LC

Cypriniformes

Barbus barbus (Linnaeus, 1758)

BAF

autochtone

17083

LC

Cypriniformes

Blicca bjoerkna (Linnaeus, 1758)

BRB

autochtone

8856

LC

Cypriniformes

Chondrostoma nasus (Linnaeus, 1758)

HOT

autochtone

5892

LC

Cypriniformes

Cobitis taenia Linnaeus, 1758

LOR

autochtone

19

NT

Cypriniformes

Cyprinus carpio Linnaeus, 1758

CCO

autochtone

827

NA

Cypriniformes

Gobio gobio (Linnaeus, 1758)

GOU

autochtone

81007

LC

Cypriniformes

Leuciscus burdigalensis Valenciennes in Cuvier & Valenciennes, 1844

VAR

autochtone

94

NT

Cypriniformes

Leuciscus leuciscus (Linnaeus, 1758)

VAN

autochtone

4394

LC

Cypriniformes

Misgurnus fossilis (Linnaeus, 1758)

LOE

autochtone

EN

Cypriniformes

Parachondrostoma toxostoma (Vallot, 1837)

TOX

autochtone

28

NT

Cypriniformes

Phoxinus phoxinus (Linnaeus, 1758)

VAI

autochtone

162198

LC

Cypriniformes

Phoxinus fayollarum Denys, Dettai, Persat, Daszkiewicz, Hautecoeur & Keith, 2020

VAF

autochtone

Cypriniformes

Phoxinus septimaniae Kottelat, 2007

VAC

autochtone

Cypriniformes

Rutilus rutilus (Linnaeus, 1758)

GAR

autochtone

39279

LC

Cypriniformes

Scardinius erythrophthalmus (Linnaeus, 1758)

ROT

autochtone

6991

LC

Cypriniformes

Squalius cephalus (Linnaeus, 1758)

CHE

autochtone

59988

LC

Cypriniformes

Telestes souffia (Risso, 1827)

BLN

autochtone

13215

LC

Cypriniformes

Tinca tinca (Linnaeus, 1758)

TAN

autochtone

1654

LC

Esociformes

Esox lucius Linnaeus, 1758

BRO

autochtone

955

VU

Gadiformes

Lota lota (Linnaeus, 1758)

LOT

autochtone

350

VU

Gasterosteiformes

Gasterosteus aculeatus Linnaeus, 1758

EPI

autochtone

1326

LC

Gasterosteiformes

Pungitius pungitius (Linnaeus, 1758)

EPT

autochtone

469

DD

Gasterosteiformes

Pungitius laevis (Cuvier, 1829)

EPL

autochtone

Mugiliformes

Chelon ramada (Risso, 1827)

MUP

autochtone

4

LC

Perciformes

Perca fluviatilis Linnaeus, 1758

PER

autochtone

7644

LC

Perciformes

Zingel asper (Linnaeus, 1758)

APR

autochtone

EN

Petromyzontiformes

Lampetra fluviatilis (Linnaeus, 1758)

LPR

autochtone

VU

Petromyzontiformes

Lampetra planeri (Bloch, 1784)

LPP

autochtone

5224

LC

Petromyzontiformes

Petromyzon marinus Linnaeus, 1758

LPM

autochtone

59

EN

Salmoniformes

Salmo salar Linnaeus, 1758

SAT

autochtone

119

NT

Salmoniformes

Salmo trutta Linnaeus, 1758

TRF

autochtone

24435

LC

Salmoniformes

Thymallus thymallus (Linnaeus, 1758)

OBR

autochtone

296

VU

Salmoniformes

Thymallus ligericus Persat, Weiss, Froufe, Secci-Petretto & Denys, 2019

OBA

autochtone

Scorpaeniformes

Cottus gobio Linnaeus, 1758

CHA

autochtone

61441

LC

Scorpaeniformes

Cottus perifretum Freyhof, Kottelat & Nolte, 2005

CHF

autochtone

Cypriniformes

Carassius auratus (Linnaeus, 1758)

CAA

allochtone

13

NA

Cypriniformes

Carassius carassius (Linnaeus, 1758)

CAS

allochtone

129

LC

Cypriniformes

Carassius gibelio (Bloch, 1782)

CAG

allochtone

250

NA

Cypriniformes

Ctenopharyngodon idella (Valenciennes, 1844)

CTI

allochtone

2

NA

Cypriniformes

Gobio occitaniae Kottelat & Persat, 2005

GOO

allochtone

526

LC

Cypriniformes

Hypophthalmichthys molitrix (Valenciennes, 1844)

CAR

allochtone

1

NA

Cypriniformes

Leucaspius delineatus (Heckel, 1843)

ABH

allochtone

15

DD

Cypriniformes

Leuciscus aspius (Linnaeus, 1758)

ASP

allochtone

157

NA

Cypriniformes

Leuciscus idus (Linnaeus, 1758)

IDE

allochtone

1

DD

Cypriniformes

Phoxinus csikii Hankó, 1922

VAD

allochtone

Cypriniformes

Pseudorasbora parva (Temminck & Schlegel, 1846)

PSR

allochtone

9155

NA

Cypriniformes

Rhodeus amarus (Bloch, 1782)

BOU

allochtone

32970

LC

Cypriniformes

Scardinius hesperidicus Bonaparte, 1845

ROI

allochtone

3

NA

Gobiiformes

Neogobius melanostomus (Pallas, 1814)

GTN

allochtone

502

NA

Gobiiformes

Proterorhinus semilunaris (Heckel, 1837)

GDL

allochtone

171

NA

Perciformes

Ambloplites rupestris (Rafinesque, 1817)

CDR

allochtone

1431

NA

Perciformes

Gymnocephalus cernua (Linnaeus, 1758)

GRE

allochtone

1234

LC

Perciformes

Lepomis gibbosus (Linnaeus, 1758)

PES

allochtone

12550

NA

Perciformes

Micropterus salmoides (Lacepède, 1802)

BBG

allochtone

64

NA

Perciformes

Salariopsis fluviatilis (Asso, 1801)

BLE

allochtone

107

LC

Perciformes

Sander lucioperca (Linnaeus, 1758)

SAN

allochtone

447

NA

Salmoniformes

Coregonus Linnaeus, 1758

COR

allochtone

NA

Salmoniformes

Oncorhynchus mykiss (Walbaum, 1792)

TAC

allochtone

73

NA

Salmoniformes

Salvelinus fontinalis (Mitchill, 1814)

SDF

allochtone

3

NA

Siluriformes

Ameiurus melas (Rafinesque, 1820)

PCH

allochtone

576

NA

Siluriformes

Silurus glanis Linnaeus, 1758

SIL

allochtone

2951

NA

Après avoir construit la liste d’espèces avec les noms d’espèces complets taxrefv18, on peut ajouter notre sélection dans notre jeu de données initiale esp_ope_selection.

liste_bfc_sp_cor_join <- liste_bfc_sp_cor %>% 
  select(esp_code_alternatif, autochtonie_new)

esp_ope_selection <- esp_ope_selection %>% 
  left_join(liste_bfc_sp_cor_join, by = "esp_code_alternatif") 

6.0.2 Definition / Verification de l’Autochtonie des espèces / Temps de génération des espèces

liste_bio <- readxl::read_xlsx("../processed_data/liste_complete_lrr_correction.xlsx") %>%
  clean_names() %>%
  select(
    esp_code_alternatif,
    maturite_m,
    maturite_f,
    maturite_an,
    maturite_bq,
    longevite_bq,
    longevite_an
  ) 
liste_bio_join <- liste_bio %>%
  left_join(liste_bfc_sp_cor, by = "esp_code_alternatif") %>%
  select(
   # ordre,
    nom_valide,
    esp_code_alternatif,
    autochtonie_new,
    maturite_m,
    maturite_f,
    maturite_an,
    maturite_bq,
    longevite_bq,
    longevite_an,
    effectif_total,
    categorie_lr_france_2019
  )

liste_bio <- liste_bio_join %>%
  filter(
    autochtonie_new == "autochtone", 
    !is.na(effectif_total)
    )

6.1 Vérification identification GOU / GOO :

Dans les stations du “Ternin à Chissey-En-Morvan” : 8837 et du “Mechet à Saint-Prix” 8842 : le GOU à été changé vers 2018 en GOO. Avant cette date, les goujons occitan étaient identifiée comme GOU.

#write_excel_csv(liste_bfc_sp_cor, "../processed_data/liste_bfc_sp_cor.csv")

6.2 Pourcentage d’occurrence

Le tableau tab_occurrence regroupant toutes les combinaisons d’opérations et d’espèces possible est réalisé. Il sera ensuite utilisé pour calculer les pourcentages d’occurrence des espèces présentes dans le jeu de données initiale esp_ope_selection.

ope_id <- unique(esp_ope_selection$ope_id) 
esp_code_alternatif <- unique(esp_ope_selection$esp_code_alternatif)

ope_annees <- esp_ope_selection %>% # Création d'un df contenant toutes les opérations et années associées
  ungroup() %>% 
  select(ope_id,
         annee) %>% 
  distinct()

tab_occurrence <- crossing(ope_id, esp_code_alternatif)

À partir de tab_occurrence, le calcul du pourcentage d’occurrence peut être réalisé. Il s’agit du nombre de pêches avec une présence de l’espèce divisé par le nombre total de pêches. Les calculs des pourcentages d’occurrence sont stockés dans le jeu de données tab_taux_occurrence regroupant les densités surfaciques moyennes par espèce ainsi que les taux d’occurrence.

tab_taux_occurrence <- tab_occurrence %>% 
  left_join(ope_esp_densite_cal) %>% 
  mutate(valeur_oc = ifelse(is.na(valeur), 0, valeur)) %>% 
  left_join(ope_annees) %>% 
  group_by(esp_code_alternatif,
           annee) %>% 
  mutate(n_ope = n_distinct(ope_id),
            n_oc = n_distinct(ope_id[valeur_oc > 0]),
            taux_occurrence = (n_oc / n_ope)*100) %>% 
  group_by(esp_code_alternatif) %>% 
  mutate(taux_occurrence_moy = mean(taux_occurrence)) %>% 
  select(esp_code_alternatif,
         taux_occurrence_moy) %>% 
  distinct()

6.3 Tableau final des densités surfaciques et des occurrences

Un tableau final regroupant les densités surfaciques moyennes et les occurrences moyennes des espèces est réalisé (relatifs à la sélection des stations et opérations réalisée dans le script 01_preatreatment_ope).

tab_densite_occurrence <- left_join(esp_densite_moyenne, tab_taux_occurrence, by = "esp_code_alternatif")

7 Représentation graphique

En amont de la réalisation d’une représentation graphique, les statuts de présence des espèces dans la précédente liste rouge régionale est renseigné dans une nouvelle colonne statut_lrr du dataframe tab_densite_occurrence. Cela permettra d’observer où se situent chaque espèce dans la relation pourcentage occurrence moyenne / densité surfacique moyenne, ainsi que leur présence / absence dans la précédente liste rouge régionale.

tab_densite_occurrence <- tab_densite_occurrence %>%
  mutate(statut_lrr = ifelse (esp_code_alternatif %in% params$especes_lrr_FC, 
                           "Liste Rouge Régionale FC 2014",
                           "Présente en Bourgogne-Franche-Comté"))

La représentation graphique est effectuée : par soucis de représentation, les axes sont mis en échelles logarithmiques.

gg_base <- ggplot(tab_densite_occurrence,
       aes(x = densite_moy,
           y = taux_occurrence_moy,
           label = esp_code_alternatif,
           color = statut_lrr)) +
  geom_point(size = 3,
             shape = 16) +
  labs(title = "Densités surfaciques moyennes vs Pourcentage d'occurrence par espèce sur les 20 dernières années",
       subtitle = "Région Bourgogne-Franche-Comté",
       x = "Densité surfacique moyenne",
       y = "Pourcentage d'occurrence") +
  scale_color_manual(values = wesanderson::wes_palette("AsteroidCity1")[3:5],
                     name = "Espèces") +
  scale_x_log10() +  # axe des x en échelle logarithmique
  scale_y_log10() +  # axe des y en échelle logarithmique
  theme_light(base_size = 11) +
  theme(plot.title = element_text(hjust = 0.5),
        panel.grid.major = element_line(color = "#ffffff", size = 0.1),
        panel.grid.minor = element_line(color = "#ffffff"),
        panel.background = element_rect(fill = "#faf0e6"),
        legend.position = "bottom") 

gg_texte_usuel <- gg_base + geom_label_repel() # afin d'éviter les chevauchements entre les différentes étiquettes
gg_texte_usuel

À partir de ce graphique, nous pouvons éliminer les espèces qui sont trop rares, c’est-à-dire ayant une densité surfacique moyenne et un taux d’occurrence très faibles (pour lesquelles nous n’avons pas assez de données - cela correspond aux espèces situées en bas à gauche du graphique). Les espèces ayant le plus de données sur lesquelles s’appuyer apparaissent en haut à droite du graphique : ce sont les espèces qui ont une forte occurrence ainsi qu’une forte densité surfacique moyenne.

Dans le cadre de notre étude, on observe que les espèces étudiées dans la précédente liste rouge régionale (2014) apparaissent pour la quasi-totalité dans la partie supérieure droite du graphique, à l’exception de quelques espèces comme :

  • CAR
  • IDE
  • ROI
  • CTI
  • MUP
  • SDF
  • TOX
  • ABH

Nous réajustons ainsi la sélection des espèces de la précendente liste rouge régionale en éliminant les espèces contenants trop peu de données. La sélection finale des espèces est contenue dans l’objet mes_especes. Nous appliquons cette sélection à notre dataframe esp_ope_selection.

8 Liste finale d’espèces à evaluer - Autochtonie

especes_lrr_2014 <- c("LOT","LOE","CHE","BRO","BOU","ANG","PER","BAF","EPT","ABH","BRE","EPI","CCO","CHA","HOT","VAI","TAN","BLN","VAN","TRF","LPP","OBR","ROT","ABL","GAR","IDE","LOF","TOX","GRE","BRB","SPI","GOU","LPM","LOR","LPP")

mes_especes <- c("ABH", "ABL", "ANG", "BAF", "BLN", "BLE", "BOU", "BRB", "BRE", "BRO", "CHA", "CHE", "EPI", "EPT", "GAR", "GOU", "GOO", "LPP", "LPM", "LOR", "LOF", "LOT", "MUP", "OBR", "PER", "ROT", "SAT", "SPI", "TAN", "TOX", "TRF", "VAI", "VAN")
esp_ope_selection <- esp_ope_selection %>% 
  filter(esp_code_alternatif %in% mes_especes)

9 Sauvegarde

Sauvegarde pour le script suivant : script 04_pre_traitements_donnees_ope_especes.

save(especes_lrr_2014, 
     mes_especes,
     esp_ope_selection,
     file = "../processed_data/selection_especes.rda")

10 Références bibliographiques

Irz, P., Mondy, C., Richard, B. Bonnafoux, L. (2024). aspe: An R package to analyse and visualise river fish data in France. R package version 0.4.1, https://github.com/PascalIrz/aspe/