Bei Phänologischer Kalender für Trachtpflanzen haben wir die Entwicklung eines komfortablen phänologischen Kalenders für Imker ins Auge gefasst.
Hier im Verlauf geht es konkret um das Programm »phenodata«, das auf dieser Basis entstanden ist.
Bei Phänologischer Kalender für Trachtpflanzen haben wir die Entwicklung eines komfortablen phänologischen Kalenders für Imker ins Auge gefasst.
Hier im Verlauf geht es konkret um das Programm »phenodata«, das auf dieser Basis entstanden ist.
Danke für Eure exzellenten Rückmeldungen bei Phänologischer Kalender für Trachtpflanzen!
Wir konnten die ersten Spatenstiche machen und Ihr könnt nun die Entwicklung begleiten, das Paket gibt es im PyPI:
und den Quellcode auf GitHub:
pip install phenodata --upgrade
Was bereits funktioniert, ist:
Display list of species:
phenodata list-species --source=dwd
Display list of phases:
phenodata list-phases --source=dwd
Display list of stations:
phenodata list-stations --source=dwd --dataset=immediate
phenodata list-stations --source=dwd --dataset=annual
“phenodata 0.3.0
” kann nun endlich Beobachtungen abrufen und rudimentär nach Stations-IDs und Referenzjahren filtern. Hier gschwind ein paar Beispiele:
phenodata observations --source=dwd --dataset=annual --partition=recent --filename=Hasel,Schneegloeckchen
phenodata observations --source=dwd --dataset=annual --partition=recent --filename=Hasel,Schneegloeckchen --station-id=164,717
phenodata observations --source=dwd --dataset=annual --partition=recent --station-id=164,717 --year=2016,2017
Weiterhin ist es nun möglich, aus einem der Ausgabeformate “tabulate”, “json” sowie “csv” auszuwählen, hier der entsprechende Auszug aus “phenodata --help
”:
Data formatting options:
--format=<format>
Output data in designated format. Choose one of “tabulate”, “json” or “csv”.
With “tabulate”, it is also possible to specify the table format,
see Bitbucket. e.g. “tabulate:presto”.
[default: tabulate:psql]
Aufgrund mancher Anomalien in den Daten läuft bestimmt noch nicht alles rund, vor allem bei anderen Kombinationen der Parameter, wir testen das ja auch nur “auf unserer Insel”. Wenn Ihr also neugierig seid, damit bereits ein wenig Datenarchäologie zu betreiben, freuen wir uns über Eure Rückmeldungen.
“phenodata 0.4.0
” berechnet nun auch Vorhersagen auf Basis von Mittelwerten beliebig gefilterter Observationsereignisse.
Zur Berechnung des voraussichtlichen Eintrittsdatums eines Ereignisses wird der Tag des Jahres aus der “Jultag
” Spalte verwendet. Zuerst werden die Observationsereignisse nach (Stations ID, Spezies ID und Phasen ID) gruppiert, dann wird der Mittelwert aller “Jultag
” Werte pro Gruppe gebildet. Haut das hin?
Anhand eines Beispiels sieht das folgendermaßen aus:
phenodata forecast \
--source=dwd --dataset=annual --partition=recent \
--filename=Hasel,Schneegloeckchen,Apfel,Birne \
--station-id=12132 \
--quality-byte=1,2,3 --quality-level=7,10 \
--format=tabular:pipe
date | Jultag | |
---|---|---|
(12132, 113, 5) | 2018-02-19 00:00:00 | 50 |
(12132, 127, 5) | 2018-02-17 00:00:00 | 48 |
(12132, 311, 3) | 2018-04-01 00:00:00 | 91 |
(12132, 311, 5) | 2018-04-23 00:00:00 | 113 |
(12132, 311, 6) | 2018-04-30 00:00:00 | 120 |
(12132, 311, 7) | 2018-05-13 00:00:00 | 133 |
(12132, 311, 29) | 2018-08-17 00:00:00 | 229 |
(12132, 311, 32) | 2018-10-23 00:00:00 | 296 |
(12132, 313, 3) | 2018-04-12 00:00:00 | 102 |
(12132, 313, 5) | 2018-05-03 00:00:00 | 123 |
(12132, 313, 6) | 2018-05-10 00:00:00 | 130 |
(12132, 313, 7) | 2018-05-25 00:00:00 | 145 |
(12132, 313, 29) | 2018-09-28 00:00:00 | 271 |
(12132, 313, 32) | 2018-11-03 00:00:00 | 307 |
(12132, 322, 5) | 2018-04-15 00:00:00 | 105 |
(12132, 322, 6) | 2018-04-26 00:00:00 | 116 |
(12132, 322, 7) | 2018-05-11 00:00:00 | 131 |
(12132, 322, 29) | 2018-09-22 00:00:00 | 265 |
In der ersten Indexspalte sind die durch die Gruppierung/Aggregation zusammengefassten ehemaligen Indexspalten Stations ID, Spezies ID und Phasen ID kombiniert enthalten.
Am Beispiel der ersten Aggregation (12132, 113, 5) erkennt man folgende Komponenten:
Stations ID: 12132 ist Berlin-Dahlem
Der Beobachtungsort.
Spezies ID: 113 ist die Hasel
Die beobachtete Pflanze.
Phase ID: 5 ist “Blüte Beginn” (BBCH 60)
Das beobachtete Ereignis, in welche Wachstumsphase die Pflanze eingetreten ist.
Die Zuordnung muss man derzeit noch händisch erforschen:
# List of stations
phenodata list-stations --source=dwd --dataset=immediate
# List of species
phenodata list-species --source=dwd
# List of phases
phenodata list-phases --source=dwd
Die Implementierung findet sich unter:
“phenodata 0.5.0
” bietet neben anderen Dingen nun eine Option “--humanize
”, die Ausgabe wird dadurch für Menschen besser lesbar.
Nach dem Abfragen der Ergebnisse werden sie mit den Metadatentabellen verknüpft, die die Informationen über die Stationen, die Spezies, die Phasen und die Qualitätsmerkmale enthalten. Dies ermöglicht die Darstellung der jeweiligen textuellen Repräsentationen der Informationen in den ID Spalten.
Anschließend wird ein komplett neuer DataFrame erzeugt, um die Reihenfolge der Spalten frei bestimmen zu können, damit wird die Ausgabe auch von der Struktur her besser lesbar.
Forecast of “beginning of flowering” events at station “Berlin-Dahlem”.
Use all species of the “primary group”: “hazel”, “snowdrop”, “goat willow”,
“dandelion”, “cherry”, “apple”, “winter oilseed rape”, “black locust” and “common heather”.
Sort by date, ascending.
phenodata forecast \
--source=dwd --dataset=annual --partition=recent \
--filename=Hasel,Schneegloeckchen,Sal-Weide,Loewenzahn,Suesskirsche,Apfel,Winterraps,Robinie,Winter-Linde,Heidekraut \
--station-id=12132 --phase-id=5 \
--humanize \
--sort=Datum \
--format=tabular:pipe
Datum | Spezies | Phase | Station |
---|---|---|---|
2018-02-17 | common snowdrop | beginning of flowering | Berlin-Dahlem, Berlin |
2018-02-19 | common hazel | beginning of flowering | Berlin-Dahlem, Berlin |
2018-03-30 | goat willow | beginning of flowering | Berlin-Dahlem, Berlin |
2018-04-07 | dandelion | beginning of flowering | Berlin-Dahlem, Berlin |
2018-04-15 | cherry (late ripeness) | beginning of flowering | Berlin-Dahlem, Berlin |
2018-04-21 | winter oilseed rape | beginning of flowering | Berlin-Dahlem, Berlin |
2018-04-23 | apple (early ripeness) | beginning of flowering | Berlin-Dahlem, Berlin |
2018-05-03 | apple (late ripeness) | beginning of flowering | Berlin-Dahlem, Berlin |
2018-05-24 | black locust | beginning of flowering | Berlin-Dahlem, Berlin |
2018-08-20 | common heather | beginning of flowering | Berlin-Dahlem, Berlin |
Forecast of all events at station “Berlin-Dahlem”.
Use all species of the “primary group” (dito).
Sort by species and date, ascending.
phenodata forecast \
--source=dwd --dataset=annual --partition=recent \
--filename=Hasel,Schneegloeckchen,Sal-Weide,Loewenzahn,Suesskirsche,Apfel,Winterraps,Robinie,Winter-Linde,Heidekraut \
--station-id=12132 \
--humanize --language=german \
--sort=Spezies,Datum \
--format=tabular:pipe
Datum | Spezies | Phase | Station |
---|---|---|---|
2018-04-01 | Apfel, frühe Reife | Austrieb Beginn | Berlin-Dahlem, Berlin |
2018-04-23 | Apfel, frühe Reife | Blüte Beginn | Berlin-Dahlem, Berlin |
2018-04-30 | Apfel, frühe Reife | Vollblüte | Berlin-Dahlem, Berlin |
2018-05-13 | Apfel, frühe Reife | Blüte Ende | Berlin-Dahlem, Berlin |
2018-08-17 | Apfel, frühe Reife | Pflückreife Beginn | Berlin-Dahlem, Berlin |
2018-10-23 | Apfel, frühe Reife | herbstlicher Blattfall | Berlin-Dahlem, Berlin |
2018-04-12 | Apfel, späte Reife | Austrieb Beginn | Berlin-Dahlem, Berlin |
2018-05-03 | Apfel, späte Reife | Blüte Beginn | Berlin-Dahlem, Berlin |
2018-05-10 | Apfel, späte Reife | Vollblüte | Berlin-Dahlem, Berlin |
2018-05-25 | Apfel, späte Reife | Blüte Ende | Berlin-Dahlem, Berlin |
2018-09-28 | Apfel, späte Reife | Pflückreife Beginn | Berlin-Dahlem, Berlin |
2018-11-03 | Apfel, späte Reife | herbstlicher Blattfall | Berlin-Dahlem, Berlin |
2018-02-19 | Hasel | Blüte Beginn | Berlin-Dahlem, Berlin |
2018-08-20 | Heidekraut | Blüte Beginn | Berlin-Dahlem, Berlin |
2018-04-07 | Löwenzahn | Blüte Beginn | Berlin-Dahlem, Berlin |
2018-05-24 | Robinie | Blüte Beginn | Berlin-Dahlem, Berlin |
2018-03-30 | Sal-Weide | Blüte Beginn | Berlin-Dahlem, Berlin |
2018-02-17 | Schneeglöckchen | Blüte Beginn | Berlin-Dahlem, Berlin |
2018-04-15 | Süßkirsche, späte Reife | Blüte Beginn | Berlin-Dahlem, Berlin |
2018-04-24 | Süßkirsche, späte Reife | Vollblüte | Berlin-Dahlem, Berlin |
2018-05-06 | Süßkirsche, späte Reife | Blüte Ende | Berlin-Dahlem, Berlin |
2018-06-21 | Süßkirsche, späte Reife | Pflückreife Beginn | Berlin-Dahlem, Berlin |
2018-10-09 | Süßkirsche, späte Reife | herbstliche Blattverfärbung | Berlin-Dahlem, Berlin |
2018-03-28 | Winterraps | Längenwachstum Beginn | Berlin-Dahlem, Berlin |
2018-04-06 | Winterraps | Knospenbildung Beginn | Berlin-Dahlem, Berlin |
2018-04-21 | Winterraps | Blüte Beginn | Berlin-Dahlem, Berlin |
2018-07-08 | Winterraps | Vollreife Beginn | Berlin-Dahlem, Berlin |
2018-08-11 | Winterraps | Ernte | Berlin-Dahlem, Berlin |
2018-08-31 | Winterraps | Bestellung Beginn | Berlin-Dahlem, Berlin |
2018-09-10 | Winterraps | Auflaufen Beginn | Berlin-Dahlem, Berlin |
2018-09-30 | Winterraps | Rosettenbildung Beginn | Berlin-Dahlem, Berlin |
– Have fun!
Mit “phenodata 0.6.0
” ist es nun möglich
Observations near Munich for species “hazel” or “snowdrop” in 2018. Sort by date, output in Markdown format.
phenodata observations \
--source=dwd --dataset=annual --partition=recent \
--station=münchen \
--species=hazel,snowdrop \
--year=2018 \
--humanize --sort=Datum \
--format=tabular:pipe
Jahr | Datum | Spezies | Phase | Station | QS-Level | QS-Byte |
---|---|---|---|---|---|---|
2018 | 2018-01-09 | common hazel | beginning of flowering | München-Pasing, Bayern | Load time checks | Feldwert nicht beanstandet |
2018 | 2018-01-19 | common snowdrop | beginning of flowering | Haar, Bayern | Load time checks | Feldwert nicht beanstandet |
2018 | 2018-01-26 | common snowdrop | beginning of flowering | Siegertsbrunn, Bayern | Load time checks | Feldwert nicht beanstandet |
2018 | 2018-01-27 | common snowdrop | beginning of flowering | München-Pasing, Bayern | Load time checks | Feldwert nicht beanstandet |
2018 | 2018-02-03 | common hazel | beginning of flowering | Siegertsbrunn, Bayern | Load time checks | Feldwert nicht beanstandet |
2018 | 2018-02-16 | common hazel | beginning of flowering | Haar, Bayern | Load time checks | Feldwert nicht beanstandet |
Die Wunschlisten für relevante Pflanzenarten sind nun ebenfalls implementiert. Sie wurden, wie von Euch vorgeschlagen, in entsprechende Kategorien einsortiert und einstweilen direkt in der presets.json abgelegt.
Ansteuern/benutzen kann man sie über den neuen Parameter
--species-preset=mellifera-de-primary
Forecast based on “beginning of flowering” events of 2015-2017 in Rostock for the list of predefined species labelled as “mellifera-de-primary”. Sort by date, output in Markdown format.
Remark: The presets are currently stored in presets.json and can be amended and expanded anytime. We are looking forward to your contributions!
phenodata forecast \
--source=dwd --dataset=annual --partition=recent \
--station=rostock \
--phase="beginning of flowering" \
--year=2015,2016,2017 \
--humanize --language=german \
--sort=Datum \
--species-preset=mellifera-de-primary \
--format=tabular:pipe
Datum | Spezies | Phase | Station |
---|---|---|---|
2018-02-18 | Hasel | Blüte Beginn | Rostock-Lütten Klein, Mecklenburg-Vorpommern |
2018-02-21 | Schneeglöckchen | Blüte Beginn | Rostock-Lütten Klein, Mecklenburg-Vorpommern |
2018-03-20 | Sal-Weide | Blüte Beginn | Rostock-Lütten Klein, Mecklenburg-Vorpommern |
2018-04-01 | Löwenzahn | Blüte Beginn | Rostock-Lütten Klein, Mecklenburg-Vorpommern |
2018-04-18 | Süßkirsche, frühe Reife | Blüte Beginn | Rostock-Lütten Klein, Mecklenburg-Vorpommern |
2018-04-27 | Winterraps | Blüte Beginn | Rostock-Lütten Klein, Mecklenburg-Vorpommern |
2018-05-03 | Apfel, frühe Reife | Blüte Beginn | Rostock-Lütten Klein, Mecklenburg-Vorpommern |
2018-06-07 | Robinie | Blüte Beginn | Rostock-Lütten Klein, Mecklenburg-Vorpommern |
Es ist nun genauso möglich, bei datenarchäologischen Reisen komfortabel nach extravaganten Dingen im Volltext zu suchen. Zum Abschluß noch ein kleines Beispiel.
Investigate some “flowering” observations near Munich which have seen corrections in the last year.
phenodata observations \
--source=dwd --dataset=annual --partition=recent \
--station=münchen \
--phase=flowering \
--quality=korrigiert \
--year=2017 \
--humanize --sort=Datum \
--format=tabular:pipe
Jahr | Datum | Spezies | Phase | Station | QS-Level | QS-Byte |
---|---|---|---|---|---|---|
2017 | 2017-04-30 | midland hawthorn | beginning of flowering | Haar, Bayern | ROUTKLI validated and corrected | Feldwert korrigiert |
2017 | 2017-07-16 | common wormwood | beginning of flowering | München-Feldmoching, Bayern | ROUTKLI validated and corrected | Feldwert korrigiert |
2017 | 2017-07-31 | common wormwood | beginning of flowering | Haar, Bayern | ROUTKLI validated and corrected | Feldwert korrigiert |
pipe
is also a nice option, tables generated using the --format=tabular:pipe
option can be copied 1:1 in this forum and are rendered nicely:
pipe
follows the conventions of PHP Markdown Extra extension. It corresponds topipe_tables
in Pandoc.
Ab dem aktuellen Release 0.9.1 wird nun auch Python 3 unterstützt, die Ergebnisse bei Phänologischer Kalender 2020 wurden mit Python 3.7.5 erzeugt.
phenodata-0.9.3
has just been released. It is essentially a maintenance release and should improve installation convenience on Python 3 by allowing more recent versions of Pandas to be used as a dependency.
In this manner, the chance is higher that respective binary wheel packages are available from PyPI, so Pandas as well as NumPy packages will not have to be compiled on your workstation. This will save both time and resources when installing phenodata
.
Apart from that, phenodata
might also install flawlessly on Windows now because those dependencies are usually provided as *-win32.whl
and *-win_amd64.whl
binary wheel packages nowadays.
Just type:
pip install phenodata --user --upgrade
Das Beispiel “Apis mellifera flowering example” der GitHub - panodata/grafana-pandas-datasource: Grafana Python datasource - using Pandas for timeseries and table data zeigt einen Ausblick auf die Integration mit Grafana – siehe Phänologischer Kalender für Trachtpflanzen.
Mit phenodata-0.11.0
lassen sich die Daten nun auch zusätzlich ad hoc per SQL filtern.
pip install phenodata[sql] --user --upgrade
phenodata observations \
--source=dwd --dataset=annual --partition=recent \
--year=2015,2016,2017,2018,2019 \
--species-preset=mellifera-de-primary --phase="beginning of flowering" \
--humanize --language=german \
--sql="SELECT * FROM data WHERE Station LIKE '%Berlin%' ORDER BY Datum" \
--format=tabular:pipe
Ich hab das Thema mit einer Kollegin aus dem Verein besprochen und da kam die Idee auf, das man die Menge Pollen und Nektar für die jeweilige Pflanze auch mit ausgibt.
Da gibt es wohl ein System, das die Pflanzen in vier Gruppen einteilt (1 = wenig, 4 = viel). Es gibt aber auch Spannen, z.B. ‘2-4’.
Ich stelle mit vor, das man dazu zwei Spalten in den Presets mit eingibt und die Werte einfach mit ausgegeben werden.
Ist das sinnvoll und den Aufwand wert?
Wenn du die Sachen hier raussuchst ;-)
Anna Maurizio, Friedgard Schaper:
Das Trachtpflanzenbuch
Habbich schon - Danke an Petra!
Ich trage das auch in die presets.json
ein - nur muss da dafür auch ein Feld existieren.
Rüben Mai p2n2
Beifuß Juli n1p1
Busch Winde…- nur Wald Winde gefunden April-Mai p2
Eberesche Mai-Juni p2n2
Esche H(Honigtau)
Lärche falscher Jasmin?
Fichte h
Flieder April-Mai p3n2
Forsythie?
Goldregen Mai-Juni p1n3
Birke März-Mai p2
Hasel Jan-April n-p2
Heide März-April p2n4
Herbstzeitlose August-September p2n2
Huflattich März-Mai n3p2
Hundsrose Juni-Juli p2n2
Kiefer h
Kornelkische März April p3n2
Löwenzahn April-Juni p4n3
Robinie Juni Juli p1-2n3-4
Rosskastanie April Juni p3n3
Buche April Mai p2
Weide März April n3-4,p3-4
Schlehe n2p3
Schneebeere April-August n1-3p1
Schneeglöckchen März April p2n2
Erle h
Schwarzer Holunder Juni p2
Linde Juni August p4n3
Ahorn April Mai p2n3
Eiche h
Tanne h
p = Pollen, n = Nektar, h = Honigtau
Wie kommt denn die Liste der Pflanzen zustande und woraus sind die Werte? In phenodata gibt es diese Pflanzen:
Honigtau selbstredend nicht, da der Lausbesatz und das Wetter hier entscheidend sind und nichts blüht.
Lege gerne eine separate “knowledgebase Datei” dafuer in einem passenden Format an. Es darf auch JSON5, INI, YAML oder TOML sein. Letzteres waere sogar mein Favorit, weil es sich zunehmender Beliebtheit erfreut und wir es ebenfalls immer oefters einsetzen [1][2].
@Andreas - was soll ich denn als Index benutzen? Den deutschen Pflanzennamen oder die ID vom DWD? Kannst Du vielleicht eine dummy Datei machen mit einem Eintrag? Dann kann ich die erweitern und das Format passt dann auch gleich?
Ich wuerde sagen: Die ID.
Ich muesste mich auch erst ein wenig mit dem Datenmodell und dem Anwendungsfall beschaeftigen. Wenn Du loslegen willst: Einfach munter drauf los!
Vielleicht so? (Please adjust where appropriate)
# A knowledgebase file for mapping fruit plant species of
# honeybees to their respective yield classification values.
#
# For describing metadata, use Dublin Core terms.
# https://www.dublincore.org/specifications/dublin-core/dcmi-terms/
#
# For validation, use https://pypi.org/project/toml-validator/
# or https://www.toml-lint.com/.
# Metadata for species -> yield mapping.
[phenodata.mellifera.yield.dwd.metadata]
title = "Yields per fruit plants relevant for honeybees (Apis mellifera)"
description = """
Describe a mapping of DWD CDC phenology observation species
(nectar and honeydew source plants of honeybees) to their
respective yield classification values.
DWD CDC means Deutscher Wetterdienst Climate Data Center.
"""
source = "Das Trachtpflanzenbuch; Anna Maurizio, Friedgard Schaper"
spatial = "Germany"
creator = "poesel"
publisher = "Hiveeyes"
license = "CC BY 4.0"
created = 2021-01-07T10:00:00Z
modified = 2021-01-07T14:00:00Z
references = [
"https://www.dwd.de/DE/klimaumwelt/klimaueberwachung/phaenologie/phaenologie_node.html",
"https://opendata.dwd.de/climate_environment/CDC/observations_germany/phenology/",
"https://community.hiveeyes.org/t/phanologischer-kalender-fur-trachtpflanzen/664",
"https://community.hiveeyes.org/t/phenodata-ein-datenbezug-und-manipulations-toolkit-fur-open-access-phanologiedaten/2892",
"https://github.com/earthobservations/phenodata",
]
# Map the DWD phenology species identifiers to the yield values.
[phenodata.mellifera.yield.dwd.map]
123 = { pollen = 2, nectar = 3, honeydew = true }
456 = { pollen = [1, 2], nectar = [3, 4], honeydew = false }