Historical Weather - Energy Price Forecasting System
Een machine learning systeem dat energieprijzen voorspelt op basis van weersverwachtingen voor Amersfoort, Nederland.
Overzicht
Dit project combineert historische weerdata met elektriciteitsprijzen om een XGBoost machine learning model te trainen dat toekomstige energieprijzen kan voorspellen. Het systeem genereert automatisch 72-uurs voorspellingen met visualisaties en verstuurt deze via email.
Belangrijkste Kenmerken
- Automatische weerdata verzameling via Open-Meteo API
- Machine learning voorspellingen met XGBoost
- 72-uurs prijsvoorspellingen met uurlijkse granulariteit
- Geautomatiseerde email notificaties met grafieken
- Dual-axis visualisaties die prijzen en weersdata combineren
- Cross-platform support (Windows en Linux/Synology NAS)
Projectstructuur
Hoofdscripts
| Bestand | Functie |
|---|---|
price_forecast.py |
Hoofd voorspellingsscript - genereert prijsvoorspellingen met grafieken en verstuurt emails |
voorspel_advanced.py |
Geavanceerde Windows versie met dual Y-axis grafieken (prijs + weerdata) |
voorspel_advanced_linux.py |
Linux-specifieke geavanceerde voorspellingsscript |
update_weather.py |
Incrementele weerdata updater - haalt recente weerdata op en slaat op in MySQL |
jaar_weerdata.py |
Historische weerdata downloader - haalt volledige jaren weerdata op van Open-Meteo |
train_model1.5.py |
Windows ML model trainer - traint XGBoost model met 2024-2025 data |
train_model_linux.py |
Linux ML model trainer - identiek aan Windows versie |
Data Bestanden
training_set_2024_2025.csv- Training dataset met weer- en prijsdataprice_forecast_model_v1_5.json- Getraind XGBoost model (10 MB)*_uurlijks.csv- Uurlijkse weerdata voor Amersfoort (2024-2025)*_dagelijks.csv- Dagelijkse weerdata voor Amersfoort (2024-2025)
Technologieën
Python Libraries
- XGBoost - Machine learning (gradient boosting voor regressie)
- Pandas - Data manipulatie en analyse
- NumPy - Numerieke berekeningen
- Scikit-learn - Model evaluatie metrics
- Matplotlib - Data visualisatie en grafiek generatie
- MySQL Connector - Database connectiviteit
- Requests - HTTP API calls
- SQLite3 - Lokale database opslag
- Python Holidays - Feestdagen detectie (Nederland)
- SMTP - Email notificaties
Externe APIs
- Open-Meteo API - Gratis weerdata (archief en voorspellingen)
Databases
- MySQL - Opslag voor weerdata (
amersfoort_weer_uurlijks) en energieprijzen (dynamic_price_data) - SQLite - Lokale weerdata opslag
Installatie
Vereisten
pip install xgboost pandas numpy scikit-learn matplotlib mysql-connector-python requests holidays
Database Configuratie
Het project gebruikt MySQL voor data opslag. Configureer de volgende databases:
energy_prices- Voor prijsdataalfen- Voor weerdata
Database credentials zijn embedded in de Python scripts (pas deze aan naar jouw configuratie).
Gebruik
1. Historische Weerdata Verzamelen
Download historische weerdata vanaf 1940 tot heden:
python jaar_weerdata.py
Dit script:
- Haalt data op van Open-Meteo Archive API
- Slaat uurlijkse en dagelijkse data op in SQLite
- Locatie: Amersfoort (52.15°N, 5.39°E)
2. Dagelijkse Weerdata Update
Update de weerdata incrementeel:
python update_weather.py
Dit script:
- Haalt recente weerdata op via Open-Meteo Forecast API
- Gebruikt upsert logica voor MySQL updates
- Voorkomt duplicaten
3. Model Trainen
Train het XGBoost model met historische data:
# Windows
python train_model1.5.py
# Linux
python train_model_linux.py
Het model gebruikt de volgende features:
- Weerdata: temperatuur, luchtvochtigheid, druk, wind, bewolking, zonnestraling, neerslag
- Tijd-gerelateerd: uur van de dag, dag van de week, maand, dag van het jaar
- Feestdagen indicator
- Lag features: prijzen van 1 uur en 24 uur geleden
- Rolling averages: 3-uurs temperatuur gemiddelde, 6-uurs prijs gemiddelde
- One-hot encoded: dag/uur features (31 features totaal)
Model parameters:
- 1000 estimators
- Learning rate: 0.01
- Early stopping enabled
4. Prijsvoorspellingen Genereren
Genereer 72-uurs prijsvoorspellingen:
# Basis versie
python price_forecast.py
# Geavanceerde versie (Windows)
python voorspel_advanced.py
# Geavanceerde versie (Linux)
python voorspel_advanced_linux.py
Het voorspellingsscript:
- Haalt laatste 30 uur werkelijke prijzen op uit MySQL
- Haalt toekomstige 72 uur weersverwachtingen op
- Genereert prijsvoorspellingen met het getrainde model
- Creëert dual-axis grafieken met:
- Linkse Y-as: Voorspelde prijzen (blauw) + Werkelijke prijzen (oranje)
- Rechtse Y-as: Temperatuur (rood) en Windsnelheid (groen)
- Verstuurt email met PNG grafiek en statistieken
- Toont laagste/hoogste voorspelde prijzen met tijdstippen
Output Voorbeeld
Het systeem genereert visualisaties die het volgende tonen:
- Historische prijzen (oranje lijn)
- Voorspelde prijzen voor 72 uur (blauwe lijn)
- Temperatuur verloop (rode lijn, rechtse as)
- Windsnelheid (groene lijn, rechtse as)
- Statistieken over laagste en hoogste prijzen
Email Notificaties
Automatische emails worden verstuurd met:
- PNG grafiek van voorspellingen
- Laagste voorspelde prijs en tijdstip
- Hoogste voorspelde prijs en tijdstip
- Formatted data tabel
SMTP configuratie:
- Server: 192.168.178.201:587
- Sender: sftpuser@markkors.nl
Data Flow
Open-Meteo API
↓
MySQL Database (weer + prijzen)
↓
Training Data CSV
↓
XGBoost Model Training
↓
Trained Model JSON
↓
Forecasting Script (72-uur voorspellingen)
↓
Email met PNG Grafieken
Projectcontext
- Taal: Nederlands (code comments en variabele namen)
- Locatie: Amersfoort, Nederland
- Tijdzone: Europe/Amsterdam (UTC)
- Integratie: Onderdeel van een energiemanagementsysteem (Alfen hardware/software)
- Deployment: Multi-platform (Windows en Linux/Synology NAS)
Recente Ontwikkelingen
Volgens git history:
- Basis forecasting functionaliteit
- Grafieken en email functionaliteit toegevoegd
- Linux (Synology NAS) deployment geoptimaliseerd
- Zonnestraling feature toegevoegd
- Werkelijke prijzen in voorspellingen geïntegreerd
- Model versie 1.5 met verbeterde features
Licentie
Dit is een persoonlijk project voor energiemanagement en -optimalisatie.
Contact
Mark Kors - sftpuser@markkors.nl