Readme added
This commit is contained in:
217
README.md
Normal file
217
README.md
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user