-
Notifications
You must be signed in to change notification settings - Fork 10
Description
In der DWD API-Dokumentation heißt es
Beim Parameter stationsIds handelt es sich um die Stationskennungen. Die List der Stationskennungen kann z.B. hier eingesehen werden.
Im oben verlinkten Stationslexikon habe ich in die Tabelle geschaut und gemerkt, dass die Stationskennung 10519 doppelt für verschiedene Städte vorkommt, und zwar neben Königswinter-Heiderhof (mich von Interesse) auch in Karlsruhe-Durlach.
import pandas as pd
stations_lexikon = pd.read_html("https://www.dwd.de/DE/leistungen/klimadatendeutschland/statliste/statlex_html.html?view=nasPublication")[0]["Stationslexikon"]
print(stations_lexikon[stations_lexikon["Stations-kennung"] == "10519"][
["Stations_ID", "Stations-kennung", "Stationsname"]
])
# Stations_ID Stations-kennung Stationsname
# 8348 10519 10519 Karlsruhe-Durlach (Ph)
# 9203 603 10519 Königswinter-Heiderhof
# 9206 603 10519 Königswinter-HeiderhofIch bin nicht überrascht dass die gleiche Kennung für mehrere Stationen unterschiedlichen Typs in einer Stadt erhalte, aber dass die gleiche Stationskennung in verschiedenen Städten vorkommt hat mich überrascht, weil ich erwartet hatte, damit über die API eindeutig Wetterdaten für einen bestimmten Standort zu erhalten.
Wenn ich in der API die Stationskennung 10519 verwende, bekomme ich die Wetterdaten für Königswinter-Heiderho und nicht Karlsruhef, jedenfalls scheint es so wenn ich die Temperaturen vergleichen mit dem was ich in der DWD-App sehe. Das ist eigentlich auch was ich möchte.
Auf diese Duplizierung kam ich nur, weil ich in meinem Skript eine Funktion schreiben wollte, die von der stationID automatisch den Stationsnamen über das Stationslexikon herausholt, was jetzt aber doch nicht so eindeutig ist wie ich erhofft hatte.
Das kommt sogar recht häufig vor
station_name_counts = stations_lexikon.groupby("Stations-kennung")["Stationsname"].agg(
[lambda namen: len(set(namen)), lambda namen: set(namen)]
)
station_name_counts.columns = ["counts", "Stationsnamen"]
station_name_counts = station_name_counts[station_name_counts["counts"] > 1]
station_name_counts.sort_values("counts", ascending=False)
# counts Stationsnamen
# Stations-kennung
# 10791 3 {Großer Arber, Obereschach, Grosser Falkenstein}
# 10639 3 {Langen (BZ), Darmstadt (US-Air-Base), Lauda-K...
# 10156 3 {Lübeck, Sankt Goarshausen, Lübeck-Blankensee}
# 10515 3 {Heidelberg-Königstuhl, Koblenz, Bendorf}
# 10875 3 {Hayingen (PH), Mühldorf, Obertaufkirchen}
# ... ... ...
# 10424 2 {Leonberg/Württ., Werl}
# 10419 2 {Ingelfingen (PH), Lüdenscheid (Flugplatz)}
# 10418 2 {Lüdenscheid, Hermuthausen}
# 10410 2 {Weinsberg, Essen-Bredeney}
# T362 2 {Winterberg, Winterberg-Altastenberg}
#
# [402 rows x 2 columns]War mir nicht sicher wen ich hier am besten zuerst anpingen soll und über welche Kanäle, aber dachte vielleicht kriege ich über ein Issue Antworten, vielleicht weiß jemand von euch mehr. Vermute die Stations-kennung ist vielleicht nur innnerhalb eines Stationstyps eindeutig. Z.B. ist 10519 in Karlsruhe-Durlach vom Typ PE (phänologische Beobachtungen) und die sind vielleicht eh nicht über die API erreichbar, bin mir aber nicht sicher, denn wüsste jetzt nicht wie ich Karlsruhe-Durlach 10519 über die API anpingen kann 🤷
Was von Seiten der API-Dokumentation gemacht werden muss ist möglicherweise nur ein Hinweis zum Kommentar zur stationID, vielleiht gibt es aber auch weitere Parameter mit denen man die die Stations einschränken kann?
Übrigens ist mir auch bewusst, dass die Stationslexikon-Tabelle nicht Teil der API ist, aber irgendwie gehört sie meines Erachtens nach zur Dokumentation und daher würde ich sie gerne verstehen.