bundesAPI / dwd-api

https://dwd.api.bund.dev/
93 stars 9 forks source link

Wetterstationen in verschiedenen Städten mit gleicher Stationskennung #13

Open meliache opened 2 years ago

meliache commented 2 years ago

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

Ich 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 :shrug:

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.

AndreasFischer1985 commented 2 years ago

Bei dem Eintrag von Karlsruhe-Durchlach (Ph) mit Stationskennung 10519 steht unter Ende der 10.09.1998, bei Königswiter-Heiderhof (zwei Einträge mit unterschiedlicher Kennung aber derselben Stationskennung) steht unter Beginn frühestens 03.03.1999 - evtl. werden Stationskennungen ab und an schlicht neu vergeben wenn alte Stationen stillgelegt wurden?