tsfresh项目中的数据格式详解:时间序列特征提取的三种输入方式

tsfresh项目中的数据格式详解:时间序列特征提取的三种输入方式

tsfresh Automatic extraction of relevant features from time series: tsfresh 项目地址: https://gitcode.com/gh_mirrors/ts/tsfresh

引言

在时间序列分析领域,tsfresh作为一个强大的Python工具库,能够自动从时间序列数据中提取大量特征。本文将深入探讨tsfresh支持的三种数据输入格式,帮助开发者根据自身数据结构选择最适合的格式进行特征提取。

核心概念

在开始介绍具体格式前,我们需要理解tsfresh处理数据时的四个关键列概念:

  1. 实体标识列(column_id):标识时间序列所属的实体或对象,特征将针对每个实体单独提取。例如在工业设备监控中,每台设备就是一个独立实体。

  2. 排序列(column_sort):包含用于排序时间序列的值,通常是时间戳。值得注意的是,tsfresh不要求时间步长必须等距,但某些特定特征可能要求等距时间戳。

  3. 数值列(column_value):包含时间序列的实际测量值,如传感器读数。

  4. 类型列(column_kind):标识不同类型的时间序列,如不同传感器的测量数据。

重要提示:这些列中不允许包含NaN、Inf或-Inf值,否则可能导致特征提取失败。

输入格式选项详解

1. 扁平DataFrame(宽格式)

适用场景:当每种时间序列类型都有自己独立的列时使用。

特点

  • 每种时间序列类型(如不同传感器)占据单独一列
  • 不需要指定column_kind和column_value参数
  • 要求所有时间序列的时间点对齐

示例结构

| id | time | sensor1 | sensor2 |
|----|------|---------|---------|
| A  | t1   | 0.5     | 1.2     |
| A  | t2   | 0.6     | 1.3     |
| B  | t1   | 0.4     | 1.1     |

使用方法

extract_features(df, column_id="id", column_sort="time")

优缺点分析

  • 优点:结构直观,易于理解
  • 缺点:当时间序列类型很多时,列数会急剧增加;要求所有时间序列的时间点对齐

2. 堆叠DataFrame(长格式)

适用场景:当不同类型的时间序列共享相同的时间戳或时间点不对齐时使用。

特点

  • 所有时间序列值存储在一个列中
  • 使用单独的列标识时间序列类型
  • 更灵活,不要求时间点对齐

示例结构

| id | time | kind   | value |
|----|------|--------|-------|
| A  | t1   | sensor1| 0.5   |
| A  | t2   | sensor1| 0.6   |
| A  | t1   | sensor2| 1.2   |
| B  | t1   | sensor1| 0.4   |

使用方法

extract_features(df, column_id="id", column_sort="time", 
                column_kind="kind", column_value="value")

优缺点分析

  • 优点:结构紧凑,适合时间点不对齐的情况
  • 缺点:数据量较大时,行数会显著增加

3. 扁平DataFrame字典

适用场景:当不同类型的时间序列已经存储在不同的DataFrame中时使用。

特点

  • 每种时间序列类型对应一个独立的DataFrame
  • 字典键作为时间序列类型标识
  • 每个DataFrame只需包含id、时间和值列

示例结构

{
    "sensor1": DataFrame1,
    "sensor2": DataFrame2
}

其中DataFrame1结构:

| id | time | value |
|----|------|-------|
| A  | t1   | 0.5   |
| A  | t2   | 0.6   |

使用方法

extract_features(df_dict, column_id="id", column_sort="time", 
                column_value="value")

优缺点分析

  • 优点:天然分离不同类型的时间序列,便于预处理
  • 缺点:需要预先组织数据为字典结构

输出格式说明

无论采用哪种输入格式,tsfresh的特征提取结果都遵循相同的输出结构:

  • 每行对应一个实体(由column_id指定)
  • 每列对应一个特征
  • 特征命名遵循"类型_特征名"的格式

示例输出:

| id | sensor1_max | sensor1_min | sensor2_max |
|----|-------------|-------------|-------------|
| A  | 0.6         | 0.5         | 1.3         |
| B  | 0.4         | 0.4         | 1.1         |

选择建议

对于初学者,我们推荐以下选择策略:

  1. 如果数据已经是宽格式(每种时间序列有独立列),使用扁平DataFrame格式
  2. 如果数据是长格式或时间点不对齐,使用堆叠DataFrame格式
  3. 如果不同类型的时间序列已经分开存储,使用字典格式

常见问题解答

Q:我的数据包含缺失值怎么办? A:tsfresh不接受包含NaN的数据,需要在特征提取前进行缺失值处理,如插值或删除。

Q:时间戳必须是等间隔的吗? A:不是必须的,但某些特征(如FFT相关特征)可能需要等间隔时间戳才能计算。

Q:可以混合使用不同类型的时间序列长度吗? A:可以,特别是使用堆叠DataFrame格式时,不同时间序列可以有不同长度。

结语

理解tsfresh的数据格式要求是有效使用该库的第一步。本文介绍的三种输入格式各有优势,开发者应根据实际数据结构和分析需求选择最适合的格式。无论选择哪种格式,tsfresh都能将其转换为统一的特征矩阵,为后续的机器学习和数据分析提供有力支持。

tsfresh Automatic extraction of relevant features from time series: tsfresh 项目地址: https://gitcode.com/gh_mirrors/ts/tsfresh

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韦蓉瑛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值