数据格式

tsfresh 提供了三种不同的选项来指定时间序列数据格式,以便与 tsfresh.extract_features() 函数(以及所有需要时间序列的实用函数,例如 tsfresh.utilities.dataframe_functions.roll_time_series())一起使用。

无论输入格式如何,tsfresh 始终会以如下所述的相同输出格式返回计算出的特征。

通常,输入格式选项是 pandas.DataFrame 对象(本文将讨论),以及 Dask 数据帧和 PySpark 计算图(此处讨论 大型输入数据)。

这些 DataFrames 由四种重要的列类型组成。每种类型都将结合机器人故障数据集的例子进行描述(参见 快速开始)。

column_id

此列指示时间序列属于哪个实体。将为每个实体(id)单独提取特征。生成的特征矩阵将包含每个 id 一行。每个机器人都是一个不同的实体,因此每组特征都有一个不同的 id。

column_sort

此列包含允许对时间序列进行排序的值(例如按时间戳排序)。通常,不同 id 和/或 kind 的时间步长相等,或时间尺度相同,并非必需。然而,某些特征可能仅对等距时间戳有效。如果您省略此列,则假定 DataFrame 已按升序排序。每个机器人传感器测量都有一个时间戳,用作 column_sort

仅需在某些数据格式上指定(见下文)

column_value

此列包含时间序列的实际值。这对应于机器人上不同传感器的测量值。

column_kind

此列指示不同时间序列类型的名称(例如工业应用中不同传感器的名称,如机器人数据集中所示)。将为每种时间序列单独计算特征。

重要:这些列中不允许包含 NaNInf-Inf 值。

在以下段落中,我们将描述基于这些列构建的不同输入格式:

  • 平坦型 DataFrame

  • 堆叠型 DataFrame

  • 平坦型 DataFrames 字典

平坦型和堆叠型 DataFrame 之间的区别在于,在 tsfresh.extract_features() 函数中是否指定了参数 column_valuecolumn_kind

如果您不确定选择哪种格式,可以尝试平坦型或堆叠型 DataFrame。

输入选项 1. 平坦型 DataFrame 或 宽型 DataFrame

如果 column_valuecolumn_kind 都设置为 None,则假定时间序列数据为平坦型 DataFrame。这意味着每个不同的时间序列必须保存为其自己的列。

示例:假设您记录了对象 A 和 B 在三个不同时间 t1、t2 和 t3 的时间序列 x 和 y 的值。您的结果 DataFrame 可能如下所示:

id

时间

x

y

A

t1

x(A, t1)

y(A, t1)

A

t2

x(A, t2)

y(A, t2)

A

t3

x(A, t3)

y(A, t3)

B

t1

x(B, t1)

y(B, t1)

B

t2

x(B, t2)

y(B, t2)

B

t3

x(B, t3)

y(B, t3)

现在,您想用 tsfresh 计算一些特征,您可以将

column_id="id", column_sort="time", column_kind=None, column_value=None

传递给提取函数,以便单独为所有 id 以及单独为 x 和 y 值提取特征。您也可以省略 column_kind=None, column_value=None,因为这是默认设置。

输入选项 2. 堆叠型 DataFrame 或 长型 DataFrame

如果 column_valuecolumn_kind 都已设置,则假定时间序列数据为堆叠型 DataFrame。这意味着不同类型的时间序列没有不同的列。这种表示方法比平坦型 DataFrame 有几个优点。例如,不同时间序列的时间戳不必对齐。

它不包含用于不同时间序列类型的不同列,而只包含一个值列和一个 kind 列。沿用前面的例子,DataFrame 如下所示:

id

时间

kind

value

A

t1

x

x(A, t1)

A

t2

x

x(A, t2)

A

t3

x

x(A, t3)

A

t1

y

y(A, t1)

A

t2

y

y(A, t2)

A

t3

y

y(A, t3)

B

t1

x

x(B, t1)

B

t2

x

x(B, t2)

B

t3

x

x(B, t3)

B

t1

y

y(B, t1)

B

t2

y

y(B, t2)

B

t3

y

y(B, t3)

然后您将设置

column_id="id", column_sort="time", column_kind="kind", column_value="value"

以得到相同的提取特征。您也可以省略值列,让 tsfresh 自动推导出来。

输入选项 3. 平坦型 DataFrames 字典

除了传递一个必须由 tsfresh 按其不同 kinds 分割的 DataFrame 外,您还可以给出一个字典,将 kind(字符串)映射到仅包含该 kind 时间序列数据的 DataFrame。因此,本质上您是为每种时间序列使用一个单独的 DataFrame。

示例中的数据可以分成两个 DataFrame,形成如下字典:

{ “x”

id

时间

value

A

t1

x(A, t1)

A

t2

x(A, t2)

A

t3

x(A, t3)

B

t1

x(B, t1)

B

t2

x(B, t2)

B

t3

x(B, t3)

, “y”

id

时间

value

A

t1

y(A, t1)

A

t2

y(A, t2)

A

t3

y(A, t3)

B

t1

y(B, t1)

B

t2

y(B, t2)

B

t3

y(B, t3)

}

您将此字典连同以下参数传递给 tsfresh:

column_id="id", column_sort="time", column_kind=None, column_value="value":

在这种情况下,我们无需指定 kind 列,因为 kind 就是相应的字典键。

输出格式

包含提取特征的结果特征矩阵对于所有三种输入选项都是相同的。它始终是 pandas.DataFrame,布局如下:

id

x_feature_1

x_feature_N

y_feature_1

y_feature_N

A

B

其中 x 特征是使用所有 x 值计算的(对于 A 和 B 分别计算),y 特征是使用所有 y 值计算的(对于 A 和 B 分别计算),依此类推。

此 DataFrame 也是 tsfresh 使用的特征选择算法(例如 tsfresh.select_features() 函数)预期的输入格式。