ts 文件格式 v1.0#

概述#

本文档包含以下内容

  • 介绍:什么是 .ts 文件,何时以及为何使用它。

  • 描述:.ts 文件的各个组成部分是什么。

  • 说明:如何创建自己的 .ts 文件。

  • 插图:一个运行示例,串联上述部分。

版本历史#

v1.0 - 2022-10-08 - 作者:Sagar Mishra

介绍#

本文档规范了 .ts 文件格式中使用的字符串标识符。以 utf-8 编码的 .ts 文件存储时间序列数据集及其相应的元数据(通过字符串标识符指定),并且可以通过任何基本编辑器(如记事本)打开进行目视检查。字符串标识符指的是文件中以 @ 开头的字符串。

.ts 文件包含以下顺序的信息块

  1. 描述块。

    它包含任意数量的以 # 开头的连续行。每个 # 后跟任意(utf-8)符号序列。ts 规范没有规定描述块的任何具体内容,但通常会包含文件中数据集的描述。例如:完整的数据字典、引用等。有关详细信息,请参阅描述块小节

  2. 元数据块。

    它包含以 @ 开头的连续行。每个 @ 后面直接跟着一个没有空格的字符串标识符(@<identifier>),然后是标识符的相应值,该值取决于标识符的类型。除了 @data 必须位于此块的末尾外,所有字符串标识符的出现顺序没有严格规定。此块中的行数取决于数据集的某些属性(例如:如果数据集是多维的,则需要额外一行来指定维度数量)。有关详细信息,请参阅元数据块小节

  3. 数据集块。

    它包含表示数据集的浮点值列表。在最简单的情况下(没有时间戳时),序列的值以逗号分隔列表表示,每个值的索引是相对于它在列表中的位置(0, 1, …, m)。一个实例可能包含 1 到多个维度,其中实例之间以换行符分隔,实例内的维度之间以冒号(:)分隔。如果存在时间戳,序列的单个数据用圆括号括起来,格式为 (YYYY-MM-DD HH:mm:ss,<value>)。响应变量位于每个实例的末尾,并通过冒号分隔。要了解数据表示,请访问 加载数据

以下是 Basic Motion.ts 文件的一个摘录,展示了所有三个块

 1#The data was generated as part of a student project where four students performed four activities whilst wearing a smart watch.
 2#The watch collects 3D accelerometer and a 3D gyroscope It consists of four classes, which are walking, resting, running and
 3#badminton.
 4...
 5@problemName BasicMotions
 6@timeStamps false
 7@missing false
 8...
 9@data
10-0.740653,-0.740653,10.208449,2.867009,-0.194301,-0.194301,-0.249618,0.516079,-0.255552:Standing
11-0.247409,-0.247409,-0.77129,-0.576154,-0.368484,-0.020851,-0.020851,-0.465607,-0.382975,-0.382975:Walking
12...

描述#

本节描述 .ts 文件的组成部分。

描述块#

这是一个可选块,用于提供数据集的上下文。sktime 加载函数会忽略所有行。我们建议用户添加能提供数据集上下文的信息,例如数据集是如何收集的、与此数据集相关的许可证类型、引用等。

元数据块#

元数据块由各种字符串标识符组成,用于包含数据集的元数据。sktime 的核心加载/写入函数依赖它们的存在来正确地将数据加载到内存中。这也有助于向不熟悉数据集的用户提供信息。

单个字符串标识符的格式是:@<identifier> [value],除了 @data 没有尾随信息。

元数据中包含的信息

  • 数据集名称

  • 是否包含时间戳

  • 是否包含缺失值

  • 是否只包含一个维度

  • 维度数量(多变量问题时)

  • 所有实例是否长度相等

  • 类别标签

字符串标识符只能写在行的开头,并且必须单独占一行。

注意

由于这些数据集通常来自不同的来源(参见 tsregressiontimeseriesclassification.com)它们的命名约定(小写 vs. 驼峰式)可能存在微小冲突。sktime 在内部处理这些不一致性。

