Statistiques descriptives

Toutes nos données concernent uniquement la Bretagne continentale.

1. Différentes répartitions

Nous remarquons toujours beaucoup de données de VisioNature dont la technique d’observation est inconnue.

GeoNature observe principalement des indices de rodents et de carnivores. Les lagomorphes sont peu remarqués avec les indices, comparés aux autres dans VisioNature et GeoNature.

Répartition des ordres

Dans la BDD GeoNature, principalement des carnivores, puis relativement uniformément les 4 autres ordres. C’est peut-être dû au fort intérêt de GMB pour la loutre, mais ce n’est pas tant le cas que ça (voir figure de la répartition des ordres sans le loutres)

Nous nous sommes demandés à quoi ressemblerait la répartition des ordres sans la loutre car elle est une espèce dont le GMB se préoccupe beaucoup. Ca ne change pas drastiquement la distribution.

VisioN_FB %>%
  count(nom_vernaculaire, ordre, sort = TRUE) %>%
  ggplot(aes(x = reorder(nom_vernaculaire, n), y = n, fill = ordre)) +
  geom_col(fill = "grey30") +
  coord_flip() +
  facet_wrap(~ ordre, scales = "free_y") +
  labs(
    title = "Répartition des espèces",
    subtitle = "VisioNature",
    y = "Nombre d'observations", x = "Nom vernaculaire"
  ) +
  scale_x_discrete(labels = label_wrap(40)) +
  theme_bw() +
  theme(
    axis.text.y = element_text(size = 8),
    strip.text = element_text(face = "bold"),
    plot.title = element_text(size = 16),
    plot.subtitle = element_text(size = 12)
  )

GeoN %>%
  count(nom_vernaculaire, ordre, sort = TRUE) %>%
  ggplot(aes(x = reorder(nom_vernaculaire, n), y = n, fill = ordre)) +
  geom_col(fill = "grey30") +
  coord_flip() +
  facet_wrap(~ ordre, scales = "free_y") +
  labs(
    title = "Répartition des espèces",
    subtitle = "GeoNature",
    y = "Nombre d'observations", x = "Nom vernaculaire"
  ) +
  scale_x_discrete(labels = label_wrap(40)) +
  theme_bw() +
  theme(
    axis.text.y = element_text(size = 8),
    strip.text = element_text(face = "bold"),
    plot.title = element_text(size = 16),
    plot.subtitle = element_text(size = 12)
  )

Nous remarquons une inversion entre les lapins et les lièvres entre les deux bases de données. Peut-être lié a la période pendant laquelle les BDD sont remplies.

2. Description temporelle des bases de données

VisioN_FB%>%
  ggplot(aes(date_debut))+
  labs(title="Fréquence des observations dans le temps",
       subtitle="VisioNature")+ 
  facet_grid(ordre ~ .)+
  theme_bw()+
  geom_line(stat="density")

GeoN%>%
  ggplot(aes(date_debut))+
  labs(title="Fréquence des observations dans le temps",
       subtitle="GeoNature")+ 
  facet_grid(ordre ~ .)+
  theme_bw()+
  geom_line(stat="density")

VisioNature a très peu de données avant 2010 et GeoNature avant 1990.

Nous coupons à 2005 pour mieux observer la répartition de nos données.

VisioN_FB%>%
  filter(date_debut > as.Date("2005-01-01"))%>%
  ggplot(aes(date_debut))+
  labs(title="Fréquence des observations dans le temps depuis 2005",
       subtitle="VisioNature")+ 
  facet_grid(ordre ~ .)+
  theme_bw()+
  geom_line(stat="density")

GeoN%>%
  filter(date_debut > as.Date("2005-01-01"))%>%
  ggplot(aes(date_debut))+
  labs(title="Fréquence des observations dans le temps depuis 2005",
       subtitle="GeoNature")+ 
  facet_grid(ordre ~ .)+
  theme_bw()+
  geom_line(stat="density")

J’aurais focalisé l’étude sur la période [2010 - maintenant] pour les séries temporelles, car avant il y a peu de données.

GéoNature a surtout des données entre 2010 et 2015, et VisioNature après 2015.

Peut-être que ça pourrait être intéressant de regarder par rapport au nombre d’observateurs? Si il y a plus d’observateurs, alors peut-être qu’il y aura plus d’observations. Peut-être qu’on pourra pondérer là dessus?

La plupart des observations ne contiennent qu’un animal mais certains en contiennent plusieurs.

