Script : 20_pre_traitements_donnees_ope_especes
Il s’agit de réaliser une étape de pré-traitements et de mise en qualité des données sur la sélection des opérations réalisée précedemment. Il s’agit également de réaliser une mise en qualité des données individuelles des espèces propres à chacune des opérations. Il s’agit notamment d’observer les valeurs aberrantes contenues dans les mesures individuelles des poissons (mesures de tailles / poids / …).
Des paramètres sont fixés et sont modifiables selon les préférences et les objectifs visés. Parmi ces paramètres :
library(aspe)
#install.packages("C:/Users/pablo.vigneron/Downloads/PascalIrz-aspeQual-643d282.tar.gz", repos = NULL, type = "source")
#devtools::install_github("PascalIrz/aspeQual") # Instalation du package 'aspeQual'
library(aspeQual)
library(tidyverse)
library(readxl)
library(DT)
load(file = "../processed_data/selection_especes.rda")
load(file = "../processed_data/selection_pop_ope.rda")
rdata_tables <- misc_nom_dernier_fichier(
repertoire = "../../../../Liste_rouge_BFC/raw_data",
pattern = "^tables")
load(rdata_tables) # Chargement des données
mei_table <- misc_nom_dernier_fichier(
repertoire = "../../../../Liste_rouge_BFC/raw_data",
pattern = "^mei")
load(mei_table) # Chargement des données
## Lire le fichier Excel contenant les classes de maturité des espèces
traits_biologiques <- read_excel("../raw_data/traits_biologiques.xlsx")
source(file = "../R/detecter_erreurs_tailles.R")
source(file = "../R/classe_couleur_erreur.R")
Dans cette étude, nous souhaitons distinguer les individus “adultes” des individus “juvéniles”. Pour cela, nous devons réaliser une “classe de taille” de référence permettant, à partir de la taille des poissons pêchés lors des opérations, de séparer les poissons “adultes” des “juvéniles”. Ce choix est réalisé en raisonnance avec la méthodologie de la liste rouge qui incite à n’évaluer que les individus matures dans les analyses si les données le permettent (UICN France, 2018).
En complément de la base aspe, un tableau indiquant pour chaque espèce la taille maximale des 0+ est constitué (= taille référence minimum adulte). La longueur du poisson est utilisée comme proxy de son âge. Les tailles de maturité de référence sont renseignées à partir de 5 sources différentes pour chacune des espèces, et rassemblées dans un fichier Excel à importer sur R.
L’excel “traits_biologiques” doit être constitué en amont de l’exécution de ce script. Il contient 7 colonnes et 1 ligne par espèce présente sur la région étudiée :
1ere colonne : “espece_presence_lrr_2015” : la valeur 1 est inscrite si l’espèce a été présente sur la précédente lrr ; la valeur 0 est inscrite dans le cas contraire.
2ème colonne : “esp_nom_commun” : nom commun de l’espèce.
3ème colonne : “esp_code_alternatif” : code à 3 lettres de l’espèce.
n colonne(s) : valeurs de taille référence minimum adulte issue de la documentation.
n+1 colonne : “taille_maturite_ref” : valeur médiane des différentes tailles issues de la documentation*.
Dans le cas de cette étude - 5 colonnes issues de différentes sources : 1 et 2 : Ouvrages d’identification des poissons d’eau douce de France (Keith et al., 2020 ; Derouch, 2024); 3 : Observation des courbes de tailles dans le fichier R “estimation_taille_0+” à partir des données de taille de la base aspe; 4 : Valeurs de fishbase ; 5 : Valeurs de référence des espèces d’Occitanie.
Les différentes tailles de référence sont donc regroupées dans le tableau traits_biologiques et pour chacune des espèces, la médiane de l’ensemble des valeurs recueillies a été retenue pour être inscrite comme la valeur de référence de maturité.
traits_biologiques <- traits_biologiques %>% # Construction d'un jeu de données contenant les tailles de maturité
select(esp_code_alternatif, taille_maturite_ref)
mei_for_join <- temp_df %>%
rename(lop_id = mei_lop_id)
Il s’agit maintenant de créer un dataframe contenant l’ensemble des données individuelles relatives aux espèces sélectionnées ainsi qu’aux opérations de pêches contenues dans la passerelle (cf script 00_selection_pop_ope et 03_analyse_selection_especes). La taille des poissons est indiquée en millimètre et le poids en gramme. Dans ce nouveau jeu de données mei_ope_selection, nous ne retenons que les données en lien avec le dataframe esp_ope_selection (espèces sélectionnées lors du dernier script).
mei_ope_selection <- passerelle %>%
mef_ajouter_ope_date() %>%
left_join(y = mei_for_join) %>%
# left_join(mei_for_join , by = "lop_id") %>% #ajouter les mei manuellement
# mef_ajouter_mei() %>%
mef_ajouter_lots() %>%
mef_ajouter_type_protocole() %>%
mef_ajouter_passage() %>% # Ajout des passages de pêches
mef_ajouter_type_lot() %>%
mef_ajouter_type_longueur() %>%
select(
ope_id,
lop_id,
lop_effectif,
esp_code_alternatif,
mei_id,
sta_id,
pop_id,
mei_taille,
pas_numero,
tyl_libelle,
pro_libelle,
annee,
tlo_libelle
)
Attention lop_effectif correspond à l’effectis totale du lots !! Prenons l’exemple d’un lot de 4 CHA, on retrouvera 4 lignes avec chacune la valeur de 4 pour l’effectif. Pour le df finale, il faut que chaque effectif correspondent à 1 seul effectif par ligne !!!
mei_ope_selection_test <- mei_ope_selection %>%
mutate(lop_effectif_r = if_else(lop_effectif >= 1, 1, 0))
Nous retirons les passages supérieurs à 1 qui ne seront pas étudiés par soucis d’homogénéité des données (cf Paramètres). Nous ne considérons que les espèces sélectionnées suite au script 03_selection_especes (contenues dans l’objet mes_especes).
mei_ope_selection <- mei_ope_selection %>%
mutate(pas_numero = replace_na(pas_numero,0)) %>% # Passages "NA" transformés en "0" (équivalent)
filter(!pas_numero %in% params$passage_a_retirer,
esp_code_alternatif %in% mes_especes) %>% # Passages "2" et "3" sont retirés
distinct()
Certaines valeurs absentes / manquantes (“NA”) peuvent être observées au sein du jeu de données constitué. Celles-ci peuvent être dûes à des problèmes de retranscription dans la base de données aspe. Les lignes contenant des valeurs manquantes sont regroupées dans un dataframe valeur_na.
valeur_na <- mei_ope_selection %>% # Isolement des lignes contenant des NA dans un dataframe
filter(if_any(everything(), is.na))
mei_ope_selection <- na.omit(mei_ope_selection)
La taille médiane des espèces à l’échelle de leur station est calculée dans le jeu de données esp_taille_med_sta. Ces valeurs sont ensuite assignées comme valeurs de références en cas de valeurs manquantes (à la station).
esp_taille_na_med_sta <- mei_ope_selection %>% # Dataframe contenant les tailles médiannes des espèces par station
group_by(sta_id,
esp_code_alternatif) %>%
summarise(mei_taille_med = median(mei_taille, na.rm = TRUE)) %>%
ungroup()
summary(esp_taille_na_med_sta)
## sta_id esp_code_alternatif mei_taille_med
## Min. : 2422 Length:2396 Min. : 20.0
## 1st Qu.: 8843 Class :character 1st Qu.: 64.0
## Median : 19140 Mode :character Median : 91.0
## Mean : 58115 Mean :134.8
## 3rd Qu.: 19791 3rd Qu.:144.0
## Max. :4331694 Max. :960.0
valeur_na_complet <- valeur_na %>% # Remplacement valeurs de tailles manquantes par les valeurs du dataframe esp_taille_na_med_sta
left_join(esp_taille_na_med_sta, by = c("sta_id", "esp_code_alternatif")) %>%
mutate(mei_taille = coalesce(mei_taille, mei_taille_med)) %>%
select(-mei_taille_med)
Le jeu de données initial mei_ope_selection est ensuite complété des lignes précèdemment retirées (les valeurs de tailles manquantes sont remplacées par les données de tailles médianes des espèces à l’échelle de la station).
mei_ope_selection <- bind_rows(mei_ope_selection, valeur_na_complet)
Une distinction des classes d’âges est réalisée sur le jeu de données mei_ope_selection : à chaque espèce correspond alors 3 stades différents : - “ad”: individu adulte dont la taille est supérieure à la taille_maturite_ref spécifique à l’espèce ; - “juv”: individu juvénile dont la taille est inférieure à la taille_maturité_ref spécifique à l’espèce ; - “ind”: Indifférencié = toutes classes d’âges confondues (ad + juv).
mei_ope_selection <- mei_ope_selection %>%
left_join(traits_biologiques)
mei_ope_selection <- mei_ope_selection %>%
mutate(stade = ifelse(mei_ope_selection$mei_taille < mei_ope_selection$taille_maturite_ref,
"juv","ad")) # Ajout du stade pour chacune des lignes de mei_ope_selection
La mise en place des relations tailles / poids est réalisée grâce au package apse et au tutoriel Construire des relations taille- poids, réalisé par Mr Pascal Irz (https://rpubs.com/kamoke/729779). Cette relation nous permet de relier la longueur d’un poisson à son poids. Les mesures de poids sont rarement prises lors des pêches mais son pourtant nécessaires dans le calcul d’indicateurs simples comme pour les biomasses. Ainsi, nous utilisons cette relation afin d’obtenir des valeurs de poids indicatives remplaçant les valeurs NA de poids dans notre jeu de données mei_ope_selection. Elles seront alors remplacées par des estimations de poids en fonction de la taille du poissons : poids_tp.
mei_taille_poids <- aspe::data_taille_poids %>% # Utilisation des relations taille - poids du package aspe
group_by(esp_code_alternatif,
tlo_libelle) %>%
arrange(source) %>%
slice(1)
# nb : vérifier qu'on a bien les tailles pour tous les poissons avant d'appliquer la taille-poids
# combinaisons espèces - type de longueur absentes de la table de conversion
mei_tp_manquantes <- mei_ope_selection %>%
select(esp_code_alternatif,
tlo_libelle) %>%
distinct() %>%
left_join(y = mei_taille_poids) %>%
filter(is.na(a))
# nb : certaines espèces n'ont pas de relation en longueur fourche, on approxime par la longueur totale
mei_esp_tp_manquantes <- mei_tp_manquantes %>%
pull(esp_code_alternatif)
#Modif temporaire des NA pour tester le code !!!!
# mei_ope_selection <- mei_ope_selection %>%
# filter(!esp_code_alternatif %in% c("SPI", "VAI", "ABL", "BOU", "CHA", "ASP"))
mei_ope_selection <- mei_ope_selection %>%
mutate(tlo_libelle = ifelse(
esp_code_alternatif %in% mei_esp_tp_manquantes &
tlo_libelle == "Fourche", "Totale",
tlo_libelle
))
On ajoute les poids_tp dans notre jeu de données mei_ope_selection :
mei_ope_selection <- mei_ope_selection %>%
left_join(y = mei_taille_poids,
by = c("esp_code_alternatif", "tlo_libelle")) %>%
mutate(poids_tp = a * ((mei_taille / 10) ^ b)) # On ajoute les poids_tp
Maintenant que nous avons toutes les données regroupées dans un dataframe général (mei_ope_selection), nous pouvons passer au traitement qualitatif des données individuelles des poissons et notamment des valeurs poids et de tailles.
En ajoutant les valeurs de poids mesurés (mei_poids), nous pouvons les comparer aux poids estimés par la relation (poids_tp). Il s’agit de regarder les différences entre les poids réels et les poids estimés.
mei_ope_selection <- mei_ope_selection %>% # Ajout des mesures de poids existantes
left_join(y = mei_for_join ) %>% #ajouter les mei manuellement
# mef_ajouter_mei() %>% #Ajout des données individuelles de poids
select(ope_id:poids_tp, mei_poids)
mei_ope_selection_poids <- mei_ope_selection %>%
filter(!is.na(mei_poids)) # Filtrer les données pour enlever les NA dans la colonne mei_poids
ggplot(mei_ope_selection_poids, aes(x = poids_tp, y = mei_poids, color = esp_code_alternatif)) +
geom_point(alpha = 0.7, size = 3) +
geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = "red") +
facet_wrap(~ esp_code_alternatif, scales = "free", labeller = label_wrap_gen(width = 8)) +
labs(title = "Comparaison des valeurs estimées et réelles de poids par espèce",
x = "Poids estimé (poids_tp)",
y = "Poids réel (mei_poids)",
color = "Code Espèce") +
theme_minimal(base_size = 15) +
theme(panel.background = element_rect(fill = "#faf0e0"),
plot.title = element_text(hjust = 0.5, size = 20, face = "bold"),
plot.subtitle = element_text(hjust = 0.5, size = 16),
legend.position = "bottom",
legend.title = element_text(size = 14),
legend.text = element_text(size = 12),
strip.background = element_rect(fill = "lightgrey", color = "black", size = 1),
strip.text = element_text(size = 14, face = "bold")
) + guides(color = guide_legend(override.aes = list(size = 4)))
Nous observons que beaucoup de valeurs “0” sont présentes dans les valeurs de poids réelles. Il s’agit très probablement de valeurs “NA” inscrites en 0. Ces dernières sont à corriger dans la base ASPE.
Il s’agit de mettre en place des seuils pour détecter des erreurs potentielles dans les tailles de poissons. Il s’agit donc d’instaurer des valeurs de tailles “minimum” et “maximum” pour chaque espèce. Pour cela, nous crééons un jeu de données ne contenant que les lignes ayant fait l’objet de mesures sur la longueur totale du poisson :
esp_lt_data <- mei_ope_selection %>%
ungroup() %>%
filter(tlo_libelle == "Totale",
esp_code_alternatif == esp_code_alternatif)
La fonction qtp_seuils permet d’isoler les tailles minimum et maximum des différentes espèces au sein du jeu de données esp_lt_data. Cette fonction est tirée du packages aspeQual dédié à la mise en qualité de la base aspe réalisé par Mr Pascal Irz.
mei_df_seuils <- aspeQual::qtp_seuils(df = esp_lt_data,
var_taxon = esp_code_alternatif,
var_a_tester = mei_taille,
seuil_densite = 0.001)
mei_df_seuil est un jeu de données contenant les tailles minimum et maximum de chacune des espèces présentes dans mei_ope_selection. Les deux dataframes sont alors empilés :
mei_ope_selection <- mei_ope_selection %>% # Joindre les seuils calculés avec le jeu de données principal
left_join(mei_df_seuils, by = "esp_code_alternatif")
La fonction detecter_erreurs_tailles est créée afin de recenser les valeurs de tailles abérantes contenues dans un dataframe. Elle est appliquée sur notre jeu de données mei_ope_selection. erreur_df est le jeu de données dans lequel l’ensemble des données de tailles supérieures ou inférieures aux seuils calculés précédemment sont stockées. Il est nécessaire de corriger ces éventuelles erreurs de saisies ou d’unités directement dans la base aspe.
erreurs_df <- detecter_erreurs_tailles(df = mei_ope_selection)
## ope_id esp_code_alternatif mei_id mini maxi mei_taille
## 1 36700 GOU 6201034 13 173 444
## 2 36821 VAI 6198627 11 98 105
## 3 36612 VAI 6465676 11 98 100
## 4 37308 GOU 6466009 13 173 176
## 5 37308 GOU 6466010 13 173 175
## 6 37228 GOU 6199519 13 173 11
## 7 36323 GOU 6316115 13 173 10
## 8 37215 BLN 6427008 18 235 17
## 9 37215 BLN 6427007 18 235 17
## 10 35881 VAI 6352432 11 98 104
## 11 35881 VAI 6352420 11 98 101
## 12 37498 VAI 6510554 11 98 99
## 13 38012 SPI 6582505 17 135 14
## 14 37023 VAI 6204129 11 98 222
## 15 37023 VAI 10566714 11 98 127
## 16 37023 VAI 10566715 11 98 124
## 17 36974 GOU 6308924 13 173 194
## 18 36092 CHA 6428484 7 138 5
## 19 37240 GOU 6269161 13 173 198
## 20 36555 VAI 10233973 11 98 100
## 21 36986 GOU 6242344 13 173 175
## 22 36092 CHA 6428481 7 138 6
## 23 35848 VAI 6202093 11 98 99
## 24 36676 VAI 6320598 11 98 102
## 25 36676 VAI 6320585 11 98 101
## 26 36676 VAI 10586083 11 98 102
## 27 36820 ABL 6393552 14 170 196
## 28 36820 ABL 6393550 14 170 180
## 29 36820 ABL 6393555 14 170 189
## 30 35881 LOF 6275714 18 126 133
## 31 36675 VAI 6473956 11 98 103
## 32 36675 VAI 6473958 11 98 99
## 33 37425 VAI 6473486 11 98 99
## 34 36984 VAI 6436267 11 98 100
## 35 36916 LOF 6238803 18 126 143
## 36 36713 VAI 6358050 11 98 4058
## 37 36625 CHE 6308103 4 537 1
## 38 37868 VAI 6528732 11 98 107
## 39 37868 VAI 6528730 11 98 139
## 40 37868 VAI 6528735 11 98 135
## 41 37868 VAI 6528733 11 98 120
## 42 37868 VAI 6528731 11 98 107
## 43 37868 VAI 6528734 11 98 106
## 44 37998 VAI 6533318 11 98 741
## 45 37998 VAI 10826543 11 98 119
## 46 37998 VAI 10826544 11 98 356
## 47 37998 VAI 10826545 11 98 263
## 48 37998 VAI 10826546 11 98 102
## 49 37998 VAI 10826547 11 98 206
## 50 37998 VAI 10826548 11 98 156
## 51 37998 VAI 10826549 11 98 136
## 52 37998 VAI 10826550 11 98 189
## 53 37998 VAI 10826552 11 98 165
## 54 37998 VAI 10826553 11 98 361
## 55 37998 VAI 10826554 11 98 191
## 56 37998 VAI 10826555 11 98 110
## 57 37998 VAI 10826556 11 98 110
## 58 37998 VAI 10826557 11 98 114
## 59 37998 VAI 10826558 11 98 177
## 60 37998 VAI 10826559 11 98 102
## 61 37998 VAI 10826560 11 98 169
## 62 37998 VAI 10826563 11 98 182
## 63 37998 VAI 10826564 11 98 110
## 64 37998 VAI 10826565 11 98 186
## 65 37998 VAI 10826566 11 98 146
## 66 37998 VAI 10826567 11 98 194
## 67 37998 VAI 10826569 11 98 125
## 68 37998 VAI 10826570 11 98 286
## 69 37998 VAI 10826571 11 98 155
## 70 37998 VAI 10826573 11 98 223
## 71 37998 VAI 10826574 11 98 202
## 72 37998 VAI 10826576 11 98 182
## 73 37998 VAI 10826577 11 98 216
## 74 37998 VAI 10826578 11 98 243
## 75 37998 VAI 10826579 11 98 243
## 76 37998 VAI 10826581 11 98 105
## 77 37998 VAI 10826582 11 98 204
## 78 37998 VAI 10826584 11 98 233
## 79 37998 VAI 10826585 11 98 104
## 80 37998 VAI 10826586 11 98 451
## 81 37998 VAI 10826589 11 98 247
## 82 37998 VAI 10826590 11 98 316
## 83 37998 VAI 10826591 11 98 232
## 84 37998 VAI 10826593 11 98 117
## 85 37998 VAI 10826594 11 98 108
## 86 37998 VAI 10826595 11 98 131
## 87 37998 VAI 10826596 11 98 173
## 88 37998 VAI 10826597 11 98 117
## 89 37998 VAI 10826598 11 98 114
## 90 37998 VAI 10826600 11 98 177
## 91 37998 VAI 10826601 11 98 218
## 92 37998 VAI 10826604 11 98 252
## 93 37998 VAI 10826605 11 98 168
## 94 37998 VAI 10826606 11 98 251
## 95 37998 VAI 10826608 11 98 127
## 96 37998 VAI 10826609 11 98 108
## 97 37998 VAI 10826610 11 98 212
## 98 37998 VAI 10826611 11 98 184
## 99 37998 VAI 10826612 11 98 237
## 100 37998 VAI 10826613 11 98 146
## 101 37998 VAI 10826614 11 98 229
## 102 37998 VAI 10826615 11 98 214
## 103 37998 VAI 10826616 11 98 249
## 104 37998 VAI 10826617 11 98 148
## 105 37998 VAI 10826618 11 98 221
## 106 37998 VAI 10826619 11 98 124
## 107 37998 VAI 10826620 11 98 224
## 108 37998 VAI 10826621 11 98 155
## 109 37998 VAI 10826622 11 98 316
## 110 37998 VAI 10826623 11 98 173
## 111 37998 VAI 10826624 11 98 198
## 112 37998 VAI 10826625 11 98 306
## 113 37998 VAI 10826626 11 98 167
## 114 37998 VAI 10826627 11 98 140
## 115 37998 VAI 10826630 11 98 199
## 116 37998 VAI 10826631 11 98 148
## 117 37998 VAI 10826632 11 98 167
## 118 37998 VAI 10826633 11 98 279
## 119 37998 VAI 10826634 11 98 140
## 120 37998 VAI 10826635 11 98 276
## 121 37998 VAI 10826636 11 98 166
## 122 37998 VAI 10826637 11 98 127
## 123 37998 VAI 10826638 11 98 242
## 124 37998 VAI 10826640 11 98 124
## 125 37998 VAI 10826641 11 98 139
## 126 37998 VAI 10826642 11 98 115
## 127 37998 VAI 10826643 11 98 225
## 128 37998 VAI 10826644 11 98 110
## 129 37998 VAI 10826645 11 98 386
## 130 38086 CHA 10223182 7 138 1001
## 131 38086 CHA 10223183 7 138 248
## 132 38101 VAI 10226648 11 98 104
## 133 38101 VAI 10226651 11 98 101
## 134 38101 VAI 10226652 11 98 102
## 135 38101 VAI 10226653 11 98 100
## 136 38101 VAI 10226654 11 98 101
## 137 38101 VAI 10226655 11 98 102
## 138 38101 VAI 10226656 11 98 101
## 139 38101 VAI 10226658 11 98 100
## 140 38101 VAI 10226659 11 98 101
## 141 38101 VAI 10226661 11 98 101
## 142 38101 VAI 10226662 11 98 99
## 143 38101 VAI 10226663 11 98 99
## 144 38101 VAI 10226664 11 98 101
## 145 38101 VAI 10226665 11 98 102
## 146 37663 CHA 6552722 7 138 145
## 147 37483 VAI 10222842 11 98 99
## 148 37825 GOU 6600509 13 173 180
## 149 37665 CHA 6494372 7 138 145
## 150 38073 ABL 6568532 14 170 10
## 151 38371 VAI 6653502 11 98 102
## 152 38341 VAI 6656349 11 98 99
## 153 17110 SPI 2930957 17 135 150
## 154 35980 ABL 6232465 14 170 177
## 155 38568 LOF 6724014 18 126 8
## 156 38568 LOF 6724015 18 126 8
## 157 38579 CHA 6725576 7 138 3
## 158 38582 CHE 6726143 4 537 3
## 159 38591 LOF 6729725 18 126 8
## 160 38596 CHA 6730997 7 138 6
## 161 38599 CHA 6731925 7 138 146
## 162 38599 CHA 6731942 7 138 146
## 163 38604 GOU 6732420 13 173 5
## 164 38608 SPI 6733053 17 135 3
## 165 38622 CHA 6738345 7 138 6
## 166 38623 GAR 6738702 4 333 375
## 167 38624 GAR 6739205 4 333 350
## 168 38624 CHE 6739233 4 537 3
## 169 38624 GOU 6739391 13 173 8
## 170 38629 GOU 6740880 13 173 9
## 171 38637 PER 6743859 10 437 540
## 172 38654 GOU 6748481 13 173 5
## 173 38672 BAF 6754086 6 701 1116
## 174 39233 SPI 6913727 17 135 12
## 175 39233 SPI 6913731 17 135 12
## 176 39298 SPI 6934191 17 135 145
## 177 39408 VAI 6955478 11 98 3
## 178 39414 GOU 6956513 13 173 190
## 179 39542 ABL 6985918 14 170 190
## 180 39406 BAF 7012775 6 701 710
## 181 38586 CHA 6726727 7 138 164
## 182 38648 GOU 6746919 13 173 6
## 183 38648 GOU 6746923 13 173 8
## 184 38654 VAI 6748066 11 98 8
## 185 38654 VAI 6748121 11 98 7
## 186 38730 VAI 6773328 11 98 100
## 187 81743 LOF 7960328 18 126 130
## 188 81848 ROT 8028121 14 364 390
## 189 82200 TRF 8250854 4 588 610
## 190 82213 VAI 8252584 11 98 9
## 191 82536 CHE 8765771 4 537 550
## 192 82552 CHE 8774527 4 537 700
## 193 82555 ABL 8776326 14 170 173
## 194 82559 VAI 8777334 11 98 102
## 195 83436 LOF 11167860 18 126 127
## 196 84091 ABL 12135314 14 170 174
## 197 84280 ROT 12243700 14 364 6
## 198 84322 CHE 12265537 4 537 540
## 199 84367 LOF 12304688 18 126 7
## 200 84480 LOF 12409770 18 126 15
## 201 84854 CHE 13766310 4 537 570
## 202 84854 LOF 13766439 18 126 7
## 203 84854 SPI 13766483 17 135 7
## 204 84854 VAI 13766559 11 98 8
## 205 84854 VAI 13766589 11 98 6
## 206 84856 VAI 13767241 11 98 6
## 207 84863 VAI 13845457 11 98 7
## 208 84862 VAI 13845168 11 98 6
## 209 84863 LOF 13845393 18 126 182
## 210 84863 LOF 13845394 18 126 185
## 211 84864 ABL 13845658 14 170 3
## 212 84864 ABL 13845689 14 170 10
## 213 84864 ABL 13845707 14 170 8
## 214 84864 ABL 13845708 14 170 7
## 215 84864 LOF 13845624 18 126 9
## 216 84869 CHA 13847361 7 138 167
## 217 84872 ABL 13848354 14 170 190
## 218 84878 GOU 13856006 13 173 8
## 219 86197 LOF 18382995 18 126 168
## 220 86197 VAI 18383040 11 98 3
## 221 86335 LOF 18680169 18 126 15
## 222 86463 LOF 18815173 18 126 3
## 223 86483 SPI 18820410 17 135 137
## 224 86483 SPI 18820791 17 135 136
## 225 86621 GOU 18856401 13 173 179
## 226 86621 SPI 18856493 17 135 7
## 227 86631 VAI 18858451 11 98 8
## 228 86689 LOF 18924059 18 126 192
## 229 86689 LOF 19873303 18 126 140
## 230 86692 GOU 18929322 13 173 187
## 231 86710 CHE 18934934 4 537 3
## 232 87037 GOU 19249669 13 173 200
## 233 87037 VAN 19249670 3 335 510
## 234 87036 VAI 19249412 11 98 101
## 235 87037 VAI 19249711 11 98 100
## 236 87057 VAI 19255034 11 98 6
## 237 87064 GAR 19257444 4 333 367
## 238 87113 VAI 19721242 11 98 106
## 239 87113 VAI 19286402 11 98 132
## 240 87172 GOU 19308331 13 173 185
## 241 87179 ABL 19317838 14 170 200
## 242 87315 SPI 19539755 17 135 13
## 243 87425 LOF 19666800 18 126 197
## 244 87425 LOF 19668643 18 126 148
## 245 87425 LOF 19668648 18 126 155
## 246 35882 SPI 6273159 17 135 143
## 247 37549 TRF 6508127 4 588 605
## 248 35833 GAR 6384804 4 333 350
## 249 37373 GOU 6231816 13 173 190
## 250 38332 CHE 6671365 4 537 555
## 251 37527 BLN 6603193 18 235 240
## 252 36985 GOU 6321273 13 173 245
## 253 36335 VAN 6383635 3 335 375
## 254 38142 VAI 6487356 11 98 100
## 255 38008 BAF 6531849 6 701 715
## 256 37934 GAR 6562893 4 333 380
## 257 37439 BRB 6464672 5 480 570
## 258 36681 VAI 6195497 11 98 110
## 259 37289 CHE 6472677 4 537 570
## 260 35980 GAR 6422620 4 333 338
## 261 37654 GAR 6529382 4 333 352
## 262 38187 TRF 6543170 4 588 610
## 263 38180 CHE 6604425 4 537 546
## 264 37620 BAF 6496269 6 701 710
## 265 37825 TRF 6618947 4 588 620
## 266 36151 GOU 6390742 13 173 188
## 267 37929 ABL 6605799 14 170 175
## 268 37841 CHE 6601035 4 537 570
## 269 38073 HOT 6624895 5 601 668
## 270 38141 GOU 6563837 13 173 180
## 271 36152 VAI 6387655 11 98 100
## 272 38086 BLN 6505686 18 235 270
## 273 37631 CHE 6566493 4 537 570
## 274 36793 CHE 6310605 4 537 575
## 275 37653 ROT 6493954 14 364 410
## 276 36168 CHE 6350108 4 537 615
## 277 36078 GOU 6201572 13 173 181
## 278 37935 GAR 6523916 4 333 365
## 279 37372 GOU 6387526 13 173 178
## 280 36649 CHE 6325936 4 537 572
## 281 37826 GAR 6580134 4 333 345
## 282 37371 GOU 6200067 13 173 175
## 283 36477 VAI 6348238 11 98 100
## 284 37491 CHE 6495435 4 537 590
## 285 38276 BAF 6690498 6 701 730
## 286 37631 VAN 6510171 3 335 365
## 287 37627 BLN 6487211 18 235 245
## 288 38225 PER 6603798 10 437 438
## 289 37371 GOU 6238574 13 173 185
## 290 38139 VAI 6528470 11 98 110
## 291 38182 TRF 6506631 4 588 595
## 292 37855 GOU 6568064 13 173 195
## 293 36575 ABL 6427919 14 170 171
## 294 38139 VAI 6566487 11 98 105
## 295 37825 TRF 6581367 4 588 590
## 296 37308 GAR 6237848 4 333 340
## 297 38437 LOF 6692350 18 126 148
## 298 37934 GAR 6487450 4 333 345
## 299 37993 GOU 6492165 13 173 190
## 300 17804 TRF 3131056 4 588 590
## 301 38406 GOU 6661117 13 173 180
## 302 37371 GOU 6391418 13 173 176
## 303 38014 CHE 6486458 4 537 560
## 304 38182 TRF 6506630 4 588 715
## 305 38389 CHE 6661693 4 537 540
## 306 35859 LOF 6269971 18 126 128
## 307 37930 BAF 6510875 6 701 730
## 308 37851 GOU 6514872 13 173 182
## 309 38195 CHE 6544329 4 537 550
## 310 38143 VAI 6487234 11 98 100
## 311 37491 HOT 6532249 5 601 660
## 312 37400 BAF 6194800 6 701 800
## 313 37854 GOU 6512871 13 173 199
## 314 37801 GAR 6600003 4 333 370
## 315 38142 GOU 6524841 13 173 175
## 316 37620 CHE 6496273 4 537 540
## 317 38301 GOU 6660659 13 173 175
## 318 37622 TRF 6511619 4 588 676
## 319 37371 GOU 6276669 13 173 183
## 320 35900 VAI 6314156 11 98 99
## 321 37655 ROT 6601856 14 364 385
## 322 37238 ABL 6466156 14 170 180
## 323 36625 ROT 6308335 14 364 382
## 324 36529 GAR 6359339 4 333 970
## 325 87608 BLN 20603632 18 235 238
## 326 88230 LOF 21068719 18 126 136
## 327 88344 VAI 21153573 11 98 105
## 328 88368 CHE 21184329 4 537 559
## 329 88368 CHE 21184330 4 537 570
## 330 88368 CHE 21184334 4 537 550
## 331 88368 CHE 21184339 4 537 592
## 332 88376 GOU 21189522 13 173 187
## 333 88382 GAR 21197389 4 333 339
## 334 88405 VAI 21212657 11 98 100
## 335 88405 VAI 21212658 11 98 109
## 336 88652 CHE 21370800 4 537 567
## 337 88842 HOT 21563252 5 601 712
## 338 88844 CHE 21565883 4 537 587
## 339 88847 GOU 21568774 13 173 183
## 340 88920 CHE 21655357 4 537 578
## 341 88924 GAR 21661619 4 333 422
## 342 88925 GAR 21661782 4 333 341
## 343 88925 GAR 21661786 4 333 352
## 344 88926 ROT 21663015 14 364 371
## 345 88926 CHE 21662794 4 537 544
## 346 37227 SPI 6470634 17 135 15
## 347 38123 BLN 6626994 18 235 1025
## 348 38123 GOU 6515034 13 173 4100
## 349 38123 GOU 10810321 13 173 407
## 350 38123 GOU 10810322 13 173 1030
## 351 38123 GOU 10810323 13 173 608
## 352 38123 GOU 10810324 13 173 668
## 353 38123 GOU 10810325 13 173 392
## 354 38123 GOU 10810326 13 173 828
## 355 38123 GOU 10810327 13 173 535
## 356 38123 GOU 10810328 13 173 1785
## 357 38123 GOU 10810329 13 173 541
## 358 38123 GOU 10810330 13 173 1303
## 359 38123 GOU 10810331 13 173 1225
## 360 38123 GOU 10810332 13 173 429
## 361 38123 GOU 10810333 13 173 619
## 362 38123 GOU 10810334 13 173 443
## 363 38123 GOU 10810335 13 173 355
## 364 38123 GOU 10810336 13 173 623
## 365 38123 GOU 10810337 13 173 290
## 366 38123 GOU 10810338 13 173 1842
## 367 38123 GOU 10810339 13 173 1198
## 368 38123 GOU 10810340 13 173 579
## 369 38123 GOU 10810341 13 173 237
## 370 38123 GOU 10810342 13 173 1821
## 371 38123 GOU 10810343 13 173 841
## 372 38123 GOU 10810344 13 173 348
## 373 38123 GOU 10810345 13 173 495
## 374 38123 GOU 10810346 13 173 304
## 375 38123 GOU 10810347 13 173 314
## 376 90254 CHE 22548473 4 537 620
## 377 90254 BAF 22548476 6 701 740
## 378 90259 BAF 22554508 6 701 720
## 379 90259 BAF 22554509 6 701 750
## 380 90259 CHE 22554511 4 537 570
## 381 90259 CHE 22554513 4 537 570
## 382 90427 BAF 22624462 6 701 725
## 383 90977 GOU 22884843 13 173 177
## 384 90984 CHE 22885894 4 537 550
## 385 91033 BAF 22905417 6 701 715
## 386 91051 CHE 22920705 4 537 540
## 387 91092 GAR 22946345 4 333 335
## 388 91103 CHE 22955218 4 537 551
## 389 91108 CHE 22957544 4 537 563
## 390 91341 GAR 23200501 4 333 352
## 391 90719 VAI 22754672 11 98 106
## 392 38591 VAI 6729053 11 98 4
## 393 22943 VAR 3811446 60 175 52
## 394 36534 GOU 6279281 13 173 6
## 395 22943 VAR 3811443 60 175 58
## 396 22943 VAR 3811445 60 175 57
## 397 22943 VAR 3811197 60 175 43
## 398 22943 VAR 3811432 60 175 46
## 399 22943 VAR 3811187 60 175 56
## 400 22943 VAR 3811200 60 175 53
## 401 22943 VAR 3811450 60 175 51
## 402 22943 VAR 3811202 60 175 42
## 403 22943 VAR 3811199 60 175 57
## 404 22943 VAR 3811434 60 175 53
## 405 92406 VAI 24010818 11 98 103
## 406 92406 VAI 24010838 11 98 102
## 407 92406 VAI 24010841 11 98 105
## 408 92406 VAI 24010847 11 98 107
## 409 92406 VAI 24010855 11 98 101
## 410 92935 ABL 24279232 14 170 178
## 411 92956 VAI 24287561 11 98 99
## 412 92982 LOF 24305142 18 126 10
## 413 93048 GOU 24360160 13 173 175
## 414 93064 CHE 24373032 4 537 573
## 415 93064 SPI 24373960 17 135 148
## 416 93080 SPI 24379497 17 135 156
## 417 93125 CHE 24408508 4 537 575
## 418 93140 CHE 24431246 4 537 588
## 419 93141 LOF 24435345 18 126 128
## 420 93141 GAR 24435331 4 333 355
## 421 94884 VAI 25339623 11 98 100
## 422 94945 LOF 25390405 18 126 15
## 423 95729 CHE 26399005 4 537 550
## 424 95729 CHE 26399007 4 537 600
## 425 95809 VAI 26453108 11 98 113
## 426 95809 VAI 26453109 11 98 118
## 427 95831 TRF 26513847 4 588 590
## 428 95908 ABL 26569496 14 170 191
## 429 95958 PER 26618414 10 437 471
## 430 96029 ABL 26692564 14 170 202
Nous affichons, par ordre de priorité, les erreurs les plus abérrantes contenues dans le jeu de données erreurs_df. Nous fixons l’ordre d’abérration des données à travers les variables var_rouge / var_darkorange / var_orange, contenues dans la fonction classe_couleur_erreur.
erreurs_df <- erreurs_df %>%
rowwise() %>%
mutate(color = classe_couleur_erreur(var_taille = mei_taille,
valeur_mini = mini,
valeur_maxi = maxi,
var_rouge = 150, # Rouge lorsque la taille réelle dépasse 150mm de la taille indiquée comme maximum
var_darkorange = 75,
var_orange = 25)) %>%
ungroup() %>%
mutate(severity = case_when(
color == "red" ~ 1,
color == "darkorange" ~ 2,
color == "orange" ~ 3,
TRUE ~ 4)) %>% # Pour s'assurer qu'il y a une valeur de gravité pour chaque ligne
arrange(severity)
Le tableau d’erreurs peut être affiché, avec en couleur, les ordres de priorités de correction des erreurs (allant de blanc à rouge).
datatable(erreurs_df %>% select(-severity), options = list(pageLength = 25)) %>%
formatStyle('color',
columns = c("ope_id", "esp_code_alternatif", "mei_id", "mini", "maxi", "mei_taille"),
target = 'row',
backgroundColor = styleEqual(
c("red", "darkorange", "orange"),
c("red", "darkorange", "orange")))
Dans le jeu de données mei_ope_selection, on s’attend à avoir autant de ligne lop_id (identifiants de lots) que de ligne lop_effectif (effectifs des lots). Il peut cependant y avoir des exceptions, notamment lorsque la nature du lot est “S/M” et a une valeur d’effectif de 30.
verif_effectif <- mei_ope_selection %>%
group_by(esp_code_alternatif,
lop_id,
lop_effectif
) %>%
summarise(nbr_lignes = n()) %>%
ungroup()
resultat_verif_effectif <- verif_effectif %>%
filter(nbr_lignes!= lop_effectif)
Lorsque le nombre de ligne est supérieur au lop_effectif, il s’agit d’erreur de retranscription. On remplace alors la valeur de lop_effectif par le nombre de ligne contenu dans la colonne “nbr_lignes”.
mei_ope_selection <- mei_ope_selection %>%
left_join(verif_effectif, by = c("esp_code_alternatif", "lop_id", "lop_effectif")) %>%
mutate(lop_effectif = ifelse(lop_effectif < nbr_lignes, nbr_lignes, lop_effectif)) %>%
select(-nbr_lignes)
Dans ce même jeu de données, il doit normalement n’y avoir qu’un mei_id par ligne (et pas de doublons) : ainsi, nb_unique doit théoriquement être égal au nombre total de lignes de mei_ope_selection (nous devons cependant y soustraire les mei_id ayant des valeurs NA (cas anormaux venant de la base ASPE - à corriger - mais sans conséquence pour la suite de l’analyse)).
nb_unique <- mei_ope_selection %>% # Calcul du nombre unique de mei_id
summarise(nb_unique = n_distinct(mei_id, na.rm = TRUE)) %>%
pull()
nb_na <- mei_ope_selection %>%
summarise(nb_na = sum(is.na(mei_id))) %>%
pull(nb_na)
nb_lignes <- mei_ope_selection %>%
nrow() # Nombre de lignes dans mei_ope_selection
# Comparaison et affichage du message
if (nb_unique + nb_na == nb_lignes) {
print("Le nombre de valeurs uniques de mei_id est égal au nombre de lignes de mei_ope_selection.")
} else {
print("Le nombre de valeurs uniques de mei_id n'est pas égal au nombre de lignes de mei_ope_selection.")}
## [1] "Le nombre de valeurs uniques de mei_id est égal au nombre de lignes de mei_ope_selection."
Dans l’exemple de la Bretagne, on observe que le nombre de valeurs uniques de mei_id n’est pas égal au nombre de lignes de mei_ope_selection(en comprennant les valeurs NA). Il est donc necessaire de corriger ces erreurs ; temporairement, on assigne à ces NA un identifiant provisoire afin de ne pas avoir de blocage pour la suite de l’étude.
mei_ope_selection <- mei_ope_selection %>% # Convertir mei_id en chaîne de caractères
mutate(mei_id = as.character(mei_id))
# Création d'un vecteur de noms pour remplacer les NA
na_vigilance <- paste0("na_vigilance_", seq_along(which(is.na(mei_ope_selection$mei_id))))
mei_ope_selection <- mei_ope_selection %>% # Remplacement des NA dans mei_id par les valeurs de na_vigilance
mutate(mei_id = replace(mei_id, is.na(mei_id), na_vigilance))
mei_ope_selection <- mei_ope_selection %>%
mutate(stade = as.factor(stade))
summary(mei_ope_selection)
## ope_id lop_id lop_effectif esp_code_alternatif
## Min. :11207 Min. :1504948 Min. : 1.0 Length:1090516
## 1st Qu.:37427 1st Qu.:4304354 1st Qu.: 28.0 Class :character
## Median :38424 Median :4411155 Median : 105.0 Mode :character
## Mean :59130 Mean :4769976 Mean : 284.2
## 3rd Qu.:87910 3rd Qu.:5479731 3rd Qu.: 312.0
## Max. :96052 Max. :6076699 Max. :3511.0
##
## mei_id sta_id pop_id mei_taille
## Length:1090516 Min. : 2422 Min. : 9872 Min. : 1.00
## Class :character 1st Qu.: 8843 1st Qu.: 33328 1st Qu.: 47.00
## Mode :character Median : 18976 Median : 67711 Median : 63.00
## Mean : 76254 Mean : 263959 Mean : 76.61
## 3rd Qu.: 19639 3rd Qu.: 69335 3rd Qu.: 86.00
## Max. :4331694 Max. :14895981 Max. :4100.00
##
## pas_numero tyl_libelle pro_libelle annee
## Min. :0.0000 Length:1090516 Length:1090516 Min. :2007
## 1st Qu.:0.0000 Class :character Class :character 1st Qu.:2013
## Median :0.0000 Mode :character Mode :character Median :2017
## Mean :0.3984 Mean :2017
## 3rd Qu.:1.0000 3rd Qu.:2022
## Max. :1.0000 Max. :2025
##
## tlo_libelle taille_maturite_ref stade esp_nom_latin
## Length:1090516 Min. : 34.0 ad :238839 Length:1090516
## Class :character 1st Qu.: 70.0 juv :780143 Class :character
## Mode :character Median :100.0 NA's: 71534 Mode :character
## Mean :110.8
## 3rd Qu.:100.0
## Max. :750.0
## NA's :71534
## a b source n_etudes
## Min. :0.001088 Min. :2.476 Length:1090516 Min. : 1.000
## 1st Qu.:0.007115 1st Qu.:2.985 Class :character 1st Qu.: 1.000
## Median :0.009881 Median :3.042 Mode :character Median : 1.000
## Mean :0.011562 Mean :3.010 Mean : 5.167
## 3rd Qu.:0.011165 3rd Qu.:3.080 3rd Qu.: 8.000
## Max. :0.045763 Max. :3.383 Max. :54.000
##
## poids_tp mei_poids mini maxi
## Min. : 0.00 Min. : 0.00 Min. : 3 Min. : 71.0
## 1st Qu.: 1.05 1st Qu.: 0.00 1st Qu.: 7 1st Qu.: 98.0
## Median : 2.58 Median : 0.00 Median :11 Median : 170.0
## Mean : 19.45 Mean : 62.28 Mean :11 Mean : 233.9
## 3rd Qu.: 6.34 3rd Qu.: 24.00 3rd Qu.:14 3rd Qu.: 333.0
## Max. :847840.16 Max. :215142.00 Max. :60 Max. :1150.0
## NA's :955541
Nous sauvegardons dans un fichier .rda le jeu de données mei_ope_selection qui nous servira pour des analyses futures.
save(mei_ope_selection,
file = "../processed_data/pre_traitements_donnees_especes.rda")
Derouch, M. (2024). Cahier d’identification des Poissons d’eau douce de France. Mèze : Biotope éditions, 128 p.
Keith, P., Poulet, N., Denys, G., Changeux, T., Feunteun, É., Persat, H. (2020). Les poissons d’eau douce de France. Deuxième édition. Muséum national d’Histoire naturelle, Paris ; Biotope, Mèze, 704 p. (Inventaires & biodiversité ; 18).
Irz, P. (2023). aspeQual: quality control over the aspe database. R package version 1.0.0, https://github.com/PascalIrz/aspeQual/
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/
UICN France (2018). Guide pratique pour la réalisation de Listes rouges régionales des espèces menacées - Méthodologie de l’UICN & démarche d’élaboration. Seconde édition. Paris, France.