Here, we are debugging problems with »phenodata« ist ein Datenbezug- und Manipulations-Toolkit für Open-Access-Phänologiedaten.
bei mir gehts nicht ganz so reibungslos mit der installation.
aber im venv36 krieg ich wenigstens die versionsnummer korrekt angezeigt…
liegts an mir?
(.venv27)mois@weidenteich ~ $ phenodata --version
Traceback (most recent call last):
File "/home/mois/.venv27/bin/phenodata", line 5, in <module>
from pkg_resources import load_entry_point
File "/home/mois/.venv27/local/lib/python2.7/site-packages/pkg_resources.py", line 2716, in <module>
working_set.require(__requires__)
File "/home/mois/.venv27/local/lib/python2.7/site-packages/pkg_resources.py", line 685, in require
needed = self.resolve(parse_requirements(requirements))
File "/home/mois/.venv27/local/lib/python2.7/site-packages/pkg_resources.py", line 588, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: backports.functools-lru-cache>=1.2.1
(.venv27)mois@weidenteich ~ $ deactivate
mois@weidenteich ~ $ source .venv36/bin/activate
(.venv36)mois@weidenteich ~ $ phenodata --version
phenodata 0.6.4
(.venv36)mois@weidenteich ~ $ phenodata
Usage:
phenodata info
phenodata list-species --source=dwd [--format=csv]
phenodata list-phases --source=dwd [--format=csv]
phenodata list-stations --source=dwd --dataset=immediate [--all] [--format=csv]
phenodata nearest-station --source=dwd --dataset=immediate --latitude=52.520007 --longitude=13.404954 [--format=csv]
phenodata nearest-stations --source=dwd --dataset=immediate [--all] --latitude=52.520007 --longitude=13.404954 [--limit=10] [--format=csv]
phenodata list-quality-levels --source=dwd [--format=csv]
phenodata list-quality-bytes --source=dwd [--format=csv]
phenodata list-filenames --source=dwd --dataset=immediate --partition=recent [--filename=Hasel,Schneegloeckchen] [--year=2017]
phenodata list-urls --source=dwd --dataset=immediate --partition=recent [--filename=Hasel,Schneegloeckchen] [--year=2017]
phenodata (observations|forecast) --source=dwd --dataset=immediate --partition=recent [--filename=Hasel,Schneegloeckchen] [--station-id=164,717] [--species-id=113,127] [--phase-id=5] [--quality-level=10] [--quality-byte=1,2,3] [--station=berlin,brandenburg] [--species=hazel,snowdrop] [--species-preset=mellifera-primary] [--phase=flowering] [--quality=ROUTKLI] [--year=2017] [--humanize] [--show-ids] [--language=german] [--long-station] [--sort=Datum] [--format=csv]
phenodata drop-cache --source=dwd
phenodata --version
phenodata (-h | --help)
(.venv36)mois@weidenteich ~ $ phenodata info
Traceback (most recent call last):
File "/home/mois/.venv36/bin/phenodata", line 9, in <module>
load_entry_point('phenodata==0.6.4', 'console_scripts', 'phenodata')()
File "/home/mois/.venv36/lib/python3.4/site-packages/phenodata/command.py", line 82, in run
options = normalize_options(options, encoding='utf-8')
File "/home/mois/.venv36/lib/python3.4/site-packages/phenodata/util.py", line 32, in normalize_options
value = value.decode(encoding)
AttributeError: 'str' object has no attribute 'decode'
(.venv36)mois@weidenteich ~ $
wenn Dein *ux nativ python 2.7 kann, dann probiere auch ohne venv ;)
sudo könnte nötig sein, je nachdem, wie Du pip benutzt.
Hey @mois,
wir haben zwar in der virtualenv Doku auch Python3 erwähnt, das Programm selbst wurde jedoch auf Python2 entwickelt und ist vermutlich noch nicht fit für Python3. Bitte erstelle einstweilen ein virtualenv für Python2:
virtualenv --no-site-packages --python=python2 .venv27
Herzliche Grüße,
Andreas.
Auch mit so etwas habe ich Probleme, das geht noch
phenodata list-species --source=dwd
folgendes jedoch nicht
phenodata list-species --source=dwd year=2017
phenodata list-species --source=dwd station=Berlin
… noch etwas:
Die historischen Daten haben Probleme mit der Zuckerrübe
phenodata forecast --source=dwd --dataset=annual --partition=historical --station-id=12132 --humanize
File “pandas/_libs/src/util.pxd”, line 91, in util.set_value_at_unsafe
ValueError: invalid literal for long() with base 10: ‘Zucker-R\xfcbe’
Danke! Dieses Problem wurde gerade mit der Version 0.6.5 behoben. Das Programm sollte nun also auch die historischen Daten aller Jahresmelder verarbeiten können, dafür benötigt es allerdings bis zu 3GB RAM und braucht bis zu fünf Minuten für die Berechnung auf zeitgemäßer Hardware, sogar mit vorgewärmtem Cache.
Anmerkung: Die Rübe musste bis auf weiteres leider ausgespart werden, siehe:
phenodata 0.7.0 und phenodata 0.8.0 kümmern sich nun um ein paar Dinge mehr.
Das Programm kann nun auch Rübendaten verarbeiten.
Bei “phenodata list-stations
” werden ab sofort auch die Parameter “--filter=
” sowie “--sort=
” akzeptiert und entsprechend ausgewertet.
Habe gerade phenodata mit pip install phenodata --upgrade
auf meiner aktuellen Maschine installiert und bekomme nun diese Fehlermeldung:
root@XPS13-CGruber:~# phenodata list-species --source=dwd
Traceback (most recent call last):
File "/usr/local/bin/phenodata", line 5, in <module>
from phenodata.command import run
File "/usr/local/lib/python3.6/dist-packages/phenodata/command.py", line 10, in <module>
from phenodata.dwd.pheno import DwdPhenoData, DwdPhenoDataHumanizer
File "/usr/local/lib/python3.6/dist-packages/phenodata/dwd/pheno.py", line 111
print reference_field, filter
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(reference_field, filter)?
Passt bei meiner Installation was nicht oder hat sich in der Zwischenzeit etwas verändert?
Ja: Python 2.x gibt es nur noch aus historischen Gründen (nun offiziell deprecated). Die von Dir zitierte Stelle benötigt nunmehr Klammern aus Konvention von Python 3:
print (reference_field, filter)
Deine Python-Version schlägt Dir diese Änderung ja auch vor: Ändere doch mal Zeile 111 so, daß diese Klammern da stehen, dann geht es erstmal wieder.
@Andreas: könntest Du bei der Gelegenheit die requirements in der setup.py
derart verändern, daß die tqdm-Version nicht ‘exakt’, sondern ‘mindestens’ verlangt wird?
--- /a
+++ /b
@@ -14,7 +14,7 @@
'tabulate==0.8.2',
'dogpile.cache==0.6.5',
'arrow==0.12.1',
- 'tqdm==4.19.7',
+ 'tqdm>=4.19.7',
'appdirs==1.4.3',
]
Ok, die python-Version, Danke! Das wird dann eine größere Baustelle:
root@XPS13-CGruber:/usr/local/lib/python3.6/dist-packages/phenodata/dwd# phenodata list-species --source=dwd
Traceback (most recent call last):
File "/usr/local/bin/phenodata", line 8, in <module>
sys.exit(run())
File "/usr/local/lib/python3.6/dist-packages/phenodata/command.py", line 83, in run
options = normalize_options(options, encoding='utf-8')
File "/usr/local/lib/python3.6/dist-packages/phenodata/util.py", line 32, in normalize_options
value = value.decode(encoding)
AttributeError: 'str' object has no attribute 'decode'
Ja, genau so weit kommt meine Version gegenwärtig auch nur! :)
Lieben Dank! Läuft jetzt wieder und du hast gleich ein Pakete upgedatet! Super!!
[edit] was gerade nicht geht sind die Abfragen in diesem posting: »phenodata« - Ein Toolkit zur Beschaffung und Verarbeitung von Open-Access Phänologiedaten - #3 by Andreas also alles mit observations
.
Danke Clemens, die Dokumentation war veraltet und wurde jetzt verbessert.
-
--files
heißt jetzt--filename
. -
--years
heißt jetzt--year
. - Im obigen Kontext für die Filterung nach Stations-IDs wird nun
--station-id
statt--stations
verwendet.
phenodata forecast --source=dwd --dataset=annual --partition=recent --year=2015,2016,2017,2018,2019 --phase=“beginning of flowering” --humanize --language=german --sort=Datum --station=Villigst --species-preset=mellifera-de-primary --format=tabular:pipe
Derselbe wie bei Andreas nur halt statt Berlin Villigst (das ist von mir aus die nächste).
Wenn ich das ganze ohne die spezies laufen lasse, bekomme ich allerdings einen Fehler:
Nelson:Github markus$ phenodata forecast --source=dwd --dataset=annual --partition=recent --year=2015,2016,2017,2018,2019 --phase="beginning of flowering" --humanize --language=german --sort=Datum --station=Villigst --format=tabular:pipe
2020-01-08 21:35:46,841 [phenodata.dwd.pheno ] INFO : Scanning for files
2020-01-08 21:35:46,843 [phenodata.ftp ] INFO : The cache directory is /Users/markus/Library/Caches/phenodata/dwd-ftp/py3
2020-01-08 21:35:46,875 [phenodata.ftp ] INFO : Send FTP LIST command for ftp://opendata.dwd.de/climate_environment/CDC/observations_germany/phenology/annual_reporters
2020-01-08 21:35:47,175 [phenodata.ftp ] INFO : Send FTP LIST command for ftp://opendata.dwd.de/climate_environment/CDC/observations_germany/phenology/annual_reporters/crops/recent
2020-01-08 21:35:47,406 [phenodata.ftp ] INFO : Send FTP LIST command for ftp://opendata.dwd.de/climate_environment/CDC/observations_germany/phenology/annual_reporters/farming/recent
2020-01-08 21:35:47,520 [phenodata.ftp ] WARNING: FTP LIST command for ftp://opendata.dwd.de/climate_environment/CDC/observations_germany/phenology/annual_reporters/farming/recent failed
2020-01-08 21:35:47,524 [phenodata.ftp ] INFO : Send FTP LIST command for ftp://opendata.dwd.de/climate_environment/CDC/observations_germany/phenology/annual_reporters/fruit/recent
2020-01-08 21:35:47,809 [phenodata.ftp ] INFO : Send FTP LIST command for ftp://opendata.dwd.de/climate_environment/CDC/observations_germany/phenology/annual_reporters/vine/recent
2020-01-08 21:35:48,072 [phenodata.ftp ] INFO : Send FTP LIST command for ftp://opendata.dwd.de/climate_environment/CDC/observations_germany/phenology/annual_reporters/wild/recent
2020-01-08 21:35:48,360 [phenodata.dwd.pheno ] INFO : Starting data acquisition with 61 files
18%|███████▊ | 11/61 [00:09<00:42, 1.18it/s]HASH: Out of overflow pages. Increase page size
18%|███████▊ | 11/61 [00:09<00:44, 1.12it/s]
Traceback (most recent call last):
File "/Users/markus/.pyenv/versions/3.7.4/bin/phenodata", line 11, in <module>
load_entry_point('phenodata==0.9.1', 'console_scripts', 'phenodata')()
File "/Users/markus/.pyenv/versions/3.7.4/lib/python3.7/site-packages/phenodata/command.py", line 162, in run
data = client.get_forecast(options, humanize=options['humanize'])
File "/Users/markus/.pyenv/versions/3.7.4/lib/python3.7/site-packages/phenodata/dwd/pheno.py", line 214, in get_forecast
observations = self.get_observations(options)
File "/Users/markus/.pyenv/versions/3.7.4/lib/python3.7/site-packages/phenodata/dwd/pheno.py", line 178, in get_observations
observations = self.query(partition=options['partition'], files=options['filename'])
File "/Users/markus/.pyenv/versions/3.7.4/lib/python3.7/site-packages/phenodata/dwd/pheno.py", line 286, in query
data = self.cdc.get_dataframe(path, coerce_int=True)
File "/Users/markus/.pyenv/versions/3.7.4/lib/python3.7/site-packages/phenodata/dwd/cdc.py", line 39, in get_dataframe
return self.csv_to_dataframe(self.read_csv(url), index_column=index_column, coerce_int=coerce_int)
File "/Users/markus/.pyenv/versions/3.7.4/lib/python3.7/site-packages/phenodata/dwd/cdc.py", line 48, in read_csv
content = self.ftp.retr_cached(url, strip_base=self.baseurl)
File "/Users/markus/.pyenv/versions/3.7.4/lib/python3.7/site-packages/phenodata/ftp.py", line 277, in retr_cached
self.cache.content.set(content_key, payload)
File "/Users/markus/.pyenv/versions/3.7.4/lib/python3.7/site-packages/dogpile/cache/region.py", line 1112, in set
self.backend.set(key, self._value(value))
File "/Users/markus/.pyenv/versions/3.7.4/lib/python3.7/site-packages/dogpile/cache/backends/file.py", line 242, in set
value, compat.pickle.HIGHEST_PROTOCOL
_dbm.error: cannot add item to database
Das sieht irgendwie nach “out of memory condition” aus. Ich kann es lokal nicht reproduzieren und vermute, es liegt irgendwie am WSL ;]?
Vielleicht sicherheitshalber nochmal den Cache leeren?
Cache geleert, dann gings. Danke für den Tip!
An der WSL lag es allerdings nicht - das ‘Library’ im Pfad sollte Dir eigentlich erzählt haben, um welches OS es sich hier handelt.
Ich wollte das grade wieder benutzen. Bekomme aber folgende Fehlermeldung:
Nelson:Github markus $ phenodata forecast --source=dwd --dataset=annual --partition=recent --year=2015,2016,2017,2018,2019 --phase="beginning of flowering" --humanize --language=german --sort=Datum --station=Villigst --species-preset=mellifera-de-primary --format=tabular:pipe
2022-03-09 19:29:16,063 [phenodata.dwd.pheno ] INFO : Scanning for files
2022-03-09 19:29:16,064 [phenodata.ftp ] INFO : The cache directory is /Users/markus/Library/Caches/phenodata/dwd-ftp/py3
Traceback (most recent call last):
File "/Users/markus/opt/anaconda3/bin/phenodata", line 8, in <module>
sys.exit(run())
File "/Users/markus/opt/anaconda3/lib/python3.9/site-packages/phenodata/command.py", line 168, in run
data = client.get_forecast(options, forecast_year=options['forecast-year'], humanize=options['humanize'])
File "/Users/markus/opt/anaconda3/lib/python3.9/site-packages/phenodata/dwd/pheno.py", line 220, in get_forecast
observations = self.get_observations(options)
File "/Users/markus/opt/anaconda3/lib/python3.9/site-packages/phenodata/dwd/pheno.py", line 179, in get_observations
observations = self.query(partition=options['partition'], files=options.get('filename'))
File "/Users/markus/opt/anaconda3/lib/python3.9/site-packages/phenodata/dwd/pheno.py", line 279, in query
paths = self.scan_files(partition, include=files, field='url')
File "/Users/markus/opt/anaconda3/lib/python3.9/site-packages/phenodata/dwd/pheno.py", line 445, in scan_files
entries = self.cdc.ftp.scan_files(
File "/Users/markus/opt/anaconda3/lib/python3.9/site-packages/phenodata/ftp.py", line 182, in scan_files
child_items = self.list_plus(url)
File "/Users/markus/opt/anaconda3/lib/python3.9/site-packages/phenodata/ftp.py", line 108, in list_plus
return self.cache.meta.get_or_create(key, lambda: self.list_plus_real(url))
File "/Users/markus/opt/anaconda3/lib/python3.9/site-packages/dogpile/cache/region.py", line 1042, in get_or_create
with Lock(
File "/Users/markus/opt/anaconda3/lib/python3.9/site-packages/dogpile/lock.py", line 185, in __enter__
return self._enter()
File "/Users/markus/opt/anaconda3/lib/python3.9/site-packages/dogpile/lock.py", line 87, in _enter
value = value_fn()
File "/Users/markus/opt/anaconda3/lib/python3.9/site-packages/dogpile/cache/region.py", line 977, in get_value
value = self._get_from_backend(key)
File "/Users/markus/opt/anaconda3/lib/python3.9/site-packages/dogpile/cache/region.py", line 1264, in _get_from_backend
return self._parse_serialized_from_backend(
File "/Users/markus/opt/anaconda3/lib/python3.9/site-packages/dogpile/cache/region.py", line 1221, in _parse_serialized_from_backend
metadata = json.loads(bytes_metadata)
File "/Users/markus/opt/anaconda3/lib/python3.9/json/__init__.py", line 341, in loads
s = s.decode(detect_encoding(s), 'surrogatepass')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0: invalid start byte
Hi Markus,
Möglicherweise liegt es wieder an korrupten Inhalten im Cache Verzeichnis, siehe auch Troubles with phenodata - #14 by poesel. Lösche es doch wieder einmal komplett.
Bei mir läuft das Programm fehlerfrei mit dem von Dir genannten Aufruf, liefert aber keine Ergebnisse.
| Jahr | Datum | Tag | Spezies | Phase | Station |
|--------|---------|-------|-----------|---------|-----------|
Hier noch meine Programmversionen:
$ python -V
Python 3.8.12
$ phenodata --version
phenodata 0.11.0
Viele Grüße,
Andreas.
Analyse
Diese Aufrufe liefern etwas. Immerhin.
phenodata observations --source=dwd --dataset=annual --partition=recent --humanize \
--phase="beginning of flowering" --species-preset=mellifera-de-primary --station=Villigst
phenodata forecast --source=dwd --dataset=annual --partition=recent --humanize \
--phase="beginning of flowering" --species-preset=mellifera-de-primary --station=Villigst
Ursache
Der Parameter --year
geht scheinbar nicht (mehr).
Lösung / Workaround
Wenn man ihn weglässt, bekommt man Ergebnisse, auch mit Deinem ursprünglichen Aufruf.
phenodata forecast --source=dwd --dataset=annual --partition=recent \
--phase="beginning of flowering" --humanize --language=german --sort=Datum \
--species-preset=mellifera-de-primary --format=tabular:pipe \
--station=Villigst
Jahr | Datum | Tag | Spezies | Phase | Station |
---|---|---|---|---|---|
2022 | 2022-01-16 | 16 | Schneeglöckchen | Blüte Beginn | Villigst, Nordrhein-Westfalen |
2022 | 2022-02-16 | 47 | Sal-Weide | Blüte Beginn | Villigst, Nordrhein-Westfalen |
2022 | 2022-03-27 | 86 | Löwenzahn | Blüte Beginn | Villigst, Nordrhein-Westfalen |
2022 | 2022-03-27 | 86 | Süßkirsche, frühe Reife | Blüte Beginn | Villigst, Nordrhein-Westfalen |
2022 | 2022-04-04 | 94 | Winterraps | Blüte Beginn | Villigst, Nordrhein-Westfalen |
2022 | 2022-04-09 | 99 | Apfel, frühe Reife | Blüte Beginn | Villigst, Nordrhein-Westfalen |
2022 | 2022-04-10 | 100 | Süßkirsche, späte Reife | Blüte Beginn | Villigst, Nordrhein-Westfalen |
2022 | 2022-04-15 | 105 | Apfel, späte Reife | Blüte Beginn | Villigst, Nordrhein-Westfalen |
War wieder der cache - da hätte ich auch selber drauf kommen können…
Danke!