Il faudrait peut-être les prendre en compte, mais les données avec beaucoup d’animaux observés (ex: 400 obs d’un coup) risquent de causer des problèmes pour créer un modèle.

Ensuite, on a essayer d’observer les proportions d’espèces dans le temps. Dans “other” il y a toutes les espèces qui représentent moins de 3% des observations de la période.


Nous remarquons que depuis les années 1980, il semble avoir de moins en moins de “other” donc d’espèces peu présentes. Les principales espèces sont peut être de plus en plus dominantes.

Nous remarquons aussi que GeoNature a des données assez differentes pour [2000-2005) que pour les autres périodes avec beaucoup de rats bruns. Nous n’observons pas quelque chose de similaire chez VisioNature.

3. Répresentation cartographique des données

# Carte bretagne
setwd("~/work/AnalyseDonneesOpportunisteGMB/donnees/DepartementsOuest")
carte_bretagne <- st_read("LIM_ADM_DepartementsOuest.shp")
## Reading layer `LIM_ADM_DepartementsOuest' from data source 
##   `/home/onyxia/work/AnalyseDonneesOpportunisteGMB/donnees/DepartementsOuest/LIM_ADM_DepartementsOuest.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 5 features and 5 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 99074.43 ymin: 6647488 xmax: 408042.6 ymax: 6885958
## Projected CRS: RGF93 v1 / Lambert-93
carte_bretagne <- st_set_crs(carte_bretagne, 2154)
carte_bretagne <- st_transform(carte_bretagne, 4326)


# GeoNature
GeoN_sf <- st_as_sf(GeoN, 
                  coords = c("x_centroid_4326", "y_centroid_4326"), 
                  crs = 4326)
grid_sf <- st_sf(geometry = st_make_grid(carte_bretagne, 
                                         cellsize = c(0.12, 0.09))
              )
grid_sf$density <- lengths(st_intersects(grid_sf, GeoN_sf))
grid_sf <- st_intersection(grid_sf, carte_bretagne)
## Warning: attribute variables are assumed to be spatially constant throughout
## all geometries
ggplot() +
  geom_sf(data = carte_bretagne) + 
  labs(title = "Densité des observations en bretagne",
       subtitle = "GeoNature") +
  geom_sf(data = grid_sf, aes(fill = density)) +
  scale_fill_gradient(low="gray97", high="gray15") +
  theme_bw()

# VisioNature
VisioN_FB_sf <- st_as_sf(VisioN_FB, 
                         coords = c("x_centroid_4326", "y_centroid_4326"), 
                         crs = 4326)
grid_sf <- st_sf(geometry = st_make_grid(carte_bretagne, 
                                         cellsize = c(0.12, 0.09)))
grid_sf$density <- lengths(st_intersects(grid_sf, VisioN_FB_sf))
grid_sf <- st_intersection(grid_sf, carte_bretagne)
## Warning: attribute variables are assumed to be spatially constant throughout
## all geometries
ggplot() +
  geom_sf(data = carte_bretagne) + 
  labs(title = "Densité des observations en bretagne",
       subtitle = "VisioNature") +
  geom_sf(data = grid_sf, aes(fill = density)) +
  scale_fill_gradient(low="grey97", high="gray15") +
  theme_bw()

Il semble y avoir un lieu avec une forte densité proche de Sizun dans la BDD GeoNature. On remarque aussi que les observations ont lieu surtout au nord-ouest de la Bretagne et au sud entre le Morbihan et l’Ille-et-Vilaine.

Dans VisioNature, on a deux points avec une très forte densité sont probablement dues à nos deux principaux contributeurs (voir la partie 4), nous décidons de les supprimer pour vérifier.

VisioN_FB_modif <- VisioN_FB%>%
  mutate(observateurs = toupper(observateurs))%>%
  filter(!observateurs %in% c("BELLIER DANIEL", "CHAPUIS MARTINE"))
  
VisioN_FB_sf <- st_as_sf(VisioN_FB_modif, 
                      coords = c("x_centroid_4326", "y_centroid_4326"), 
                      crs = 4326)
grid_sf <- st_sf(geometry = st_make_grid(carte_bretagne, 
                                         cellsize = c(0.12, 0.09))
)
grid_sf$density <- lengths(st_intersects(grid_sf, VisioN_FB_sf))
grid_sf <- st_intersection(grid_sf, carte_bretagne)
## Warning: attribute variables are assumed to be spatially constant throughout
## all geometries
ggplot() +
  geom_sf(data = carte_bretagne) + 
  labs(title = "Densité des observations en bretagne",
       subtitle = "VisioNature, sans les deux principaux observateurs") +
  geom_sf(data = grid_sf, aes(fill = density)) +
  scale_fill_gradient(low="grey97", high="gray15") +
  theme_bw()

