2025-11-14 11:12:43 +01:00
2025-11-13 08:42:21 +01:00
2025-11-13 12:46:48 +01:00
2025-11-13 08:42:21 +01:00
2025-11-13 08:42:21 +01:00
2025-11-13 08:42:21 +01:00
2025-11-13 08:42:21 +01:00
2025-11-13 08:42:21 +01:00
2025-11-13 08:42:21 +01:00
2025-11-14 11:12:43 +01:00
2025-11-13 08:42:21 +01:00
2025-11-13 08:42:21 +01:00
2025-11-13 08:42:21 +01:00
2025-11-13 08:42:21 +01:00
2025-11-13 08:42:21 +01:00

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 prijsdata
  • price_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 prijsdata
  • alfen - 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:

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

Description
AI voor voorspelling energieprijzen
Readme 9.4 MiB
Languages
Jupyter Notebook 73.4%
Python 26.6%