数据探索函数

数据探索函数得到样本数据的趋势、极大值、中心值,检验数据是否符合正态分布、均匀分布或指数分布。

函数

说明

均匀分布或指数分布的检验函数

检验数据分布是否满足均匀分布或指数分布。

正态分布检验函数

检验数据分布是否满足正态分布。

时序分解函数

获取时序数据中的趋势信息与周期信息。

极大值检测函数

找到序列数据的局部极大值。

均匀分布或指数分布的检验函数

  • 只支持华东2(上海)地域。

  • 分布检验函数支持的最大数据量为500万行。

  • 用于离线调度的分布检验函数。

  • 通过Kolmogorov-Smirnov方法,检验数据分布是否满足均匀分布或指数分布。假设检验的更多信息,请参见scipy.stats.ks_2samp。假设检验分为假设和检验,首先假定原假设为真,然后通过样本数据检验原假设是否成立。

    1. 确定原假设和备择假设。原假设是样本数据满足均匀分布(指数分布),备择假设是样本数据不满足均匀分布(指数分布)。

    2. 确定显著性水平。显著性水平代表了,原假设为真的情况下,拒绝原假设的概率。在实践中一般选显著性水平为0.05。

    3. 通过Kolmogorov-Smirnov方法计算p值。p值代表在原假设成立的情况下,样本数据或更极端数据出现的概率。

    4. 当概率p小于显著性水平0.05时,这个概率非常小,意味着样本数据或更极端数据的出现是不可能事件。因此我们有足够的理由拒绝原假设,认为这批设备的数据不符合均匀分布(指数分布)。当p大于等于显著性水平0.05时,我们接受原假设,认为这一批设备数据符合均匀分布(指数分布)。

函数格式

SELECT DISTRIBUTION_TEST(method,test_col) as result FROM table;

输入参数

  • method:必填。

    • "expon":指数分布。

    • "uniform":均匀分布。

  • test_col:必填。double类型。要检验分布形态的数据所在列。

输出参数

result:double类型。在实践中一般选择显著性水平为0.05,当p值小于0.05时我们拒绝原假设,认为样本数据不满足均匀分布(指数分布)。当p值大于等于0.05时我们接受原假设,认为样本数据满足均匀分布(指数分布)。函数的输出结果是p值,如果需要统计值,请提交工单

正态分布检验函数

  • 只支持华东2(上海)地域。

  • 正态分布检验函数支持的最大数据量为500万行。

  • 用于离线调度的正态分布检验函数。

  • 通过Shapiro-Wilk、D'Agostino's K-squared或Kolmogorov-Smirnov方法,检验数据分布是否满足正态分布。假设检验的更多信息,请参见scipy.stats.ks_2samp。假设检验分为假设和检验,首先假定原假设为真,然后通过样本数据检验原假设是否成立。

    1. 确定原假设和备择假设。原假设是样本数据满足正态分布,备择假设是样本数据不满足正态分布。

    2. 确定显著性水平。显著性水平代表了,原假设为真的情况下,拒绝原假设的概率。在实践中一般选显著性水平为0.05。

    3. 计算p值。p值代表在原假设成立的情况下,样本数据或更极端数据出现的概率。数据离期望分布的均值越远,代表越极端。

    4. 当概率p小于显著性水平0.05时,这个概率非常小,意味着样本数据或更极端数据的出现是不可能事件。因此我们有足够的理由拒绝原假设,认为这批设备的数据不符合正态分布。当p大于等于显著性水平0.05时,我们接受原假设,认为这一批设备数据符合正态分布。

函数格式

SELECT NORMALTEST(model,test_col) as result FROM table;

输入参数

  • method:必填。string类型。

    • "SW":Shapiro-Wilk检验。采用Shapiro-Wilk检验时,建议样本数在7~2000之间。

    • "DA": D'Agostino's K-squared检验。

    • "KS":Kolmogorov-Smirnov检验。

  • test_col:必填。double类型。要检验分布形态的数据所在列。

输出参数

