Python examples#
DWD: Historical weather observations#
Get available parameters for daily historical data of DWD:
In [1]: from wetterdienst import Resolution, Period
In [2]: from wetterdienst.provider.dwd.observation import DwdObservationRequest
In [3]: observations_meta = DwdObservationRequest.discover(
...: resolution=Resolution.DAILY,
...: )
...:
# Available parameter sets
In [4]: print(observations_meta)
{'daily': {'wind_gust_max': {'origin': 'm / s', 'si': 'm / s'}, 'wind_speed': {'origin': 'm / s', 'si': 'm / s'}, 'precipitation_height': {'origin': 'mm', 'si': 'kg / m ** 2'}, 'precipitation_form': {'origin': '-', 'si': '-'}, 'sunshine_duration': {'origin': 'hr', 'si': 's'}, 'snow_depth': {'origin': 'cm', 'si': 'm'}, 'cloud_cover_total': {'origin': '1/8', 'si': 'pct'}, 'pressure_vapor': {'origin': 'hPa', 'si': 'Pa'}, 'pressure_air_site': {'origin': 'hPa', 'si': 'Pa'}, 'temperature_air_mean_200': {'origin': '°C', 'si': 'K'}, 'humidity': {'origin': 'pct', 'si': 'pct'}, 'temperature_air_max_200': {'origin': '°C', 'si': 'K'}, 'temperature_air_min_200': {'origin': '°C', 'si': 'K'}, 'temperature_air_min_005': {'origin': '°C', 'si': 'K'}, 'snow_depth_new': {'origin': 'cm', 'si': 'm'}, 'temperature_soil_mean_002': {'origin': '°C', 'si': 'K'}, 'temperature_soil_mean_005': {'origin': '°C', 'si': 'K'}, 'temperature_soil_mean_010': {'origin': '°C', 'si': 'K'}, 'temperature_soil_mean_020': {'origin': '°C', 'si': 'K'}, 'temperature_soil_mean_050': {'origin': '°C', 'si': 'K'}, 'temperature_soil_mean_100': {'origin': '°C', 'si': 'K'}, 'radiation_sky_long_wave': {'origin': 'J / cm ** 2', 'si': 'J / m ** 2'}, 'radiation_sky_short_wave_diffuse': {'origin': 'J / cm ** 2', 'si': 'J / m ** 2'}, 'radiation_global': {'origin': 'J / cm ** 2', 'si': 'J / m ** 2'}, 'snow_depth_excelled': {'origin': 'cm', 'si': 'm'}, 'water_equivalent_snow_depth': {'origin': 'mm', 'si': 'kg / m ** 2'}, 'water_equivalent_snow_depth_excelled': {'origin': 'mm', 'si': 'kg / m ** 2'}, 'count_weather_type_fog': {'origin': '-', 'si': '-'}, 'count_weather_type_thunder': {'origin': '-', 'si': '-'}, 'count_weather_type_storm_strong_wind': {'origin': '-', 'si': '-'}, 'count_weather_type_storm_stormier_wind': {'origin': '-', 'si': '-'}, 'count_weather_type_dew': {'origin': '-', 'si': '-'}, 'count_weather_type_glaze': {'origin': '-', 'si': '-'}, 'count_weather_type_ripe': {'origin': '-', 'si': '-'}, 'count_weather_type_sleet': {'origin': '-', 'si': '-'}, 'count_weather_type_hail': {'origin': '-', 'si': '-'}}}
# Available individual parameters
In [5]: observations_meta = DwdObservationRequest.discover(
...: resolution=Resolution.DAILY, flatten=False
...: )
...:
In [6]: print(observations_meta)
{'daily': {'climate_summary': {'quality_wind': {'origin': '-', 'si': '-'}, 'wind_gust_max': {'origin': 'm / s', 'si': 'm / s'}, 'wind_speed': {'origin': 'm / s', 'si': 'm / s'}, 'quality_general': {'origin': '-', 'si': '-'}, 'precipitation_height': {'origin': 'mm', 'si': 'kg / m ** 2'}, 'precipitation_form': {'origin': '-', 'si': '-'}, 'sunshine_duration': {'origin': 'hr', 'si': 's'}, 'snow_depth': {'origin': 'cm', 'si': 'm'}, 'cloud_cover_total': {'origin': '1/8', 'si': 'pct'}, 'pressure_vapor': {'origin': 'hPa', 'si': 'Pa'}, 'pressure_air_site': {'origin': 'hPa', 'si': 'Pa'}, 'temperature_air_mean_200': {'origin': '°C', 'si': 'K'}, 'humidity': {'origin': 'pct', 'si': 'pct'}, 'temperature_air_max_200': {'origin': '°C', 'si': 'K'}, 'temperature_air_min_200': {'origin': '°C', 'si': 'K'}, 'temperature_air_min_005': {'origin': '°C', 'si': 'K'}}, 'precipitation_more': {'quality': {'origin': '-', 'si': '-'}, 'precipitation_height': {'origin': 'mm', 'si': 'kg / m ** 2'}, 'precipitation_form': {'origin': '-', 'si': '-'}, 'snow_depth': {'origin': 'cm', 'si': 'm'}, 'snow_depth_new': {'origin': 'cm', 'si': 'm'}}, 'solar': {'quality': {'origin': '-', 'si': '-'}, 'radiation_sky_long_wave': {'origin': 'J / cm ** 2', 'si': 'J / m ** 2'}, 'radiation_sky_short_wave_diffuse': {'origin': 'J / cm ** 2', 'si': 'J / m ** 2'}, 'radiation_global': {'origin': 'J / cm ** 2', 'si': 'J / m ** 2'}, 'sunshine_duration': {'origin': 'hr', 'si': 's'}}, 'temperature_soil': {'quality': {'origin': '°C', 'si': '-'}, 'temperature_soil_mean_002': {'origin': '°C', 'si': 'K'}, 'temperature_soil_mean_005': {'origin': '°C', 'si': 'K'}, 'temperature_soil_mean_010': {'origin': '°C', 'si': 'K'}, 'temperature_soil_mean_020': {'origin': '°C', 'si': 'K'}, 'temperature_soil_mean_050': {'origin': '°C', 'si': 'K'}, 'temperature_soil_mean_100': {'origin': '°C', 'si': 'K'}}, 'water_equivalent': {'qn_6': {'origin': '-', 'si': '-'}, 'snow_depth_excelled': {'origin': 'cm', 'si': 'm'}, 'snow_depth': {'origin': 'cm', 'si': 'm'}, 'water_equivalent_snow_depth': {'origin': 'mm', 'si': 'kg / m ** 2'}, 'water_equivalent_snow_depth_excelled': {'origin': 'mm', 'si': 'kg / m ** 2'}}, 'weather_phenomena': {'quality': {'origin': '-', 'si': '-'}, 'count_weather_type_fog': {'origin': '-', 'si': '-'}, 'count_weather_type_thunder': {'origin': '-', 'si': '-'}, 'count_weather_type_storm_strong_wind': {'origin': '-', 'si': '-'}, 'count_weather_type_storm_stormier_wind': {'origin': '-', 'si': '-'}, 'count_weather_type_dew': {'origin': '-', 'si': '-'}, 'count_weather_type_glaze': {'origin': '-', 'si': '-'}, 'count_weather_type_ripe': {'origin': '-', 'si': '-'}, 'count_weather_type_sleet': {'origin': '-', 'si': '-'}, 'count_weather_type_hail': {'origin': '-', 'si': '-'}}, 'weather_phenomena_more': {'quality': {'origin': '-', 'si': '-'}, 'count_weather_type_sleet': {'origin': '-', 'si': '-'}, 'count_weather_type_hail': {'origin': '-', 'si': '-'}, 'count_weather_type_fog': {'origin': '-', 'si': '-'}, 'count_weather_type_thunder': {'origin': '-', 'si': '-'}}}}
Get stations for daily historical precipitation:
In [7]: from wetterdienst import Resolution, Period
In [8]: from wetterdienst.provider.dwd.observation import DwdObservationDataset
In [9]: stations = DwdObservationRequest(
...: parameter=DwdObservationDataset.PRECIPITATION_MORE,
...: resolution=Resolution.DAILY,
...: period=Period.HISTORICAL
...: )
...:
In [10]: print(stations.all().df.head())
station_id ... state
0 00001 ... Baden-Württemberg
1 00002 ... Nordrhein-Westfalen
2 00003 ... Nordrhein-Westfalen
3 00004 ... Nordrhein-Westfalen
4 00006 ... Baden-Württemberg
[5 rows x 8 columns]
Get data for a dataset:
In [11]: from wetterdienst import Resolution, Period
In [12]: from wetterdienst.provider.dwd.observation import DwdObservationDataset
In [13]: stations = DwdObservationRequest(
....: parameter=DwdObservationDataset.PRECIPITATION_MORE,
....: resolution=Resolution.DAILY,
....: period=Period.HISTORICAL
....: )
....:
In [14]: print(next(stations.all().values.query()))
ValuesResult(df= station_id dataset ... value quality
0 00001 precipitation_more ... 0.0 1.0
1 00001 precipitation_more ... 0.2 1.0
2 00001 precipitation_more ... 0.0 1.0
3 00001 precipitation_more ... 1.0 1.0
4 00001 precipitation_more ... 2.1 1.0
... ... ... ... ... ...
105915 00001 precipitation_more ... 0.0 10.0
105916 00001 precipitation_more ... 0.0 10.0
105917 00001 precipitation_more ... 0.0 10.0
105918 00001 precipitation_more ... 0.0 10.0
105919 00001 precipitation_more ... 0.0 10.0
[105920 rows x 6 columns], stations=StationsResult(df= station_id ... state
0 00001 ... Baden-Württemberg
1 00002 ... Nordrhein-Westfalen
2 00003 ... Nordrhein-Westfalen
3 00004 ... Nordrhein-Westfalen
4 00006 ... Baden-Württemberg
... ... ... ...
5646 19356 ... Thüringen
5647 19364 ... Thüringen
5648 19365 ... Niedersachsen
5649 19378 ... Thüringen
5650 19399 ... Rheinland-Pfalz
[5651 rows x 8 columns]))
Get data for a parameter:
In [15]: from wetterdienst import Resolution, Period
In [16]: from wetterdienst.provider.dwd.observation import DwdObservationParameter
In [17]: observation_data = DwdObservationRequest(
....: parameter=DwdObservationParameter.DAILY.PRECIPITATION_HEIGHT,
....: resolution=Resolution.DAILY,
....: period=Period.HISTORICAL
....: )
....:
In [18]: print(next(stations.all().values.query()))
ValuesResult(df= station_id dataset ... value quality
0 00001 precipitation_more ... 0.0 1.0
1 00001 precipitation_more ... 0.2 1.0
2 00001 precipitation_more ... 0.0 1.0
3 00001 precipitation_more ... 1.0 1.0
4 00001 precipitation_more ... 2.1 1.0
... ... ... ... ... ...
105915 00001 precipitation_more ... 0.0 10.0
105916 00001 precipitation_more ... 0.0 10.0
105917 00001 precipitation_more ... 0.0 10.0
105918 00001 precipitation_more ... 0.0 10.0
105919 00001 precipitation_more ... 0.0 10.0
[105920 rows x 6 columns], stations=StationsResult(df= station_id ... state
0 00001 ... Baden-Württemberg
1 00002 ... Nordrhein-Westfalen
2 00003 ... Nordrhein-Westfalen
3 00004 ... Nordrhein-Westfalen
4 00006 ... Baden-Württemberg
... ... ... ...
5646 19356 ... Thüringen
5647 19364 ... Thüringen
5648 19365 ... Niedersachsen
5649 19378 ... Thüringen
5650 19399 ... Rheinland-Pfalz
[5651 rows x 8 columns]))
Get data for a parameter from another dataset:
In [19]: from wetterdienst import Resolution, Period
In [20]: from wetterdienst.provider.dwd.observation import DwdObservationRequest
In [21]: observation_data = DwdObservationRequest(
....: parameter=[("precipitation_height", "precipitation_more")],
....: resolution=Resolution.DAILY,
....: period=Period.HISTORICAL
....: )
....:
In [22]: print(next(stations.all().values.query()))
ValuesResult(df= station_id dataset ... value quality
0 00001 precipitation_more ... 0.0 1.0
1 00001 precipitation_more ... 0.2 1.0
2 00001 precipitation_more ... 0.0 1.0
3 00001 precipitation_more ... 1.0 1.0
4 00001 precipitation_more ... 2.1 1.0
... ... ... ... ... ...
105915 00001 precipitation_more ... 0.0 10.0
105916 00001 precipitation_more ... 0.0 10.0
105917 00001 precipitation_more ... 0.0 10.0
105918 00001 precipitation_more ... 0.0 10.0
105919 00001 precipitation_more ... 0.0 10.0
[105920 rows x 6 columns], stations=StationsResult(df= station_id ... state
0 00001 ... Baden-Württemberg
1 00002 ... Nordrhein-Westfalen
2 00003 ... Nordrhein-Westfalen
3 00004 ... Nordrhein-Westfalen
4 00006 ... Baden-Württemberg
... ... ... ...
5646 19356 ... Thüringen
5647 19364 ... Thüringen
5648 19365 ... Niedersachsen
5649 19378 ... Thüringen
5650 19399 ... Rheinland-Pfalz
[5651 rows x 8 columns]))
DWD: MOSMIX forecasts#
Get stations for MOSMIX-SMALL:
In [23]: from wetterdienst import Resolution, Period
In [24]: from wetterdienst.provider.dwd.mosmix import DwdMosmixRequest, DwdMosmixType
In [25]: stations = DwdMosmixRequest(parameter="large", mosmix_type=DwdMosmixType.LARGE)
In [26]: print(stations.all().df.head())
station_id icao_id from_date ... longitude name state
0 01001 ENJA NaT ... -8.67 JAN MAYEN NaN
1 01008 ENSB NaT ... 15.47 SVALBARD NaN
2 01025 NaN NaT ... 18.92 TROMSOE NaN
3 01028 ENBJ NaT ... 19.02 BJORNOYA NaN
4 01049 ENAT NaT ... 23.37 ALTA LUFTHAVN NaN
[5 rows x 9 columns]
Get data for MOSMIX-LARGE:
In [27]: from wetterdienst import Resolution, Period
In [28]: from wetterdienst.provider.dwd.mosmix import DwdMosmixRequest, DwdMosmixType
In [29]: stations = DwdMosmixRequest(parameter="large", mosmix_type=DwdMosmixType.LARGE).filter_by_station_id(
....: station_id=["01001", "01008"]
....: )
....:
In [30]: print(stations.values.all().df.head())
station_id dataset ... value quality
0 01001 large ... 100940.0 NaN
1 01001 large ... 101010.0 NaN
2 01001 large ... 101080.0 NaN
3 01001 large ... 101160.0 NaN
4 01001 large ... 101190.0 NaN
[5 rows x 6 columns]