European Weather Alerts (Regions)
Experimental project exploring regional weather hazards over France, Spain, Germany, Italy, and Portugal. A separate Python pipeline combines Open‑Meteo archive data with OpenWeather forecast data to turn each day into hazard levels (0 = none, 3 = strong) for five hazards—heat, cold, wind, rain, and snow— aggregated at admin‑1 region level and exported as JSON into this site via a scheduled GitHub Action.
Goal
Build a fully automated, explainable pipeline that tracks regional heat, cold, wind, rain, and snow hazards, and surfaces them as interactive stories on my portfolio. Each region and day receives a discrete hazard level from 0 (no alert) to 3 (strong event) per hazard, making the maps and curves easy to read and reason about.
Approach
- Select a handful of high‑population cities per admin‑1 region (Geonames + simple filters), then treat them as representative points.
- Use the Open‑Meteo archive API to build and maintain a ~180‑day history of daily max/min temperature, max wind, accumulated rain, and snowfall per point, and the OpenWeather 5‑day / 3‑hour forecast API to refresh today and tomorrow in CI.
- Aggregate the point data to region level and apply transparent threshold rules to assign hazard levels (0–3) for each hazard and day (for example, mild alerts at level 1, strong events at level 2, and very rare/extreme situations at level 3).
- Group consecutive days above a minimum level into multi‑day events, storing their duration, maximum level, and an indicative metric such as peak temperature or max 24‑hour rainfall.
- Export region‑day records and alert events as JSON; a GitHub Action runs the pipeline nightly and keeps the website data fresh.
Guiding questions
- Which regions see the most frequent or persistent hazards over the last 180 days?
- How different are hazard patterns between northern Germany and southern Spain or Italy?
- Can a simple, rule‑based system still give useful spatial and temporal intuition?
Data
- Open‑Meteo for historical regional daily aggregates (max/min temperature, wind, precipitation, and snowfall).
- OpenWeather 5‑day / 3‑hour forecast API for short‑term forecasts (today + tomorrow) used in the daily refresh.
- Geonames city database (via geonamescache) to pick the top‑population cities per region.
- The pipeline code and CI configuration live in the weather‑alert‑pipeline repository.
- Because the project relies on free tiers, some location requests occasionally hit rate limits or timeouts. The pipeline logs and skips those points, so a small number of region–day records may be missing, but the regional patterns remain stable enough for exploration.
Hazard thresholds
To keep the pipeline explainable, all hazard levels come from simple, hand‑rolled rules applied per region and day. Level 1 marks a noticeable event, level 2 a strong episode, and level 3 an unusually intense situation:
- Heat: level 1 ≥ 30°C, level 2 ≥ 35°C, level 3 ≥ 40°C (daily max temperature).
- Cold: level 1 ≤ 0°C, level 2 ≤ −5°C, level 3 ≤ −10°C (daily min temperature).
- Wind: level 1 ≥ 50 km/h, level 2 ≥ 70 km/h, level 3 ≥ 90 km/h (daily max wind speed).
- Rain: level 1 ≥ 20 mm, level 2 ≥ 40 mm, level 3 ≥ 60 mm (daily accumulated rain).
- Snow: level 1 ≥ 10 mm, level 2 ≥ 20 mm, level 3 ≥ 40 mm (daily snowfall, water equivalent).
Headline numbers (current 180‑day window)
- Alerts captured in the current export window: 1691 total (278 heat, 191 cold, 39 wind, 1132 rain, 51 snow).
- Heat and rain drive most alerts in this 180‑day window; cold, wind, and snow rarely cross the configured thresholds, which is consistent with the June–December period covered by the current export.
- Charts often highlight three benchmark regions—Île‑de‑France, Comunidad de Madrid, and Bayern—to keep comparisons readable while still spanning different climates.
Data freshness
This page is updated automatically by a nightly GitHub Action that runs the Python weather‑alert pipeline and writes new JSON into the site repo.
- Last successful run: 2026-01-15 04:03 UTC
- History window: 180 days
- Data coverage: 2025-07-20 → 2026-01-16
- Regions in scope: DE, ES, FR, IT, PT (88 admin‑1 regions)
- Alerts in current window: 1691
Today's alerts snapshot
Latest available date: 2026-01-16 · 17 of 88 regions in alert.
Strongest alerts right now
- Galicia (ES) · Rain level 2 · Rain 54.0 mm
- Aveiro (PT) · Rain level 2 · Rain 50.0 mm
- Porto (PT) · Rain level 2 · Rain 46.6 mm
- Viana do Castelo (PT) · Rain level 2 · Rain 43.5 mm
- Braga (PT) · Rain level 2 · Rain 41.2 mm
- Coimbra (PT) · Rain level 1 · Rain 36.7 mm
Question
Where are alerts most common overall?
Static map showing, for each region, the percentage of days between 2025-07-20 and 2026-01-16 with any hazard level ≥ 1.
Question
How do regional hazards move across Europe day by day?
Animated map of France, Spain, Germany, Italy, and Portugal where each region polygon (NUTS2) is coloured by the strongest hazard level (heat, cold, wind, rain, or snow) on that date.
Question
Interactive regional curves
Select regions, a time window, and a metric to explore regional weather histories. The thin dashed line marks today in the selected window.
Use the buttons to switch country; click region names to add or remove them. The thin dashed vertical line marks today's date in the selected window.
Question
Which regions are most persistently in alert?
Each point is a region. The x‑axis shows the percentage of days between 2025-07-20 and 2026-01-16 (181 days) with any hazard level ≥ 1; the y‑axis shows the average hazard level (0–3) over the same period. Bubble size encodes average max temperature (°C).
Conclusion
Over this 180‑day window, southern regions (for example Andalucía, parts of Italy, and southern France) spend a much larger fraction of days in elevated hazard levels than northern Germany or northern France. The static map and persistence scatter clearly separate the warm, highly exposed south from the cooler north: many southern regions have alerts on roughly half of the days, whereas northern coastal regions sit much lower and rarely see snow or strong heat alerts. Rain‑driven alerts are rarer but highly clustered in space and time, often tied to a handful of multi‑day events, while snow alerts are confined to a small number of mountainous and high‑latitude regions.
From a systems perspective, the project shows that a small, well‑instrumented pipeline—API calls, simple aggregation, explicit thresholds, and CI to push JSON into a static site—is enough to keep a regional hazard dashboard up to date without running a dedicated backend. The same pattern (external data → regional aggregation → JSON export → scheduled GitHub Action) can be reused for other topics such as grid stress indices, drought metrics, or tourism demand.