Skip to main content

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.

📖 Documentation

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)

Source distribution for epftoolbox2 2.2.2
File Size Uploaded
epftoolbox2-2.2.2.tar.gz 14.5 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for epftoolbox2 2.2.2
File Interpreter ABI Platform
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
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page