# Carte bretagne
setwd("~/work/AnalyseDonneesOpportunisteGMB/donnees/DepartementsOuest")
carte_bretagne <- st_read("LIM_ADM_DepartementsOuest.shp")
## Reading layer `LIM_ADM_DepartementsOuest' from data source 
##   `/home/onyxia/work/AnalyseDonneesOpportunisteGMB/donnees/DepartementsOuest/LIM_ADM_DepartementsOuest.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 5 features and 5 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 99074.43 ymin: 6647488 xmax: 408042.6 ymax: 6885958
## Projected CRS: RGF93 v1 / Lambert-93
carte_bretagne <- st_set_crs(carte_bretagne, 2154)
carte_bretagne <- st_transform(carte_bretagne, 4326)

# Données geographique
VisioN_sf <- VisioN_FB %>% 
  dplyr::select(x_centroid_4326,
                y_centroid_4326,
                ordre,
                date_debut) %>% 
  sf::st_as_sf(coords = c("x_centroid_4326", "y_centroid_4326"),
               crs = sf::st_crs(4326))

GeoN_sf <- GeoN %>%
  dplyr::select(x_centroid_4326,
                y_centroid_4326,
                ordre,
                date_debut) %>% 
  sf::st_as_sf(coords = c("x_centroid_4326", "y_centroid_4326"),
               crs = sf::st_crs(4326))

ordres <- unique(VisioN_sf$ordre)

grid <- st_make_grid(carte_bretagne, cellsize = c(0.12, 0.09)) %>%
  st_sf() %>%
  st_set_crs(4326)

# VisioNature
grid_list <- map(ordres, function(o) {
  vis_ord <- VisioN_sf %>% filter(ordre == o)
  grid_tmp <- grid
  grid_tmp$density <- lengths(st_intersects(grid_tmp, vis_ord))
  grid_tmp$ordre <- o
  grid_tmp
})
grid_sf <- bind_rows(grid_list)
grid_sf <- st_intersection(grid_sf, carte_bretagne)
## Warning: attribute variables are assumed to be spatially constant throughout
## all geometries
ggplot() +
  geom_sf(data = carte_bretagne) + 
  labs(title = "Densité des observations en bretagne selon les ordres",
       subtitle = "VisioNature") +
  geom_sf(data = grid_sf, aes(fill = density), color = NA) +
  scale_fill_gradient(low="gray90", high="gray15") +
  theme_bw() +
  facet_grid(. ~ ordre)

# GeoNature
grid_list <- map(ordres, function(o) {
  vis_ord <- GeoN_sf %>% filter(ordre == o)
  grid_tmp <- grid
  grid_tmp$density <- lengths(st_intersects(grid_tmp, vis_ord))
  grid_tmp$ordre <- o
  grid_tmp
})
grid_sf <- bind_rows(grid_list)
grid_sf <- st_intersection(grid_sf, carte_bretagne)
## Warning: attribute variables are assumed to be spatially constant throughout
## all geometries
ggplot() +
  geom_sf(data = carte_bretagne) + 
  labs(title = "Densité des observations en bretagne selon les ordres",
       subtitle = "GeoNature") +
  geom_sf(data = grid_sf, aes(fill = density), color = NA) +
  scale_fill_gradient(low="gray90", high="gray15") +
  theme_bw() +
  facet_grid(. ~ ordre)

On ne voit pas grand chose sur la carte de VisioNature à part les 2 principaux observateurs.. Concernant la base de données GeoNature, on dirait que les espèces ont un peu près la même répartition en Bretagne (nord Finistere et Côte d’Armor et sud Ille-et-Vilaine et Morbihan)

Nous prenons la base de données avec toutes les données et je selectionne 40 000 ou 50 000 données avec les proportions.

Pour info, la graine aléatoire est figée a 12345.

