sktime.benchmarking.data 源代码

"""Data storage for benchmarking."""

__all__ = ["UEADataset", "RAMDataset", "make_datasets"]
__author__ = ["viktorkaz", "mloning"]

import os

import pandas as pd

from sktime.benchmarking.base import BaseDataset, HDDBaseDataset
from sktime.datasets import load_from_tsfile_to_dataframe


[文档]class UEADataset(HDDBaseDataset): """Represent a dataset in UEA/UCR format on the hard-drive.""" def __init__( self, path, name, suffix_train="_TRAIN", suffix_test="_TEST", fmt=".ts", target_name="target", ): super().__init__(path, name) # create all the necessary attributes for UAEDataset object # store a dataset self._target_name = target_name self._suffix_train = suffix_train self._suffix_test = suffix_test self._fmt = fmt # generate and validate file paths filename = os.path.join(self.path, self.name, self.name) self._train_path = filename + self._suffix_train + self._fmt self._validate_path(self._train_path) self._test_path = filename + self._suffix_test + self._fmt self._validate_path(self._test_path)
[文档] def load(self): """Load dataset.""" # load training and test set from separate files X_train, y_train = load_from_tsfile_to_dataframe( self._train_path, return_separate_X_and_y=True ) X_test, y_test = load_from_tsfile_to_dataframe( self._test_path, return_separate_X_and_y=True ) # combine into single dataframe data_train = pd.concat([X_train, pd.Series(y_train)], axis=1) data_test = pd.concat([X_test, pd.Series(y_test)], axis=1) # rename target variable data_train.rename( columns={data_train.columns[-1]: self._target_name}, inplace=True ) data_test.rename( columns={data_test.columns[-1]: self._target_name}, inplace=True ) # concatenate the two dataframes, keeping training and test split in # index, necessary for later optional CV data = pd.concat([data_train, data_test], axis=0, keys=["train", "test"]) return data
[文档]class RAMDataset(BaseDataset): """Represent a dataset in RAM.""" def __init__(self, dataset, name): """Container for storing a dataset in memory.""" if not isinstance(dataset, pd.DataFrame): raise ValueError( f"Dataset must be pandas DataFrame, but found: " f"{type(dataset)}" ) self._dataset = dataset super().__init__(name=name)
[文档] def load(self): """Load dataset.""" return self._dataset
def make_datasets(path, dataset_cls, names=None, **kwargs): """Make datasets.""" # check dataset class # if not isinstance(dataset_cls, BaseDataset): # raise ValueError(f"dataset must inherit from BaseDataset, but found:" # f"{type(dataset_cls)}") # check dataset names if names is not None: if not isinstance(names, list): raise ValueError(f"names must be a list, but found: {type(names)}") else: names = os.listdir(path) # get names if names is not specified # generate datasets datasets = [dataset_cls(path=path, name=name, **kwargs) for name in names] return datasets