result:double类型。在实践中一般选择显著性水平为0.05,当p值小于0.05时我们拒绝原假设,认为样本数据不满足正态分布。当p值大于等于0.05时我们接受原假设,认为样本数据满足正态分布。函数的输出结果是p值,如果需要统计值,请提交工单

时序分解函数

  • 只支持华东2(上海)地域。

  • 时序分解函数支持最大数据量为50万行30列。

  • 用于离线调度的时序分解函数。

  • 获取时序数据中的趋势信息与周期信息。使用该算子处理从数据服务的 自定义存储表中读取的数据时,需要对数据重新排序(建议使用ts字段)。

函数格式

SELECT X11_DECOMPOSE(config,decompose_col,other_col) 
as(trend,seasonal,residual,decompose_col, other_col)
FROM table;

输入参数

  • config:必填。JSON类型。

    • "mode":加法模型填"additive",乘法模型填"multiplicative"

    • "period":序列信息的重复周期。

  • decompose_col:必选。double类型。要进行序列分解的列。

  • other_col:可选。任意类型。输入的其他列,可以和分解的结果一同输出。

输出参数

  • trend:double类型。随着时间变化的整体趋势。

  • seasonal:double类型。在确定时间周期内反复出现的变化。

  • residual:double类型。不由趋势或周期性影响而产生的变化,由各种各样的其他原因所导致。

  • decompose_col:double类型。输入的要进行时序分解的列。

  • other_col:string类型。输入的其他列。

示例一:加法模型

SELECT X11_DECOMPOSE('{"model":"additive","period":"3"}',
value,idx)
as(trend,seasonal,residual,num,idx)
FROM Values (32.50284661,0),(30.00239172,1),(4.47326732,2),(15.73310388,3),(21.49780825,4),(18.17761162,5),
(38.57413106,6),(44.3770641,7),(38.64285117,8),(30.92699097,9),(34.31304265,10),(49.11533554,11),(40.43372196,12)
,(68.21267232,13),(61.34765278,14),(55.76735624,15),(36.17021295,16),(53.00386398,17),(79.85061438,18),(62.59943415,19) t(value,idx);

模型配置为加法模型,序列重复周期为3。函数输出为数字序列,用Python画图:

image.png

示例二:加法模型

下载设备集群用电量数据。集群中的设备以稳定功率运行,随着集群中设备数量的增长,集群整体的用电量也在增长。集群中额外添加了一个设备,用于收集和分析集群中的其他设备信息,现需要将这个设备的信息单独提取出来。

考虑到统计设备的功耗与集群设备数量增长带来的功耗增长是加性关系,因此我们采用加性模型对用电数据进行分解。可以看到集群的用电量随着设备数量的增长一直在上升。统计设备的功耗信息如周期曲线所示,可以看到其功耗是随着任务的不同而变化的。残差项指出了设备工作环境中的随机因素,如温度,湿度等因素对于设备功耗的影响。

说明

本示例是从自定义存储表中读取的数据,因此在读取后需要重新排序。

SELECT X11_DECOMPOSE('{"model":"additive","period":"7"}',
num,idx) 
as(trend,seasonal,residual,num,idx)
FROM (SELECT num,idx from decompose_add_100 ORDER by idx);

函数输出为数字序列,用Python画图:

image.png

示例三:乘法模型

下载设备集群的用电量数据。考虑到设备功耗的周期性变化与设备数量增长带来的功耗增长是乘性关系,因此我们采用乘性模型对用电数据进行分解。可以看到集群的用电量随着设备数量的增长一直在上升。由于每天执行任务的不同,设备所产生的功耗也会随着任务的调度产生周期性的变化。残差项指出了设备工作环境中的随机因素,如温度,湿度等因素对于设备功耗的影响。

说明

本示例是从自定义存储表中读取的数据,因此在读取后需要重新排序。

SELECT X11_DECOMPOSE('{"model":"multiplicative","period":"7"}',
num,idx) 
as(trend,seasonal,residual,num,idx)
FROM (SELECT num,idx from decompose_multi_144 ORDER by idx);

函数输出为数字序列,用Python画图:

image.png

