Обходное решение:
Дважды используйте функцию "roll_time_series
"; один для « назад » (настройка rolling_direction=1
) и второй для « вперед » (rolling_direction=-1
), а затем объедините их в один.
Это обеспечит для каждого момента времени в исходном наборе данных m_{i,j}
$ скользящий объект временного ряда с 360 значениями «из прошлого» и 360 значениями «из будущего» (т. Е. Момент времени находится в центре окна и max_timeshift=360
)
Обратите внимание на использование следующих функций: pandas
: concat(), sort_values(), drop_duplicates()
- которые обязательны для работы этого решения.
import numpy as np
import pandas as pd
from tsfresh.utilities.dataframe_functions import roll_time_series
from tsfresh.feature_extraction import EfficientFCParameters, MinimalFCParameters
rolled_backward = roll_time_series(activity_data,
column_id=id_column,
column_sort=sort_column,
column_kind=None,
rolling_direction=1,
max_timeshift=360)
rolled_farward = roll_time_series(activity_data,
column_id=id_column,
column_sort=sort_column,
column_kind=None,
rolling_direction=-1,
max_timeshift=360)
# merge into one dataframe, with rolled_farward and rolled_backward window for every time point (sample)
df = pd.concat([rolled_backward, rolled_farward])
# important! - sort and drop duplicates
df.sort_values(by=[id_column, sort_column], inplace=True)
df.drop_duplicates(subset=[id_column, sort_column, 'activity'], inplace=True, keep='first')