graph_ordre_tranche_annee <- function(ordre_voulu){
  # Creation de la BDD
  ordre_data <- Total_B %>% filter(ordre == ordre_voulu)
  bdd_props <- prop.table(table(ordre_data$bdd))
  n_bdd1 <- round(5000 * bdd_props[1])
  n_bdd2 <- 5000 - n_bdd1
  bdd1 <- ordre_data %>% 
    filter(bdd == "GeoN") %>% 
    sample_n(min(n_bdd1, n()))
  bdd2 <- ordre_data %>% 
    filter(bdd == "VisioN_FB") %>% 
    sample_n(min(n_bdd2, n()))
  
  ordre_graph <- bind_rows(bdd1, bdd2) %>%
    mutate(
      grp_date = case_when(
        date_debut >= as.Date("2010-01-01") & date_debut <= as.Date("2014-12-31") ~ "1. Entre 2010 et 2015",
        date_debut >= as.Date("2015-01-01") & date_debut <= as.Date("2019-12-31") ~ "2. Entre 2015 et 2020",
        date_debut > as.Date("2019-12-31") ~ "3. Après 2020",
        TRUE ~ NA_character_
      )
    ) %>%
    filter(date_debut > as.Date("2010-01-01")) %>%
    sample_frac(1)
  
  # Transformation pour des données de la carte
  carte_ordre <- ordre_graph %>%
    dplyr::select(x_centroid_4326, y_centroid_4326, 
                  grp_date, ordre, date_debut) %>%
    sf::st_as_sf(coords = c("x_centroid_4326", "y_centroid_4326"),
                 crs = sf::st_crs(4326)) %>%
    filter(ordre == ordre_voulu)
  
  # Plot
  ggplot() +
    geom_sf(data = carte_bretagne) + 
    labs(
      title = paste("Carte des observations en Bretagne des", ordre_voulu),
      subtitle = "Toutes données"
    ) +
    geom_sf(data = carte_ordre, size = 0.01) +
    theme_bw() + 
    facet_grid(. ~ grp_date)
}

graph_ordre_tranche_annee("Carnivora")

graph_ordre_tranche_annee("Cetartiodactyla")

graph_ordre_tranche_annee("Eulipotyphla")

graph_ordre_tranche_annee("Lagomorpha")

graph_ordre_tranche_annee("Rodentia")

  On dirait que plus on avance dans les années, plus on retrouve d’individus aux sud de la Bretagne. Ceci peut être car nous avons plus de données de VisioNature au fil du temps qui provient d’ornithologues et les ornithologues sont souvent proches des littoraux.

4. Étude des principaux observateurs

Étudier les principaux observateurs peut être important parce qu’ils participent grandement au recueil des données donc un changement de leur comportement implique également un changement du comportement de la base de données.

Ils pourraient introduire des biais:
- pour un endroit du territoire, s’ils enregistent toujours des observations au même endroit
- pour une espece, s’ils sont intéressé par une espèce
- en enregistrant pendant une durée précise dans le temps

GeoN %>% 
  summarize(nb_observateurs = n_distinct(observateurs))
## # A tibble: 1 × 1
##   nb_observateurs
##             <int>
## 1            3092
VisioN_FB %>% 
  summarize(nb_observateurs = n_distinct(observateurs))
## # A tibble: 1 × 1
##   nb_observateurs
##             <int>
## 1            3624

Pour GeoNature, il y a en tout 2778 observateurs qui peuvent être une ou 2 personnes. Certains observateurs sont anonymes et sont attribués un code.

Pour VisioNature, il y a 3662 observateurs. 1813 des observations n’ont pas d’observateur attribué.

On transforme tous les noms en majuscule pour éviter des problèmes.

Nous cherchons les observateurs qui ont le plus contribué aux deux bases de données.

GeoN_summary <- GeoN %>%
  group_by(observateurs) %>%
  summarize(nbr_obs_obr = n()) %>%
  filter(nbr_obs_obr > 200) %>%
  arrange(nbr_obs_obr)

GeoN_summary$observateurs <- factor(GeoN_summary$observateurs,
                                    levels = GeoN_summary$observateurs)

VisioN_summary <- VisioN_FB %>%
  group_by(observateurs) %>%
  summarize(nbr_obs_obr = n()) %>%
  filter(nbr_obs_obr > 400) %>%
  arrange(nbr_obs_obr)

VisioN_summary$observateurs <- factor(VisioN_summary$observateurs,
                                      levels = VisioN_summary$observateurs)
GeoN_summary%>%
  ggplot(aes(x=observateurs, y=nbr_obs_obr)) +
  geom_point() + 
  geom_segment( aes(x=observateurs, xend=observateurs, 
                    y=0, yend=nbr_obs_obr))+
  coord_flip()+
  labs(title="Lollipop plot des principaux observateurs",
       subtitle="GeoNature")+
  theme_bw()

