RadiationDerivedFeaturesAdder#

class openstef_models.transforms.weather_domain.RadiationDerivedFeaturesAdder(**data: Any) None[source]

Bases: BaseConfig, TimeSeriesTransform

Transform that adds radiation derived features to time series data.

Computes features that are derived from radiation data (in W/m²) based on geographical coordinates (latitude and longitude) and solar position.

The features added can include:

  • dni: Direct Normal Irradiance (DNI) in W/m².

  • gti: Global Tilted Irradiance (GTI) in W/m² on a tilted surface.

Note

The input radiation data must be in W/m² units.

Example

>>> import pandas as pd
>>> from datetime import timedelta
>>> from openstef_core.datasets import TimeSeriesDataset
>>> from openstef_models.transforms.weather_domain import (
...     RadiationDerivedFeaturesAdder,
... )
>>> from pydantic_extra_types.coordinate import Coordinate, Latitude, Longitude
>>>
>>> # Create sample dataset with radiation data in W/m²
>>> data = pd.DataFrame({
...     'radiation': [1000, 2000, 1500]
... }, index=pd.date_range('2025-06-01', periods=3, freq='D', tz='Europe/Amsterdam'))
>>> dataset = TimeSeriesDataset(data, sample_interval=timedelta(minutes=15))
>>>
>>> # Initialize and apply transform
>>> transform = RadiationDerivedFeaturesAdder(
...     coordinate=Coordinate(latitude=Latitude(52.0), longitude=Longitude(5.0)),
...     included_features=['dni', 'gti'],
...     surface_tilt=34.0,
...     surface_azimuth=180.0
... )
>>> transformed_dataset = transform.transform(dataset)
>>> transformed_dataset.feature_names
['radiation', 'dni', 'gti']
>>> len(transformed_dataset.data["dni"]) == 3  # Check we have 3 values
True
>>> len(transformed_dataset.data["gti"]) == 3  # Check we have 3 values
True
Parameters:

data (Any)

included_features: list[Literal['dni', 'gti']]
coordinate: Coordinate
surface_tilt: float
surface_azimuth: float
radiation_column: str
transform(data: TimeSeriesDataset) TimeSeriesDataset[source]

Transform the input data.

This method should apply a transformation to the input data and return a new instance.

Parameters:
Returns:

A new instance of the transformed data.

Raises:

NotFittedError – If the transform has not been fitted yet.

Return type:

TimeSeriesDataset

features_added() list[str][source]

List of feature names added by this transform.

Return type:

list[str]

Returns:

A list of strings representing the names of features added to the dataset by this transform. Default is an empty list.

model_config: ClassVar[ConfigDict] = {'arbitrary_types_allowed': False, 'extra': 'ignore', 'protected_namespaces': ()}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_post_init(context: Any, /) None

This function is meant to behave like a BaseModel method to initialise private attributes.

It takes context as an argument since that’s what pydantic-core passes when calling it.

Parameters:
  • self (BaseModel) – The BaseModel instance.

  • context (Any) – The context.

  • self

  • context

Return type:

None