data.manydataset.load_sequence_data

data.manydataset.load_sequence_data(
    data,
    target,
    group_by,
    drop=None,
    input_features=None,
    feature_scaling=None,
    target_scaling=None,
    dataset_type='many_to_many',
)

Group a DataFrame into a variable-length sequence dataset.

Splits data by the values of group_by (e.g. one compressor speed line per group) and wraps the groups in a ManyToManyDataset or ManyToOneDataset. Ported from the schu25a study’s load_data helper (src/rnn/utils.py); the experiment-specific column defaults were removed.

Parameters

Name Type Description Default
data pd.DataFrame Input data; one row per time step. required
target str The target column name. required
group_by str Column whose values define the sequences. required
drop Optional[Union[str, List[str]]] Column(s) to drop from the groups before extracting features. Defaults to None. None
input_features Optional[List[str]] Columns scaled by feature_scaling. Only used when feature_scaling is given; the dataset features are always all columns except drop and target. Defaults to None. None
feature_scaling Optional sklearn-style scaler; applied in place to data[input_features] via fit_transform. Defaults to None. None
target_scaling Optional sklearn-style scaler; applied in place to data[target] via fit_transform. Defaults to None. None
dataset_type str Dataset flavor. Options: - “many_to_many”: one target value per time step. - “many_to_one”: one scalar target per sequence. Defaults to “many_to_many”. 'many_to_many'

Returns

Name Type Description
tuple Tuple[Dataset, pd.DataFrame] (dataset, data) — the sequence dataset and the (possibly scaled) DataFrame.

Raises

Name Type Description
ValueError If dataset_type is not “many_to_many” or “many_to_one”.

Examples

import pandas as pd
from spotoptim.data.manydataset import load_sequence_data

df = pd.DataFrame({
    "line": [1, 1, 1, 2, 2],
    "x": [0.1, 0.2, 0.3, 0.4, 0.5],
    "y": [1.0, 2.0, 3.0, 4.0, 5.0],
})
ds, df = load_sequence_data(df, target="y", group_by="line", drop="line")
print(len(ds), ds[0][0].shape)
2 torch.Size([3, 1])