极大值检测函数

  • 只支持华东2(上海)地域。

  • 极大值函数支持最大数据量为50万行30列。

  • 用于离线调度的极大值检测函数。

  • 找到序列数据的局部极大值。

函数格式

SELECT FIND_PEAKS(config, sortColIdx, valueColIdx, 
		sortCol, valueCol, OtherCol) 
    as (sortCol,valueCol, OtherCol) FROM table;

输入参数

  • config:可选。JSON字符串。

    • "height":极大值的最低高度,非0。

    • "threshold":与相邻样本的最小垂直距离。

    • "distance":相邻极大值之间的最短距离。

  • sortColIdx:必选。bigint类型。用来排序的数值列的序号。

  • valueColIdx:必选。bigint类型。被排序的数值列的序号。

  • sortCol:必选。double类型。用来排序的列。

  • valueCol:必选。double类型。被排序的列。

  • OtherCol:可选。任意类型。其他需要被排序的列。

输出参数

  • sortCol:double类型。极大值对应的sortCol值。

  • valueCol:double类型。极大值对应的valueCol值。

  • OtherCol:string类型。极大值对应的OtherCol值。

函数示例:设备功率检测

  • 检测设备功率极大值。

    下载经过处理的设备功率信息。通过FIND_PEAKS函数从输入的设备功率数据中获取极大值,助于我们了解设备的运行状态。将数据导入到数据服务的自定义存储表中,然后在分析洞察中使用这些数据。

    我们希望输入数据中第一列为idx,第二列为num,使用idxnum进行排序。

    • FIND_PEAKS函数的设置:sortColIdx为1。valueColIdx为2。sortColidxvalueColnum

      SELECT FIND_PEAKS('{"height":null,"threshold":null,"distance":null}',
          1,
          2,
          idx,
          num ) 
          as (idx,num) FROM findpeaks_1000;
    • 本示例中没有输入额外列,如果需要,可以在num之后输入其他列名other_col

      SELECT FIND_PEAKS('{"height":null,"threshold":null,"distance":null}',
          1,
          2,
          idx,
          num,
          other_col) 
          as (idx,num,other_col) FROM findpeaks_1000;
    • FIND_PEAKS函数对输入的数据进行排序,并输出各个极大值对应的坐标。用Pyhton根据输出数据画图,图中标出了所有的极大值。

      image.png
  • 设置height参数。

    上面得到的极大值过于笼统,如果希望对超出预期范围的极大值进行检测,可以设置height这个参数。本示例中设置height为4,可以得到功率指标超过4的24个极大值点。对这些极大值出现的时间点进行回顾,可以为生产决策提供有效信息。

    SELECT FIND_PEAKS('{"height":4}',
        1,
        2,
        idx,
        num) 
        as (idx,num) FROM findpeaks_1000;

    用Pyhton画图,图中标出了所有超过4的极大值。

    image.png
  • 设置threshold参数。

    在某些情况下,跳变的数据更值得关注。通过设置threshold参数,可以对峰值点与临近采样点的垂直距离进行限制,从而筛选出跳变的数据。本示例中设置thereshold为1,可以得到与临近采样点垂直距离大于1的27个极大值点。

    SELECT FIND_PEAKS('{"threshold":1}',
        1,
        2,
        idx,
        num ) 
        as (idx,num) FROM findpeaks_1000;

    用Pyhton画图,图中标出了27个极大值点,这些极大值点与临近采样点垂直距离大于1。

    image.png
  • 设置distance参数。

    相近的极大值点之间所蕴含的信息可能会重复,可以通过设置distance参数,设定两次采样点之间的最小横向距离,对数据进行筛选,去除重复信息。本示例中设置横向距离为10,以输入数据的第一个极大值点为参考,横向距离为10以内的极大值点会被忽略,因此设置distance参数后的极大值更稀疏,对这些极大值出现时刻的设备数据进行分析会更有价值。

    SELECT FIND_PEAKS('{"distance":10}',
        1,
        2,
        idx,
        num ) 
        as (idx,num) FROM findpeaks_1000;

    用Pyhton画图,图中标出了所有相邻距离超过10的极大值点。

    image.png