时间序列库提供单变量、多变量、多键时间序列以及数字和分类类型的各种函数。
该库提供的功能广义上可分类为:
- 时间序列 I/O,用于创建和保存时间序列数据
- 时间序列函数、变换、窗口化或分段,以及还原器
- 时间序列 SQL 和对 Spark 的 SQL 扩展,以支持执行可扩展时间序列函数
以下部分中使用示例显示了一些键功能。
时间序列 I/O
时间序列的主要输入和输出 (I/O) 功能是通过 pandas DataFrame 或 Python 列表来实现的。 以下代码样本显示如何从 DataFrame 构造时间序列:
>>> import numpy as np
>>> import pandas as pd
>>> data = np.array([['', 'key', 'timestamp', "value"],['', "a", 1, 27], ['', "b", 3, 4], ['', "a", 5, 17], ['', "a", 3, 7], ['', "b", 2, 45]])
>>> df = pd.DataFrame(data=data[1:, 1:], index=data[1:, 0], columns=data[0, 1:]).astype(dtype={'key': 'object', 'timestamp': 'int64', 'value': 'float64'})
>>> df
key timestamp value
a 1 27.0
b 3 4.0
a 5 17.0
a 3 7.0
b 2 45.0
#Create a timeseries from a dataframe, providing a timestamp and a value column
>>> ts = tspy.time_series(df, ts_column="timestamp", value_column="value")
>>> ts
TimeStamp: 1 Value: 27.0
TimeStamp: 2 Value: 45.0
TimeStamp: 3 Value: 4.0
TimeStamp: 3 Value: 7.0
TimeStamp: 5 Value: 17.0
要从时间序列还原回 pandas DataFrame,请使用 to_df
函数:
>>> import tspy
>>> ts_orig = tspy.time_series([1.0, 2.0, 3.0])
>>> ts_orig
TimeStamp: 0 Value: 1
TimeStamp: 1 Value: 2
TimeStamp: 2 Value: 3
>>> df = ts_orig.to_df()
>>> df
timestamp value
0 0 1
1 1 2
2 2 3
数据模型
时间序列数据对于模型和数据类型没有任何标准,这与开放地理空间信息联盟 (OGC) 之类的标准所监管的一些数据类型(例如空间)不同。 时间序列数据的挑战在于需要支持的函数多种多样,这一点与 Spark 弹性分布式数据集 (RDD) 的函数类似。
数据模型允许各种操作,其中涵盖不同形式的时间序列分段或窗口化、一个时间序列到另一个时间序列的变换或转换、用于从时间序列计算静态值的还原器、用于连接多个时间序列的连接,以及来自不同时区的时间序列的收集器。 时间序列库支持新函数的即插即用,同时保持核心数据结构不可变。 该库还支持数字和分类类型的时间序列。
通过时区和各种人类可读时间格式,数据模型的一个关键方面是支持时间基准系统 (TRS)。 每个时间序列都与 TRS(系统缺省值)关联,可以随时将其重新映射到用户的任何特定选项,从而实现特定时间序列或时间序列段的轻松变换。 请参阅使用时间基准系统。
此外,由于需要处理大规模时间序列,该库通过提供用于识别最大窄时间依赖性的机制来提供惰性求值构造。 此构造与 Spark 计算图的构造非常类似,后者还会根据需要将数据加载到内存中,并且仅当需要时才实现计算。
时间序列数据类型
您可以将多个数据类型用作时间序列、生成数字、分类、数组和字典数据结构的元素。
时间序列中支持以下数据类型:
数据类型 | 描述 |
---|---|
数字 | 具有数字类型的单变量观察值(包括双精度数和整数)的时间序列。 例如:[(1, 7.2), (3, 4.5), (5, 4.5), (5, 4.6), (5, 7.1), (7, 3.9), (9, 1.1)] |
数字数组 | 具有数字类型的多变量观察值(包括双精度数和整数数组)的时间序列。 [(1, [7.2, 8.74]), (3, [4.5, 9.44]), (5, [4.5, 10.12]), (5, [4.6, 12.91]), (5, [7.1, 9.90]), (7, [3.9, 3.76])] 例如: |
字符串 | 具有字符串类型的单变量观测值的时间序列,例如: [(1, "a"), (3, "b"), (5, "c"), (5, "d"), (5, "e"), (7, "f"), (9, "g")] |
字符串数组 | 具有字符串数组类型的多变量观测值的时间序列,例如: [(1, ["a", "xq"]), (3, ["b", "zr"]), (5, ["c", "ms"]), (5, ["d", "rt"]), (5, ["e", "wu"]), (7, ["f", "vv"]), (9, ["g", "zw"])] |
分段 | 段的时间序列。 segmentBy 函数的输出可以是任何类型,包括数字、字符串、数字数组和字符串数组。 例如: [(1,[(1, 7.2), (3, 4.5)]), (5,[(5, 4.5), (5, 4.6), (5, 7.1)]), (7,[(7, 3.9), (9, 1.1)])] |
词典 | 字典的时间序列。 字典可以包含任意类型 |
时间序列函数
您可使用所提供时间序列包中的不同函数来分析时间序列数据以抽取有意义的信息,通过该信息将创建可用于根据先前观察的值预测新值的模型。 请参阅时间序列函数。
了解更多信息
要使用 tspy
Python SDK ,请参阅 tspy
Python SDK 文档。
父主题: 时间序列分析