-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #97 from inbo/120_zoogdieren
120 zoogdieren
- Loading branch information
Showing
3 changed files
with
1,361 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,232 @@ | ||
--- | ||
params: | ||
hoofdstuk: "120_zoogdieren" | ||
knit: (function(inputFile, ...) { | ||
rmarkdown::render(inputFile, | ||
output_dir = paste0(rmarkdown::yaml_front_matter(inputFile)$params$hoofdstuk, "/output"))}) | ||
title: "MONEOS zoogdieren data" | ||
output: | ||
bookdown::html_document2: | ||
toc: true | ||
toc_float: true | ||
editor_options: | ||
chunk_output_type: console | ||
--- | ||
|
||
```{r setup, include=FALSE} | ||
knitr::opts_chunk$set(echo = FALSE, error=FALSE, warning=FALSE, message=FALSE, cache=FALSE) | ||
options(knitr.kable.NA = '') | ||
``` | ||
|
||
```{r libraries} | ||
library(tidyverse) | ||
library(rprojroot) | ||
library(readxl) | ||
library(lubridate) | ||
library(kableExtra) | ||
``` | ||
|
||
```{r pad} | ||
# inlezen van variabelen | ||
# pad naar data : pad_data | ||
# pad naar tabellen : pad_tabellen | ||
# pad naar figuren : pad_figuren | ||
source(find_root_file("../pad.R", criterion = is_rstudio_project)) | ||
pad_data <- maak_pad(params$hoofdstuk, "data") | ||
pad_figuren <- maak_pad(params$hoofdstuk, "figuren") | ||
pad_tabellen <- maak_pad(params$hoofdstuk, "tabellen") | ||
``` | ||
|
||
```{r data} | ||
pad_data | ||
(files <- list.files(pad_data, full.names = TRUE, )) | ||
(rawfiles2024 <- files[str_detect(files, "xlsx")]) | ||
# two tables delivered from waarningen.be, one with standard data, one with for which observer had to give consent | ||
# read the xlsx files | ||
zoogdier_data <- | ||
map(rawfiles2024, read_xlsx) | ||
# check whether files have same structure | ||
ncol(zoogdier_data[[1]]) == ncol(zoogdier_data[[2]]) # same number of columns | ||
names(zoogdier_data[[1]]) == names(zoogdier_data[[2]]) # same column names | ||
# combine list items to one tibble | ||
zoogdier_data <- | ||
zoogdier_data %>% | ||
list_rbind() | ||
``` | ||
|
||
# Soorten in aangeleverde data | ||
|
||
In de dataset zitten waarnemingen van 5 soorten en één verzamelsoort (zeehond onbekend). | ||
|
||
```{r soorten} | ||
zoogdier_data %>% | ||
group_by(Soort = naam_nl) %>% | ||
summarise() %>% | ||
kbl(caption = "Soorten in dataset") %>% | ||
kable_styling(full_width = FALSE, position = "left") | ||
``` | ||
|
||
# Jaren in aangeleverde data | ||
|
||
De dataset bevat alle waarnemingen uit de periode 2010- 2023. | ||
|
||
```{r jaren} | ||
table(year(zoogdier_data$datum)) | ||
``` | ||
|
||
```{r jarensoort} | ||
table(year(zoogdier_data$datum), zoogdier_data$naam_nl) %>% | ||
kable(caption = "Aantal waarnemingen per jaar per soort") %>% | ||
kableExtra::kable_paper() | ||
``` | ||
|
||
# Gedrag in aangeleverde data | ||
|
||
Tot 2017 of 2018 werden waarnemingen van sporen (ook) als gedrag ingegeven. Vanaf 2019 gebeurt dit niet meer. Meerderheid van waarnemingen heeft gedrag "ter plaatse", dit is de default in de mobiele app. | ||
|
||
```{r gedrag} | ||
zoogdier_data %>% | ||
count(gedrag) %>% | ||
knitr::kable(caption = "Gedrag in dataset") %>% | ||
kable_styling(full_width = FALSE, position = "left") | ||
``` | ||
|
||
```{r gedrag per jaar} | ||
zoogdier_data %>% | ||
count(gedrag, Jaar = year(datum)) %>% | ||
spread(key = Jaar, value = n) %>% | ||
knitr::kable(caption = "Gedrag per jaar in dataset") %>% | ||
kable_styling() | ||
``` | ||
|
||
# Methode in aangeleverde data | ||
|
||
Tot 2017 werd waarnemingsmethode in de overgrote meerderheid van de waarneming niet vermeld (NA). Andere waarnemingsmethodes werden amper ingevuld. Vanaf 2017 neemt het aandeel van waarnemingen waarbij de waarnemingsmethode is gespecificeerd toe. De categorie "onbekend" blijft wel een aanzienlijk aandeel innemen. | ||
|
||
```{r methode} | ||
zoogdier_data %>% | ||
count(methode) %>% | ||
knitr::kable(caption = "Methode in dataset") %>% | ||
kable_styling(full_width = FALSE, position = "left") | ||
``` | ||
|
||
```{r methode per jaar} | ||
zoogdier_data %>% | ||
count(methode, Jaar = year(datum)) %>% | ||
spread(key = Jaar, value = n) %>% | ||
knitr::kable(caption = "Methode per jaar in dataset") %>% | ||
kable_styling() | ||
``` | ||
|
||
# Combinatie gedrag - methode | ||
|
||
|
||
Analyse is niet makkelijk voor bever. Combinatie gedrag - methode is niet echt logisch voor deze soort. Bv. de categorie gedrag "(nabij) nest/burcht" kan zowel de aanwezigheid van een burcht betekenen als een zichtwaarneming van een induvidu bij de burcht. Bij gedrag bestaat een categorie bezet nest en bij methode bestaat een categorie "verlaten nest". Wij gebruiken het als zichtwaarnemingen indien methode niet aangegevens wordt dat het om sporen of een burcht gaat (zie 20_zoogdieren_analyse.Rmd). | ||
|
||
```{r gedrag-methode} | ||
zoogdier_data %>% | ||
count(gedrag, methode) %>% | ||
knitr::kable(caption = "Combinatie Gedrag-Methode in dataset") %>% | ||
kable_styling(full_width = FALSE, position = "left") | ||
``` | ||
|
||
```{r gedrag-methode-bever} | ||
zoogdier_data %>% | ||
filter(str_detect(naam_nl, "Bever")) %>% | ||
count(gedrag, methode) %>% | ||
knitr::kable(caption = "Combinatie Gedrag-Methode voor bever") %>% | ||
kable_styling(full_width = FALSE, position = "left") | ||
``` | ||
|
||
|
||
```{r gedrag-methode-nonspec} | ||
zoogdier_data %>% | ||
filter(str_detect(naam_nl, "Bever"), | ||
(gedrag == "overige" & is.na(methode))| | ||
(gedrag == "ter plaatse" & is.na(methode))| | ||
(gedrag == "ter plaatse" & methode == "onbekend") | ||
) %>% | ||
count(gedrag, methode, jaar = year(datum)) %>% | ||
knitr::kable(caption = ) %>% | ||
kable_styling(full_width = FALSE, position = "left") | ||
``` | ||
|
||
|
||
Er zijn `r nrow(zoogdier_data[zoogdier_data$naam_nl == "Europese Bever" & zoogdier_data$gedrag == "overige" & is.na(zoogdier_data$methode),]) + nrow(zoogdier_data[zoogdier_data$naam_nl == "Europese Bever" & zoogdier_data$gedrag == "ter plaatse" & is.na(zoogdier_data$methode),])` waarnemingen van bever zonder specificatie (combinaties (gedrag = "overige" en methode = na), (gedrag = "ter plaatse" en methode = na) op een totaal van `r nrow(zoogdier_data[,2] == "Europese Bever")` waarnemingen. Gedrag = "ter plaatse" is de standaard instelling in ObsMap. Dit kan dus betekenen da het dier ter plaatse bleef maar ook dat het veld gedrag door de waarnemer niet werd ingevuld. Na 2017 komt de combinatie gedrag = "ter plaatse" en methode = na niet meer voor omdat een waarde voor methode moest worden ingevoerd, de standaardwaarde is vanaf toen "onbekend". | ||
|
||
```{r gedrag-methode-jaar} | ||
zoogdier_data %>% | ||
count(gedrag, methode, Jaar = year(datum)) %>% | ||
spread(key = Jaar, value = n) %>% | ||
knitr::kable() %>% | ||
kable_styling() | ||
``` | ||
|
||
<br/> | ||
|
||
# Status | ||
|
||
De meeste waarnemingen zijn op één of andere wijze gevalideerd (`r round(sum(str_detect(zoogdier_data$status, "Goed"))/count(zoogdier_data)*100, 0)` %).\ | ||
`r round(sum(zoogdier_data$status == "Onbehandeld")/count(zoogdier_data)*100, 0)` % van waarnemingen zijn niet gevalideerd, `r round(sum(str_detect(zoogdier_data$status, "Niet"))/count(zoogdier_data)*100, 1)` % van de waarnemingen zijn gecategoriseerd als "Niet te beoordelen". | ||
|
||
Als we dit per soort bekeken valt op dat voor bever, otter (en bruinvis) een groot deel van de waarnemingen gevalideerd zijn. Voor gewone en grijze zeehond en 'zeehond onbekend' is (sinds 2016) een aanzienlijk deel van de waarnemingen onbehandeld. Dit geldt ook voor alle waarnemingen van bruinvis ná 2015, maar dat zijn er erg weinig. Gebrek aan goed bewijsmateriaal van deze laatste soorten is een mogelijke reden hiervoor, maar ook mindere aandacht van de personen die moeten valideren is een mogelijke reden, zeker gezien ook bij 'zeehond onbekend' het overgrote deel van de waarnemingen onbehandeld is. | ||
<br/> | ||
|
||
```{r status} | ||
zoogdier_data %>% | ||
count(status) %>% | ||
knitr::kable(caption = "Validatiestatus van de waarnemingen (totaal aantal in de dataset).") %>% | ||
kable_styling(full_width = FALSE, position = "left") | ||
``` | ||
<br/> | ||
|
||
```{r} | ||
zoogdier_data %>% | ||
count(status, Jaar = year(datum)) %>% | ||
spread(key = Jaar, value = n) %>% | ||
knitr::kable(caption = "Validatiestatus van de waarnemingen (totaal aantal per jaar).") %>% | ||
kable_styling(position = "left") | ||
``` | ||
<br/> | ||
|
||
|
||
```{r} | ||
zoogdier_data %>% | ||
mutate(status2 = case_when(str_detect(status, "Goedg") ~ "Goedgekeurd", | ||
TRUE ~ status)) %>% | ||
count(status2, naam_nl, Jaar = year(datum)) %>% | ||
ggplot(aes(x = Jaar, y = n, color = status2)) + | ||
geom_point() + | ||
labs(x ="", y = "Aantal") + | ||
scale_x_continuous(breaks = seq(2010, 2025, by = 5), | ||
minor_breaks = seq(2010, 2025, by = 1)) + | ||
scale_y_continuous(label = ~ scales::comma(.x, accuracy = 1)) + | ||
scale_color_manual(values = c("green", "red", "grey")) + | ||
facet_wrap(facets = ~naam_nl, scales = "free") | ||
``` | ||
<br/> | ||
<br/> | ||
<br/> | ||
|
||
data gecreëerd op `r Sys.time()` | ||
|
||
data weggeschreven naar `r paste0(pad_data, "template_data.csv")` | ||
|
||
```{r wegschrijven-data} | ||
zoogdier_data %>% | ||
write_csv(paste0(pad_data, "zoogdier_data_2010_2023.csv")) | ||
``` |
Oops, something went wrong.