时间序列相关分析
TDengine TSDB 从 3.3.8.0 开始提供针对时间序列进行相关性分析的功能。
CORR
CORR(expr)
计算两个时间序列的皮尔森相关系数,该系数反应两个序列的线性相关性。关于 corr 函数使用的细节及相关内容请阅读 CORR 函数
的内容。
说明:
corr函数不需要 TDgpt 支持,可直接使用。
DTW
基于动态规划方法对两个时序列通过非线性地进行时域对准(Timing alignment)后计算两个时间序列之间相似度(similarity)。
计算结果值越小表明两个时间序列相似度越高,dtw 计算相似度的时候使用曼哈顿距离(忽略时间维度),暂不支持使用欧式距离计算相似度。
语法
DTW(column1_name, column2_name, option_expr)
option_expr: {"
radius=expr
[,expr2]
"}
column1_name和column2_name:参与动态时间规整计算的两列时间序列数据。option_expr:字符串,输入动态时间规整计算的相关参数。采用逗号分隔的 K=V 字符串表示,字符串不需使用单引号、双引号、或转义号等符号,不能使用中文及其他宽字符。radius=2表示邻域半径为 2,限制dtw路径在距离矩阵中搜索相邻 2 个数值。- 不支持白噪声检查,用户不需要设定执行算法。
- 最大允许的输入 10240 行数据进行计算,超过最大允许输入函数会触发
Analysis failed since too many input rows(0x80000446) 错误。
参数说明
| 参数 | 含义 | 默认值 |
|---|---|---|
| radius | 搜索的邻域半径,它限制了 DTW 路径在距离矩阵中的探索范围。较小的半径计算更快但可能牺牲精度,较大的半径更精确但计算成本更高 | 1 |
- 支持数值列输入
- 返回值为双精度浮点数
示例
--- -计算 col1 和 col2 两列数据的动态规整结果,不设置邻域矩阵搜索半径
SELECT dtw(col1, col2)
FROM foo
---- 计算相似度的时候指定数值邻域矩阵搜索半径为 2
SELECT dtw(col1, col2, 'radius=2')
FROM foo;
DTW_PATH
基于动态规划方法对两个时序列通过非线性地进行时域对准(Timing alignment)调整以便于计算两个时间序列之间相似度(similarity)。
与 dtw 不同,dtw_path 返回计算相似度结果时候,使用的两个时间序列数值匹配列表。
语法
DTW_PATH(column1_name, column2_name, option_expr)
option_expr: {"
radius=expr
[,expr2]
"}
使用条件及约束与 DTW 相同,区别是 DTW_PATH 返回字符串,表示 column1_name 和 column2_name 两列匹配的序号。
示例
taos> select col1, col2 from foo;
col1 | col2 |
========================================================
1 | 1 |
1.1 | 1.5 |
1 | 1.3 |
1.2 | 1.8 |
1.1 | 1.6 |
taos> select dtw_path(col1, col2,'radius=1') res from foo;
res |
=================================
(0, 0) |
(1, 0) |
(2, 0) |
(3, 1) |
(3, 2) |
(3, 3) |
(4, 4) |
计算 dtw 结果,(0, 0) 表示使用 col1 列第一行与 col2 列第一行计算差值(曼哈顿距离):1-1=0, (1, 0) 表示使用 col1 列第二行与 col2 列第一行计算差值(曼哈顿距离):1.1-1=0.1, (2, 0)表示使用 col1 列第三行与 col2 列第一行计算差值(曼哈顿距离):1-1=0,依此类推,最后计算将所有的差值相加,得到结果 1.6
TLCC
返回两个时间序列在不同时间滞后(lag)下的相关性数值,用以评估两个时间序列之间的动态关系。多用于识别一个序列的变化是否会对另一个序列产生延迟影响,以及这种影响的方向和程度。
语法
TLCC(column1_name, column2_name, option_expr)
option_expr: {"
lag_start=expr,
lag_end=expr,
[,expr2]
"}
column1_name和column2_name:参与动态时间规整计算的两列时间序列数据。option_expr:字符串,输入动态时间规整计算的相关参数。采用逗号分隔的 K=V 字符串表示,字符串不需使用单引号、双引号、或转义号等符号,不能使用中文及其他宽字符。radius=2表示邻域半径为 2,限制dtw路径在距离矩阵中搜索相邻 2 个数值。- 不支持白噪声检查,用户无需设置执行的算法。
- 最大允许的输入 10240 行数据进行计算,超过最大允许输入数据行数会触发
Analysis failed since too many input rows(0x80000446) 错误。
参数说明
| 参数 | 含义 | 默认值 |
|---|---|---|
| lag_start | 滞后步数的起始值 | -1 |
| lag_end | 滞后步数的结束值 | 1 |
- 只支持数值列输入
- 返回值为不同滞后步数情况下,两个时间序列的线性相关数值相关性
示例
--- -计算 col1 和 col2 两列数据在不同滞后步数下的相关性
SELECT tlcc(col1, col2)
FROM foo
---- 计算col1 和 col2 两列数据在不同滞后步数下的相关性
SELECT tlcc(col1, col2, 'lag_start=-10, lag_end=10')
FROM foo;