在本文档中,我们仅使用小写字母表示标识符。

但是,如果您遇到尚未处理的不一致之处,请考虑提交一个 issue

下表简要描述了每一列

  1. 标识符:标识符名称,前面是 @,没有空格。

  2. 描述:描述标识符的用途。

  3. 值:标识符可以取的所有可能值。

  4. 附加注释:编写此标识符时需要记住的一些特殊之处。

  5. 示例:给定标识符的值示例。

标识符

描述

附加注释

示例

@problemname

数据集的名称。

任何 string

值不能包含空格

BasicMotions

@timestamps

是否存在时间戳。

true, false

只能是 truefalse

false

@missing

是否存在缺失值。

true, false

只能是 truefalse

false

@univariate

时间序列是否只有一个维度。

true, false

只能是 truefalse

false

@dimension

变量的数量。

integer > 0

仅当 @univariate=false 时存在。

6

@equallength

每个实例是否长度相等。

true, false

只能是 truefalse

true

@serieslength

每个实例中的时间戳数量。

integer > 0

仅当 @equallength=true 时存在。

100

@targetlabel

是否存在目标标签。

true, false

仅适用于回归数据;只能是 truefalse

true

@classlabel

是否存在类别标签。

false / true <string-1> <string-2> ..

仅适用于分类数据;当为 true 时,还包含以空格分隔的整数/字符串作为标签。

true Standing Running Walking Badminton

@data

标记数据的开始。

-

数据从下一行开始。

-

说明#

本节提供了创建与 sktime 兼容的 .ts 格式规范文件的完整说明。

请记住,这基于您已经拥有符合预期格式的数据集的前提。

创建数据集时需要注意的几点

  1. 标识符的总体顺序不重要,例外是 @data 应该是最后一个字符串标识符。

  2. 一行只能包含一个标识符-值对。

  3. 包含标识符的行必须以该标识符开头。

  4. 唯一允许有空格的地方是标识符与其对应值之间。

  5. 避免在行之间出现换行符。

  6. 遵循“注释、标识符、数据”的顺序

  1. 创建一个空文件

    打开您喜欢的文本编辑器(记事本也可以)。我们会先将内容添加到这个文件,最后保存为 .ts 文件。

  2. 编写描述性注释

    文件的最初几行最好用于描述数据集。这是可选的,但能提供数据集的上下文。注释行以 # 开头。

  3. 添加分类和回归数据共有的元数据

    • 添加问题名称:例如:@problemName Example

    • 添加关于是否存在缺失内容的信息:例如:@missing false

    • 添加关于时间戳的信息:例如:@timestamps true

    • 添加关于数据集是否只有一个维度信息:例如:@univariate false

    • 由于单变量(univariate)例如为 false,则添加关于维度数量的信息,否则跳过:例如:@dimension 3

    • 添加关于所有实例是否长度相等的信息:例如:@equallength true

    • 如果上述为 true,则添加关于实例长度的信息,否则跳过:例如:@serieslength 5

  4. 现在取决于您的数据集是

    1. 基于回归:添加 @targetlabel 标识符,如果存在响应变量则后跟 true,否则为 false

    2. 基于分类:添加 @classlabel 标识符。如果没有响应变量,其值为 false。如果为 true,您可以选择性地提供以空格分隔的类别标签

      • 例如:三个字符串标签:@classlabel true good bad neutral

      • 例如:两个整数标签:@classlabel true 0 1

  5. 添加标识符 @data,然后在下一行添加值。

  6. 最后,将文件保存为 <CHOOSE_NAME>.ts。编码应为 utf-8

提示

文件仍然显示为 <CHOSEN_NAME>.ts.txt?将其重命名为 <CHOSEN_NAME>.txt,然后打开终端并在该目录中输入 mv <CHOSEN_NAME>.txt <CHOSEN_NAME>.ts

插图#

