修复函数
用于时间序列数据的修复
timestamp_repair
负责修复时间戳序列
提示
函数timestamp_repair首先通过Mode、Cluster、Median以及自定义数值方式确定时间戳间隔interval,然后使用Linear、Mode方法确定修复后时间戳的开始值start。通过动态规划算法对修复代价进行优化,过程中有插入、删除、不变三种操作,最终得到最优的修复序列。
timestamp_repair(time_expresion, numeric_expression, arg_expression)
选项 | 描述 |
---|---|
time_expresion | 要操作的时间表达式。可以是常量、列或函数,以及算术运算符的任意组合。 |
numeric_expression | 要操作的数值表达式。可以是常量、列或函数,以及算术运算符的任意组合。 |
arg_expression | 参数表达式。必须是字符串常量,多个参数之间用& 链接 |
参数 | 描述 |
---|---|
method | 推算标准时间间隔的方法,取值为 'median', 'mode' 或 'cluster',仅在interval缺省时有效。在缺省情况下,将使用中位数方法进行推算。 |
interval | 标准时间间隔(单位是毫秒),是一个正整数。在缺省情况下,将根据指定的方法推算。 |
start_mode | 起始时间戳的推算方法,取值为 'linear' 或 'mode',缺省情况下使用 'mode'。 |
查看示例
CREATE table wzz(value double);
INSERT wzz VALUES ('2024-01-01T00:00:00.000',1),('2024-01-01T00:00:10.000',2),('2024-01-01T00:00:19.000',3),('2024-01-01T00:00:30.000',4),('2024-01-01T00:00:40.000',5),('2024-01-01T00:00:50.000',6),('2024-01-01T00:01:01.000',7),('2024-01-01T00:01:11.000',8),('2024-01-01T00:01:21.000',9),('2024-01-01T00:01:31.000',10);
SELECT timestamp_repair(time, value, 'method=mode&start_mode=linear') FROM wzz;
+-------------------------+------------------------------------------------------------------------------+
| time | timestamp_repair(wzz.time, wzz.value, Utf8("method=mode&start_mode=linear")) |
+-------------------------+------------------------------------------------------------------------------+
| 2024-01-01T00:00:00.300 | 1.0 |
| 2024-01-01T00:00:10.300 | 2.0 |
| 2024-01-01T00:00:20.300 | 3.0 |
| 2024-01-01T00:00:30.300 | 4.0 |
| 2024-01-01T00:00:40.300 | 5.0 |
| 2024-01-01T00:00:50.300 | 6.0 |
| 2024-01-01T00:01:00.300 | 7.0 |
| 2024-01-01T00:01:10.300 | 8.0 |
| 2024-01-01T00:01:20.300 | 9.0 |
| 2024-01-01T00:01:30.300 | 10.0 |
| 2024-01-01T00:01:40.300 | NaN |
+-------------------------+------------------------------------------------------------------------------+
value_fill
负责填充值列缺失的数据
提示
函数value_fill根据输入的参数Method来决定值填充的方法,方法有Mean、Previous、Linear、AR、MA五种。
value_fill(time_expresion, numeric_expression, arg_expression)
选项 | 描述 |
---|---|
time_expresion | 要操作的时间表达式。可以是常量、列或函数,以及算术运算符的任意组合。 |
numeric_expression | 要操作的数值表达式。可以是常量、列或函数,以及算术运算符的任意组合。 |
arg_expression | 参数表达式。必须是字符串常量,多个参数之间用& 链接 |
参数 | 描述 |
---|---|
method | 填补缺失值的方法,取值为 'mean', 'previous', 'linear', 'ar', 'ma',缺省情况下使用 'linear'。 |
查看示例
CREATE table wzz(value double);
INSERT wzz VALUES ('2024-01-01T00:00:02',acos(3)),('2024-01-01T00:00:03',101.0),('2024-01-01T00:00:04',102.0),('2024-01-01T00:00:06',104.0),('2024-01-01T00:00:08',126.0),('2024-01-01T00:00:10',108.0),('2024-01-01T00:00:14',acos(3)),('2024-01-01T00:00:15',113.0),('2024-01-01T00:00:16',114.0),('2024-01-01T00:00:18',116.0),('2024-01-01T00:00:20',acos(3)),('2024-01-01T00:00:22',acos(3)),('2024-01-01T00:00:26',124.0),('2024-01-01T00:00:28',126.0),('2024-01-01T00:00:30',128.0);
SELECT value_fill(time, value, 'method=mean') FROM wzz;
+---------------------+------------------------------------------------------+
| time | value_fill(wzz.time, wzz.value, Utf8("method=mean")) |
+---------------------+------------------------------------------------------+
| 2024-01-01T00:00:02 | 114.72727272727273 |
| 2024-01-01T00:00:03 | 101.0 |
| 2024-01-01T00:00:04 | 102.0 |
| 2024-01-01T00:00:06 | 104.0 |
| 2024-01-01T00:00:08 | 126.0 |
| 2024-01-01T00:00:10 | 108.0 |
| 2024-01-01T00:00:14 | 114.72727272727273 |
| 2024-01-01T00:00:15 | 113.0 |
| 2024-01-01T00:00:16 | 114.0 |
| 2024-01-01T00:00:18 | 116.0 |
| 2024-01-01T00:00:20 | 114.72727272727273 |
| 2024-01-01T00:00:22 | 114.72727272727273 |
| 2024-01-01T00:00:26 | 124.0 |
| 2024-01-01T00:00:28 | 126.0 |
| 2024-01-01T00:00:30 | 128.0 |
+---------------------+------------------------------------------------------+
value_repair
负责修复值列的数据
提示
函数value_repair使用Screen算法和LsGreedy算法,对时间戳和值之间的不一致性或缺失进行修复。首先,Screen算法据时间戳间隔的中位数确定修复窗口的宽度,在保持修复后数据在一定范围内的情况下进行修复。LsGreedy算法则通过计算速度的变化,并使用贪心策略进行修复。此外,实现了一些辅助函数用于计算中位数、中位数绝对偏差以及值的变化。
value_repair(time_expresion, numeric_expression, arg_expression)
选项 | 描述 |
---|---|
time_expresion | 要操作的时间表达式。可以是常量、列或函数,以及算术运算符的任意组合。 |
numeric_expression | 要操作的数值表达式。可以是常量、列或函数,以及算术运算符的任意组合。 |
arg_expression | 参数表达式。必须是字符串常量,多个参数之间用& 链接 |
参数 | 描述 |
---|---|
method | 修复时采用的方法,取值为 'Screen' 或 'LsGreedy'. 在缺省情况下,使用 Screen 方法进行修复。 |
min_speed | 该参数仅在使用 Screen 方法时有效。当速度小于该值时会被视作数值异常点加以修复。在缺省情况下为中位数减去三倍绝对中位差。 |
max_speed | 该参数仅在使用 Screen 方法时有效。当速度大于该值时会被视作数值异常点加以修复。在缺省情况下为中位数加上三倍绝对中位差。 |
center | 该参数仅在使用 LsGreedy 方法时有效。对速度变化分布建立的高斯模型的中心。在缺省情况下为 0。 |
sigma | 该参数仅在使用 LsGreedy 方法时有效。对速度变化分布建立的高斯模型的标准差。在缺省情况下为绝对中位差。 |
查看示例
CREATE table wzz(value double);
INSERT wzz VALUES ('2024-01-01T00:00:02',100.0),('2024-01-01T00:00:03',101.0),('2024-01-01T00:00:04',102.0),('2024-01-01T00:00:06',104.0),('2024-01-01T00:00:08',126.0),('2024-01-01T00:00:10',108.0),('2024-01-01T00:00:14',112.0),('2024-01-01T00:00:15',113.0),('2024-01-01T00:00:16',114.0),('2024-01-01T00:00:18',116.0),('2024-01-01T00:00:20',118.0),('2024-01-01T00:00:22',100.0),('2024-01-01T00:00:26',124.0),('2024-01-01T00:00:28',126.0),('2024-01-01T00:00:30',acos(3));
SELECT value_repair(time, value, 'method=screen') from wzz;
+---------------------+----------------------------------------------------------+
| time | value_repair(wzz.time, wzz.value, Utf8("method=screen")) |
+---------------------+----------------------------------------------------------+
| 2024-01-01T00:00:02 | 100.0 |
| 2024-01-01T00:00:03 | 101.0 |
| 2024-01-01T00:00:04 | 102.0 |
| 2024-01-01T00:00:06 | 104.0 |
| 2024-01-01T00:00:08 | 106.0 |
| 2024-01-01T00:00:10 | 108.0 |
| 2024-01-01T00:00:14 | 112.0 |
| 2024-01-01T00:00:15 | 113.0 |
| 2024-01-01T00:00:16 | 114.0 |
| 2024-01-01T00:00:18 | 116.0 |
| 2024-01-01T00:00:20 | 118.0 |
| 2024-01-01T00:00:22 | 120.0 |
| 2024-01-01T00:00:26 | 124.0 |
| 2024-01-01T00:00:28 | 126.0 |
| 2024-01-01T00:00:30 | 128.0 |
+---------------------+----------------------------------------------------------+