From e7828bf478dcca99876e293d62e9b9615106ea71 Mon Sep 17 00:00:00 2001 From: Mark Kors Date: Fri, 14 Nov 2025 11:12:43 +0100 Subject: [PATCH] Readme added --- README.md | 217 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..0d17d1a --- /dev/null +++ b/README.md @@ -0,0 +1,217 @@ +# 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 + +```bash +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: + +```bash +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: + +```bash +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: + +```bash +# 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: + +```bash +# 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