Ce tutoriel est un guide pour obtenir, à partir de la base Aspe, les résultats suivants :
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_'.
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()
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()
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)
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"))
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)
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 :
dataframe issu des étapes précédentesespeces = c("CAS", "CAX", "CAG"))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").gg_histo_longueur(indiv_df = data_ind,
operation = 6313,
especes = "GOU",
type_longueur = "Fourche",
n_intervalles = 25)
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.
# 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)