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

数据集的名称。

任何 字符串

值不能用空格分隔

BasicMotions

@timestamps

是否存在时间戳。

true, false

true / false 仅限

false

@missing

是否存在缺失值。

true, false

true / false 仅限

false

@univariate

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

true, false

true / false 仅限

false

@dimension

变量的数量。

整数 > 0

仅在 @univariate=false 时显示。

6

@equallength

每个实例是否具有相同的长度。

true, false

true / false 仅限

true

@serieslength

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

整数 > 0

仅在 @equallength=true 时显示。

100

@targetlabel

是否存在目标标签。

true, false

仅适用于回归数据;仅 true / false

true

@classlabel

是否存在类别标签。

false / true <字符串-1> <字符串-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

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

    • 添加信息以指示所有实例是否具有相同长度:例如:@equallength 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 的信息,请访问 教程 页面。