epftoolbox2
A modern Python library for electricity price forecasting with modular data pipelines and model evaluation. Built as a complete rewrite of the original epftoolbox, this library provides a flexible, extensible framework for downloading energy market data, building forecasting models, and evaluating their performance.
Installation
pip install epftoolbox2
or with uv
uv add epftoolbox2
Verify Installation
After installation, you can verify your setup and check system information:
import epftoolbox2
epftoolbox2.verify()
Key Features
- Data Sources: ENTSOE (load, generation, prices), Open-Meteo (weather forecasts), Calendar (holidays, weekday)
- Transformers: Resample, Timezone conversion, Lag features
- Validators: Null checks, Continuity checks, EDA statistics
- Models: OLS, LassoCV
- Evaluators: MAE
- Exporters: Excel with conditional formatting, Terminal output
- Caching: Built-in data caching to avoid redundant API calls
- Pipelines: Data and model pipelines that can be saved and loaded with .yaml files
- Multiprocessing: Process-based parallelism with inner thread pools
- Extensibility: Extensible base classes for data sources, transformers, validators, models, evaluators, and exporters
Quick Start
Standalone source use
from epftoolbox2.data.sources import EntsoeSource
source = EntsoeSource("PL", api_key="YOUR_KEY", type=["load", "price"])
df = source.run("2024-01-01", "2024-06-01", cache=True)
Standalone transformer use
from epftoolbox2.data.transformers import ResampleTransformer
transformer = ResampleTransformer(freq="1h")
df = transformer.run(df)
Standalone validator use
from epftoolbox2.data.validators import NullCheckValidator
validator = NullCheckValidator(columns=["load_actual", "price"])
df = validator.run(df)
Standalone model use
from epftoolbox2.models import OLSModel
seasonal_indicators = [
"is_monday_d+{horizon}",
"is_tuesday_d+{horizon}",
"is_wednesday_d+{horizon}",
"is_thursday_d+{horizon}",
"is_friday_d+{horizon}",
"is_saturday_d+{horizon}",
"is_sunday_d+{horizon}",
"is_holiday_d+{horizon}",
"daylight_hours_d+{horizon}",
]
model = OLSModel(predictors=["load_actual", *seasonal_indicators], name="OLS")
report = model.run(df, test_start="2024-04-01", test_end="2024-06-01", target="price")
Standalone evaluator use
from epftoolbox2.evaluators import MAEEvaluator
evaluator = MAEEvaluator()
report = evaluator.run(df, test_start="2024-04-01", test_end="2024-06-01", target="price")
Standalone exporter use
from epftoolbox2.exporters import ExcelExporter
exporter = ExcelExporter("results.xlsx")
report = exporter.run(df, test_start="2024-04-01", test_end="2024-06-01", target="price")
Data Pipeline
Download and process electricity market data from ENTSOE, weather forecasts from Open-Meteo, and calendar features.
from epftoolbox2.pipelines import DataPipeline
from epftoolbox2.data.sources import EntsoeSource, OpenMeteoSource, CalendarSource
from epftoolbox2.data.transformers import ResampleTransformer
from epftoolbox2.data.validators import NullCheckValidator
pipeline = (
DataPipeline()
.add_source(EntsoeSource("PL", api_key="YOUR_KEY", type=["load", "price"]))
.add_source(OpenMeteoSource(latitude=52.23, longitude=21.01))
.add_source(CalendarSource("PL", holidays="binary", weekday="number"))
.add_transformer(ResampleTransformer(freq="1h"))
.add_validator(NullCheckValidator(columns=["load_actual", "price"]))
)
df = pipeline.run("2024-01-01", "2024-06-01", cache=True)
Model Pipeline
Train and evaluate forecasting models with built-in metrics and export capabilities.
from epftoolbox2.pipelines import ModelPipeline
from epftoolbox2.models import OLSModel, LassoCVModel
from epftoolbox2.evaluators import MAEEvaluator
from epftoolbox2.exporters import ExcelExporter
pipeline = (
ModelPipeline()
.add_model(OLSModel(predictors=["load_actual", *seasonal_indicators], name="OLS"))
.add_model(LassoCVModel(predictors=["load_actual", *seasonal_indicators], name="Lasso"))
.add_evaluator(MAEEvaluator())
.add_exporter(ExcelExporter("results.xlsx"))
)
report = pipeline.run(df, test_start="2024-04-01", test_end="2024-06-01", target="price")
Examples
See the examples/ folder for complete working examples.
Release files for epftoolbox2 2.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| epftoolbox2-2.2.2.tar.gz | 14.5 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| epftoolbox2-2.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 14.6 MB
Release files / epftoolbox2-2.2.2.tar.gz
| Download URL | epftoolbox2-2.2.2.tar.gz |
|---|---|
| Size | 14.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
90bd4c3814f9f9c8ca88dac1a285874972342d2930d673cf22f16b02994a3af1
|
|
BLAKE2b-256 checksum How to use checksums |
182c2d4b8b8c4615c0627ca147e5a03e61ef083801f0e49efcef9006370dd67c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|
Release files / epftoolbox2-2.2.2-py3-none-any.whl
| Download URL | epftoolbox2-2.2.2-py3-none-any.whl |
|---|---|
| Size | 76.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b6c378f4bd27fc6fe5ca616070855d50d0348bcc7e58b2e1609340481960660d
|
|
BLAKE2b-256 checksum How to use checksums |
3b90b303c255c24d05c493d90b161fd87b694fdc1b1d0a9b74699777d918b454
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.2
|