A lightweight and modular Python toolkit to download and parse open meteorological datasets from the Deutscher Wetterdienst (DWD) Climate Data Center.
This repository was developed as a side project to support Finn Nerlich’s Master's thesis:
"Efficiency Analysis of a Photovoltaic System – Development and Application of a Measurement Method for Determining the Efficiency of PV-Systems under Real Conditions" University of Bremen, 2025.
This project was built to simplify access to DWD datasets for research purposes and make them easier to process and analyze and keep them up to date. It provides:
- 📂 Automated data download via a recursive web scraper
- 🛠 Custom Parser Definition using the config (irradiance, solar, temperature, …)
- 🧩 JSON-based configuration for easy scaling to new datasets
- 🔍 Focus on clarity and simplicity rather than long-term feature development
- 🔽 Download entire dataset directories from Open Data Server of the German Meteorological Service (DWD)
- 📝 Concatenate raw text data into structured CSV & Feather files
- 🧮 Apply data cleaning & timestamp corrections (WOZ/MEZ logic) using custom parsers
- 🔗 Simple and scriptable for reproducible research workflows
git clone https://github.com/username/dwd-data-parser.git
cd dwd-data-parserpip install -r requirements.txtpython main.pyThis will:
- Recursively download all datasets listed in
dataset_conf.json - Concatenate raw text data into
.csvand.featherfiles - Run dataset-specific parsers (if configured)
Datasets are defined in dataset_conf.json.
Example:
{
"radiation": {
"url": "https://opendata.dwd.de/climate_environment/CDC/derived_germany/climate/hourly/duett/",
"raw_path_pattern": "duett/radiation_global/recent/stundenwerte_duett_FG_*/produkt_fg_duett*",
"output_csv": "radiation_all.csv",
"output_feather": "radiation_all.feather",
"parser": "datasets.radiation_parser.parse",
"seperator": ";",
"keep_source": true
}
}To add a new dataset:
- Write a
my_dataset_parser.pyindatasets/ - Implement a
parse()function - Add a new block in
dataset_conf.json
Example parser snippet:
def parse():
data = pd.read_csv("my_dataset.csv", sep=";")
# Clean, enrich, or transform
data.to_feather("my_dataset_parsed.feather")
return dataBibtex:
@mastersthesis{nerlich2025pv,
author = {Finn Nerlich},
title = {Efficiency Analysis of a Photovoltaic System – Development and Application of a Measurement Method for Determining the Efficiency of PV-Systems under Real Conditions},
school = {University of Bremen},
year = {2025}
}This project is archived and has no roadmap for ongoing development. However:
- ✅ Bug fixes, refactoring, or generalized parsers are welcome
- 📝 Open a pull request and describe your contribution
- 🗂 I’ll merge useful changes to make this repository a better resource
- 📥 Custom Parsers are especially welcome for other DWD datasets
This project is licensed under the GPL v3 – see the LICENSE file for details.
- DWD Climate Data Center for free and open weather datasets