“解决方法”解决方案:
使用“roll_time_series”函数两次;一个用于“backward”滚动(设置rolling_direction=1),第二个用于“forward”(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')