这里,我们提供一个运行示例,展示按照说明完成每一步后文件会是什么样子。

我们将用于此示例的数据集如下所示(具有时间戳的多维回归数据的一个实例)

1(2004-08-10 18:00:00,1130.0),(2004-08-10 19:00:00,1217.75),(2004-08-10 20:00:00,1134.75),(2004-08-10 21:00:00,1155.5),
2(2004-08-10 22:00:00,1151.0):(2004-08-10 18:00:00,1144.24),(2004-08-11 19:00:00,1111.25),(2004-08-11 20:00:00,1065.75),
3(2004-08-11 21:00:00,992.5),(2004-08-11 22:00:00,905.76):(2004-08-11 18:00:00,903.35),(2004-08-11 19:00:00,941.0),
4(2004-08-11 20:00:00,1073.6666666667),(2004-08-11 21:00:00,1113.5),(2004-08-11 22:00:00,1100.6):3.2
  1. 让我们添加一些注释来提供数据集的上下文

1 # The following dataset is generated using sensor S in the apparatus A as shown in the following
2 # link: https://example.com/. We receive three individual variables, collected within the time duration of 4 hours.
3 # There are no missing values in the dataset and timestamps are also included.
4 # For more information about how data was collected, visit the datacollection.com.
  1. 现在,让我们添加分类和回归数据集共有的元数据

 1 # The following dataset is generated using sensor S in the apparatus A as shown in the following
 2 # link: https://example.com/. We receive three individual variables, collected within the time duration of 4 hours.
 3 # There are no missing values in the dataset and timestamps are also included.
 4 # For more information about how data was collected, visit the above mentioned link.
 5 @problemName Example
 6 @missing false
 7 @timestamps true
 8 @univariate false
 9 @dimension 3
10 @equallength true
11 @serieslength 5
  1. 由于我们有一个回归数据集,让我们将 @targetlabel 添加为 true

 1 # The following dataset is generated using sensor S in the apparatus A as shown in the following
 2 # link: https://example.com/. We receive three individual variables, collected within the time duration of 4 hours.
 3 # There are no missing values in the dataset and timestamps are also included.
 4 # For more information about how data was collected, visit the above mentioned link.
 5 @problemName Example
 6 @missing false
 7 @timestamps true
 8 @univariate false
 9 @dimension 3
10 @equallength true
11 @serieslength 5
12 @targetlabel true
  1. 最后,通过添加 @data 并在下一行添加数据来标记数据集的开始。

 1 # The following dataset is generated using sensor S in the apparatus A as shown in the following
 2 # link: https://example.com/. We receive three individual variables, collected within the time duration of 4 hours.
 3 # There are no missing values in the dataset and timestamps are also included.
 4 # For more information about how data was collected, visit the above mentioned link.
 5 @problemName Example
 6 @missing false
 7 @timestamps true
 8 @univariate false
 9 @dimension 3
10 @equallength true
11 @serieslength 5
12 @targetlabel true
13 @data
14 (2004-08-10 18:00:00,1130.0),(2004-08-10 19:00:00,1217.75),(2004-08-10 20:00:00,1134.75),(2004-08-10 21:00:00,1155.5),
15 (2004-08-10 22:00:00,1151.0):(2004-08-10 18:00:00,1144.24),(2004-08-11 19:00:00,1111.25),(2004-08-11 20:00:00,1065.75),
16 (2004-08-11 21:00:00,992.5),(2004-08-11 22:00:00,905.76):(2004-08-11 18:00:00,903.35),(2004-08-11 19:00:00,941.0),
17 (2004-08-11 20:00:00,1073.6666666667),(2004-08-11 21:00:00,1113.5),(2004-08-11 22:00:00,1100.6):3.2
  1. 保存为 sample.ts 后,文件就可以通过 sktime 加载了。

至此,创建 .ts 格式字符串标识符的方法就介绍完了。要了解更多关于 sktime 的信息,请访问 教程页面