ggplot(VisioN_summary, aes(x=observateurs, y=nbr_obs_obr)) +
  geom_point() + 
  geom_segment( aes(x=observateurs, xend=observateurs, 
                    y=0, yend=nbr_obs_obr))+
  coord_flip()+
  labs(title="Lollipop plot des principaux observateurs",
       subtitle="VisioNature")+
  theme_bw()

Nous remarquons que nous avons des observateurs avec un très grand nombre d’observations comme attendu. Nous ne savons pas si deleted deleted est un observateur. Nous pouvons imaginer que c’est les observations de tous les membres qui ont supprimés leurs comptes.

Pour étudier facilement leur données, nous créons une fonction qui donne rapidement quelques graphiques.

stats_observateur <- function(nom_obs, bdd, carte){
  
  # Date
  p1 <- bdd %>%
    filter(observateurs == toupper(nom_obs),
           date_debut > as.Date("2010-01-01")) %>%
    ggplot(aes(date_debut))+
    labs(title="Répartition des dates",
         subtitle = paste("Données de ", toupper(nom_obs))) + 
    theme_bw()+
    geom_line(stat="density")+
    scale_x_date(
    breaks = seq(from = min(bdd$date_debut), 
                 to = max(bdd$date_debut), 
                 by = "2 years"),               
    labels = scales::label_date("%Y")
    )
  
  # Ordres
  p2 <- bdd %>%
    filter(observateurs == toupper(nom_obs)) %>%
    ggplot(aes(x = ordre)) +  
    geom_bar() + 
    labs(title = "Répartition des differents ordres", 
         subtitle = paste("Données de ", toupper(nom_obs))) +
    theme_bw()+
    theme(axis.text.x = element_text(angle = 30, hjust = 0.5, vjust = 0.5))
  
  # Carte
  geo_obsteur <- bdd %>% 
      filter(date_debut > as.Date("2010-01-01")) %>%
      filter(observateurs == toupper(nom_obs)) %>%
      dplyr::select(x_centroid_4326,
                    y_centroid_4326,
                    ordre,
                    date_debut) %>% 
      sf::st_as_sf(coords = c("x_centroid_4326", "y_centroid_4326"),
                   crs = sf::st_crs(4326))
  p3 <- ggplot() +
      geom_sf(data = carte) + 
      labs(title = "Carte des observations",
           subtitle = paste("Données de ", toupper(nom_obs))) +
      geom_sf(data = geo_obsteur, size=0.01) +
      theme_bw()
  

  # Affichage des plots
  p1 + p2 + p3
  }

setwd("~/work/AnalyseDonneesOpportunisteGMB/donnees/DepartementsOuest")
carte_bretagne <- st_read("LIM_ADM_DepartementsOuest.shp")
## Reading layer `LIM_ADM_DepartementsOuest' from data source 
##   `/home/onyxia/work/AnalyseDonneesOpportunisteGMB/donnees/DepartementsOuest/LIM_ADM_DepartementsOuest.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 5 features and 5 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: 99074.43 ymin: 6647488 xmax: 408042.6 ymax: 6885958
## Projected CRS: RGF93 v1 / Lambert-93
carte_bretagne <- st_set_crs(carte_bretagne, 2154)
carte_bretagne <- st_transform(carte_bretagne, 4326)

stats_observateur(nom_obs="BELLIER DANIEL", 
                  bdd=VisioN_FB, 
                  carte=carte_bretagne)

stats_observateur(nom_obs="CHAPUIS MARTINE", 
                  bdd=VisioN_FB, 
                  carte=carte_bretagne)

stats_observateur(nom_obs="SéITé FRANçOIS", 
                  bdd=VisioN_FB, 
                  carte=carte_bretagne)

stats_observateur(nom_obs="deleted deleted", 
                  bdd=VisioN_FB, 
                  carte=carte_bretagne)

stats_observateur(nom_obs="simonnet franck", 
                  bdd=GeoN, 
                  carte=carte_bretagne)

stats_observateur(nom_obs="le campion thomas", 
                  bdd=GeoN, 
                  carte=carte_bretagne)

Nous remarquons que:
- BELLIER DANIEL observe beaucoup de rongeurs autour de Rennes.
- CHAPUIS MARTINE observe uniquement a un endroit précis.
- DELETED DELETED, semble être surtout dans le finistère ce qui est étonnant si ce sont plusieurs personnes.