Troubles with phenodata

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:

1 Like

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.

2 Likes

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',
]
1 Like

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 Datenbezug- und Manipulations-Toolkit für Open-Access-Phänologiedaten 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.
1 Like

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
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?

1 Like

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. :slight_smile:

1 Like