MeteoSwiss is gradually releasing its data in an OpenData, machine-readable format.
Inspired by the complexity of the field and the precision achieved by MeteoSwiss, this repo is an end-to-end attempt to model meteorological data and build a personal climate predictor.
⚠️ Disclaimer: This project is a personal exercise in ML and coding.
Any other use or interpretation is outside my responsibility.
I don’t know how MeteoSwiss tackles the problem and I don’t have their full data or compute.
Everything here is built from scratch. If external methods/datasets are added, they’ll be documented explicitly.
A key feature is a graph of Swiss districts and a graph of meteorological stations.
The workflow:
- Build an adjacency graph of Swiss administrative areas (district level for now).
- Bind district centroids to nearby meteo stations using great-circle distances.
- Let the model learn spatial dependencies and propagate meteo signals over the graph.
Current targets:
- Next hour
- Current day (08:00 → 07:59 next day)
- Next 5 days
Variables:
- Temperature
- Humidity
- Sunlight duration
Each prediction includes auxiliary estimates and uncertainty scores.
- 158 ground stations (daily aggregates: e.g., min/max temp, etc.)
- 148 Swiss districts (graph nodes are district centroids)
| Radius (km) | # Links | % of E_max | Bar |
|---|---|---|---|
| 5 | 45 | 0.41% | # |
| 20 | 641 | 5.89% | ### |
| 50 | 3,341 | 30.71% | ############### |
| 100 | 10,090 | 92.76% | ############################################## |
Max possible undirected edges (n=148) = 10,878 (bar width = 50)
![]() |
![]() |
|---|---|
| ≤ 5 km | ≤ 20 km |
![]() |
![]() |
| ≤ 50 km | ≤ 100 km |
- v.0.0.0: District level predictions of next hour weather conditions
- v.0.1.0: District and cantonal prediction of next hour and next day
- v.0.1.0: District, cantonal prediction of next hour, next day, next 5 days
- v.1.0.0: Municipal, district, cantonal and PLZ prediction of next hour, day and 5 days
- GeoJsons of Switzerland: [mikpan]
- Locations of stations are deduced by querying [SwissTopo]





