batplotR
batplotR
ist eine R Package die im Rahmen eines Zivildiensteinsatzes bei der Stiftung Fledermausschutz Schweiz entwickelt wurde. Sie wurde für die Darstellung von mit BatScope ausgewerteten Bioakustikdaten entwickelt und erlaubt es kurze (d.h. über eine Nacht) und lange (d.h. mehrere Nächte) Beobachtungsreihen darzustellen. Ausgangspunkt ist in jedem Fall ein .xlsx
-Exportfile von Batscope ( getestet , mit BatScope v.3.1.6)
Die Package ist GPL-3 lizenziert und auf GitHub gehostet, kann also beliebig geforkt, weitergegeben und verändert werden.
Die folgenden Befehle sind auch als R Dokument (batplotr_anleitung.R
) zusammengefasst auf der Dropbox!
batplotR
kann direkt von GitHub installiert werden, Voraussetzung ist die Package devtools
die über CRAN erhältlich ist und wie folgt installiert werden kann:
install.packages(c("devtools"),dependencies=TRUE)
danach kann batplotR direkt von GitHub installiert werden (es werden auch verschiedene andere Packages installiert, die von batplotR benötigt werden):
devtools::install_github("dcangst/batplotr",dependencies=TRUE)
mit batplotR
visualisieren Sie ihre BatScope-Projekte in 3 einfachen Schritten!
et voila!
Zuerst wird die Package geladen und das Arbeitsverzeichniss1 gesetzt.
library(batplotr)
setwd("/Users/daniel/Dropbox/Bioakustik Austausch Manu Daniel")
jetzt können die Daten eingelesen werden. Dafür wird der Befel readBatscopeXLSX
verwendet.
daten <- readBatscopeXLSX(
species_col_name = "AutoClass1",
quality_col_name = "AutoClass1Qual",
quality_threshold = 0.8
)
##
## /Users/Daniel/Dropbox/Bioakustik Austausch Manu Daniel/Export_2015-04-14_11.50.35_PT.xlsx
## wird eingelesen, kann eine Weile dauern...
## Summary of AutoClass1Qual
##
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.306 0.591 0.686 0.696 0.798 1.000 9552
##
## 'Discarded 27350 of 33199 sequences (82.382%); 5849 remaining
Der Befehl ruft ein ‘Datei öffnen…’ Dialog auf bei dem das .xlsx
-file vom BatScope export ausgewählt werden muss. Ausserdem werden noch die folgenden Parameter benötigt:
Parameter | Was? | Standardwert |
---|---|---|
path | Pfad zum .xlsx -file |
file.choose()2 |
species_col_name | Spaltenname Spezies | "AutoClass1" |
quality_col_name | Spaltenname Qualität | "AutoClass1Qual" |
quality_threshold | minimale Qualität der Spezieszuordnung | 0.8 |
(Mit R 3.1.3 wird ein Fehler in der Konsole ausgeworfen. Dieser kann ignoriert werden)
Die eingelesenen Daten werden unter dem Namen daten
abgelegt (mit Hilfe der Zuweisung <-
). Wie der Tabelle zu entnehmen ist, hätten in diesem Fall die Daten auch mit readBatscopeXLSX()
alleine eingelesen werden können, da alle Standardwerte verwendet wurden.
Es empfiehlt sich den Import mit der Funktion str(daten)
oder head(daten)
anzuschauen. Als nächstes werden die Daten nach Standorten und Tagen in kurze Zeitabschnitte zusammengefasst (sogenanntes ‘binning’).
Um die Daten zu visualisieren werden die einzelnen Sequenzen in kurzen Zeitabschnitten zusammengefasst. Die Länge dieser Zeitabschnitte kann vom Benutzer eingestellt werden. Ausserdem werden hier die Zeiten des Sonnenauf und -untergangs berechnet (nach Algorithmen der NOAA). Bei grossen Datensätzen kann dieser Befehl eine kleine Weile dauern.
Für die Zusammenfassung wird der Befehl sumBatscopeData
ausgeführt:
daten_sum <- sumBatscopeData(
daten,
bin_length=5,
progress="text"
)
## Zusammenfassung nach Tag, Project, Spezies und Bins...
## Zusammenfassung Total aller species...
## GPS Koordinaten bearbeiten...
## Koordinaten von Batlogger verwendet.
## ProjectName lat long
## 1 PT 2014 Limmattal 47.38614 8.517271
## 2 PT 2014 See 47.38596 8.517406
## 3 PT 2014 Uetliberg 47.38582 8.517228
## 4 PT 2014 Waidberg 47.38631 8.517434
## Berechne Sonnenauf und -untergangszeiten...
Der Befehl benötigt die folgenden Parameter:
Parameter | Was? | Standardwert |
---|---|---|
data_r | data.frame generiert mit `readBatscopeXLSX’ |
- |
bin_width | Zeitspanne in min über die zusammengefasst wird (binning) | 5 |
lat | Breitengrad (N-S in Decimalgrad) der Station. Wenn NULL werden die GPS Koordinaten des BatLoggers verwendet |
NULL |
long | Längengrad (O-W in Decimalgrad) der Station. Wenn NULL werden die GPS Koordinaten des BatLoggers verwendet |
NULL |
progress | Art der Fortschrittssanzeige. "none" für keine. |
"text" |
Die eingelesenen Daten werden unter dem Namen daten_sum
als data.frame abgelegt (mithilfe der Zuweisung <-
). Wie der Tabelle zu entnehmen ist, hätten in diesem Fall die Daten auch mit sumBatscopeData(daten)
alleine eingelesen werden können, da alle Standardwerte verwendet wurden. Mit str(daten_sum)
erhält man einen kurzen Überblick über die Daten
str(daten_sum)
## 'data.frame': 4329 obs. of 13 variables:
## $ ProjectName: Factor w/ 4 levels "PT 2014 Limmattal",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ SurveyDate : POSIXct, format: "2014-03-07" "2014-03-07" ...
## $ species : Factor w/ 23 levels "all","Eptesicus nilssonii",..: 2 13 15 15 15 15 15 15 14 14 ...
## $ bins_factor: Factor w/ 16896 levels "2014-03-07 13:00:00",..: 76 100 72 73 77 112 113 132 11766 11801 ...
## $ n_events : int 1 1 3 3 1 1 1 1 1 1 ...
## $ sum_nCalls : num 1 1 161 113 54 1 1 1 5 16 ...
## $ meanT_BL : num 9 6 12 12 9 5 4 3 15 14 ...
## $ bins : POSIXct, format: "2014-03-07 19:15:00" "2014-03-07 21:15:00" ...
## $ lat : num 47.4 47.4 47.4 47.4 47.4 ...
## $ long : num 8.52 8.52 8.52 8.52 8.52 ...
## $ sunset : POSIXct, format: "2014-03-07 18:19:32" "2014-03-07 18:19:32" ...
## $ sunrise : POSIXct, format: "2014-03-08 06:53:13" "2014-03-08 06:53:13" ...
## $ bin_length : num 5 5 5 5 5 5 5 5 5 5 ...
Mit den Daten kann natürlich mit den vielen Tools von R weitergearbeitet werden. Im folgenden ein Beispiel das die Package plyr
benützt um die Summe von Events (d.h. Anzahl Sequenzen) an den verschiedenen Standorten pro Tag auszurechnen (aus Platzgründen werden hier nur die ersten 6 Zeilen angezeigt)
ddply(daten_sum,.(ProjectName,SurveyDate),summarize,n_events_day=sum(n_events))
## ProjectName SurveyDate n_events_day
## 1 PT 2014 Limmattal 2014-03-07 24
## 2 PT 2014 Limmattal 2014-03-11 28
## 3 PT 2014 Limmattal 2014-03-17 18
## 4 PT 2014 Limmattal 2014-03-20 46
## 5 PT 2014 Limmattal 2014-03-28 144
## 6 PT 2014 Limmattal 2014-04-17 24
Das Objekt daten_sum
, generiert mit sumBatscopeData
, kann jetzt auch mit den beiden Plotfunktionen nightPlot
und periodPlot
verwendet werden.
Die Funktion nightPlot
generiert ein ggplot Objekt und hat folgende Parameter:
Parameter | Was? | Standardwert |
---|---|---|
plotData | data.frame generiert mit `sumBatscopeData’ |
- |
day | Tag(e) die geplottet werden | erster Tag im Datensatz |
sel_species | Name der Spezies oder Namen von mehreren Spezies als Vector oder "every" für alle Spezies einzeln oder "all" für die Summe aller Spezies |
"every" |
x_limits | höchster und tiefster Wert der x-Achse (ein Vector im POSIXct Format), NULL für automatisch (halbe Stunde vor Sonnenuntergang bis halbe Stunde nach Sonnenuntergang) |
NULL |
y_limits | höchster und tiefster Wert der y-Achse (ein numerischer Vector), NULL für automatisch |
NULL |
plot_T | soll der Temperaturverlauf geplottet werden? TRUE / FALSE | FALSE |
… | weitere Parameter, siehe ?nightPlot für Details |
Die Standardwerte generieren in der Regel einen guten ersten Eindruck der Daten:
nightPlot(daten_sum)
Im folgenden einige Beispiele für die verschiedenen Optionen:
Datumsauswahl
mit dem R-Befehl unique
können zunächst mal die Daten angezeigt werden, die im Datensatz vorhanden sind. Danach kann eines der Daten als Argument an nightPlot
übergeben werden:
unique(daten_sum$SurveyDate)
nightPlot(daten_sum,day="2014-07-24")
da unique(daten_sum$Survey)
ein Vector zurückgibt kann ein Element davon auch gleich an nightPlot
übergeben werden:
nightPlot(daten_sum,day=unique(daten_sum$SurveyDate)[24])
es können auch mehrere Tage angegeben werden (sollten aufeinanderfolgend sein):
nightPlot(daten_sum,day=c("2014-08-23","2014-08-24"))
Auswahl einer/mehrerer Spezies
ähnlich wie die Daten können auch die Spezies ausgewählt werden.
nightPlot(daten_sum,"2014-07-24",sel_species="Pipistrellus nathusii")
nightPlot(daten_sum,"2014-07-24",sel_species=unique(daten_sum$species)[3])
Es können auch mehrere Spezies ausgewählt werden:
nightPlot(daten_sum,day="2014-07-24",sel_species=c("Pipistrellus nathusii","Pipistrellus kuhlii"))
nightPlot(daten_sum,day="2014-07-24",sel_species=unique(daten_sum$species)[3:4])
Darstellung von nur einem Standort
Um nur einen der Standorte im Datensatz anzuzeigen müssen zuerst die Daten eingschränkt werden:
unique(daten_sum$ProjectName)
daten_sum_StO1 <- subset(daten_sum,ProjectName=="PT 2014 Waidberg")
# oder direkt:
daten_sum_StO1 <- subset(daten_sum,ProjectName==unique(daten_sum$ProjectName)[4])
nightPlot(daten_sum_StO1, day="2014-07-24")
x_limits & y_limits
um die Achsen anzupassen werden die Werte x_limits
& y_limits
gesetzt:
nightPlot(daten_sum_StO1, day=c("2014-08-23","2014-08-24"), x_limits=as.POSIXct(c("2014-08-23 16:00","2014-08-25 10:00")), y_limits=c(0,12))
Ein Beispiel mit vielen Optionen:
daten_sum_StO1 <- subset(daten_sum,ProjectName==unique(daten_sum$ProjectName)[4])
nightPlot(daten_sum_StO1, day=c("2014-08-23","2014-08-24"),sel_species=unique(daten_sum_StO1$species)[c(1,2,4)], x_limits=as.POSIXct(c("2014-08-23 16:00","2014-08-25 10:00")), y_limits=c(0,12),plot_T=TRUE)
Die Funktion periodPlot
generiert ein ggplot Objekt und hat folgende Parameter und funktioniert im wesentlichen ähnlich wie nightPlot
Parameter | Was? | Standardwerte |
---|---|---|
plotData | data.frame generiert mit `sumBatscopeData’ |
- |
start_date | Beginn der Zeitperiode | Anfang des Jahres des ersten Datensatzes |
end_date | Beginn der Zeitperiode | Ende des Jahres des letzten Datensatzes |
sel_species | Name der Spezies oder Namen von mehreren Spezies als Vektor oder "every" für alle Spezies einzeln oder "all" für die Summe aller Spezies |
"every" |
x_limits | höchster und tiefster Wert der x-Achse (ein Vektor im POSIXct Format), NULL für automatisch (= start_date - end_date) |
NULL |
y_limits | höchster und tiefster Wert der y-Achse (ein Charakter oder POSIXct Vektor) mit Datum 1900-01-01 (abends) oder 1900-01-02 (morgens). NULL für automatisch. |
NULL |
Beispiel mit Standardwerten:
periodPlot(daten_sum)
## Plotting number of sequences over period:
## [1] 2014-01-01 CET--2015-01-01 CET
## Warning: Removed 360 rows containing missing values (geom_point).
## Warning: Removed 357 rows containing missing values (geom_point).
## Warning: Removed 363 rows containing missing values (geom_point).
## Warning: Removed 362 rows containing missing values (geom_point).
Die generierten Warnmeldungen hängen damit zusammen, das nicht für alle Tage alle Daten vorhanden sind.
periodPlot
-Beispiel mit einigen Optionen. Man beachte auch, das der Plot hier zuerst als ggplot
Objekt abgelegt wird und dann erst dargestellt wird.
plot1 <- periodPlot(daten_sum,start_date="2014-03-01",end_date="2014-11-01",sel_species=unique(daten_sum$species)[3:5],y_limits=c("1900-01-01 17:30","1900-01-02 08:30"))
## Plotting number of sequences over period:
## [1] 2014-03-01 CET--2014-11-01 CET
Die effektiv dargestellten Daten können dann dem generierten ggplot
Objekt entnommen werden:
head(plot1$data)
## ProjectName SurveyDate lat long sunset
## 1 PT 2014 Limmattal 2014-03-01 47.38614 8.517271 2014-03-01 18:10:39
## 2 PT 2014 Limmattal 2014-03-02 47.38614 8.517271 2014-03-02 18:12:09
## 3 PT 2014 Limmattal 2014-03-03 47.38614 8.517271 2014-03-03 18:13:38
## 4 PT 2014 Limmattal 2014-03-04 47.38614 8.517271 2014-03-04 18:15:07
## 5 PT 2014 Limmattal 2014-03-05 47.38614 8.517271 2014-03-05 18:16:36
## 6 PT 2014 Limmattal 2014-03-06 47.38614 8.517271 2014-03-06 18:18:04
## sunrise species bins_factor n_events sum_nCalls meanT_BL
## 1 2014-03-02 07:04:46 <NA> <NA> NA NA NA
## 2 2014-03-03 07:02:52 <NA> <NA> NA NA NA
## 3 2014-03-04 07:00:58 <NA> <NA> NA NA NA
## 4 2014-03-05 06:59:03 <NA> <NA> NA NA NA
## 5 2014-03-06 06:57:07 <NA> <NA> NA NA NA
## 6 2014-03-07 06:55:10 <NA> <NA> NA NA NA
## bins bin_length time sunrise_time sunset_time
## 1 <NA> NA <NA> 1900-01-02 07:04:47 1900-01-01 18:10:40
## 2 <NA> NA <NA> 1900-01-02 07:02:53 1900-01-01 18:12:10
## 3 <NA> NA <NA> 1900-01-02 07:00:59 1900-01-01 18:13:39
## 4 <NA> NA <NA> 1900-01-02 06:59:04 1900-01-01 18:15:08
## 5 <NA> NA <NA> 1900-01-02 06:57:08 1900-01-01 18:16:37
## 6 <NA> NA <NA> 1900-01-02 06:55:11 1900-01-01 18:18:05
batplotr_anleitung.R
enthält die hier besprochenen Befehle in einer einfachen .R Datei .
Auswertung_PrimeTower.R
ein Beispiel für die Benutzung der Package (im Prinzip ähnlich wie batplotr_anleitung.R
)
Analyse_BatLoggerLogfiles.R
Script für die Analyse von vielen BatLogger Log-Files. Für Fortgeschrittene. Und dauert lange. Es empfiehlt sich die Daten bereits beim Import in BatScope zu sortieren
Die Package sowie alle Funktionen haben eine Hilfeseite die mit dem R-Befehl ?
abgerufen werden kann, e.g.:
?batplotr
?nightlot
Die Package wurde in R 3.1.2 getestet und der Quellcode ist auf github hinterlegt. Die Package kann also frei weiterentwickelt werden!