一种对时序数据统计最大连续递增次数与递增次数的处理方法与流程

文档序号:18030405发布日期:2019-06-28 22:35阅读:990来源:国知局
一种对时序数据统计最大连续递增次数与递增次数的处理方法与流程

本发明是一种时序数据处理技术,根据时序数据中的时间戳,将指定区间的时序运算结果存于该区间对应时间戳上,从而提供时间窗口平行滑动处理的能力。主要适用于时序数据处理技术等数据分析领域。



背景技术:

在时序数据分析处理领域,对于时间窗口滑动处理的方案很多,大多都是将某个实体上面的数据进行过滤保留原始数据,从而进行adhoc查询的方案。adhoc查询非常灵活,但是一旦实体过大(数据过于密集),每次需要处理的数据量变大,性能会十分低下。

假设有个账号具备如下序列,⑤⑥排布如图1所示。假设以当前时间作为基准,我们需要统计该账号过去6小时的交易金额的最大连续递增次数。按照adhoc处理的形式,需要根据当前时间(18:00:00),计算统计区间的起点(18-6=12:00:00),找到12点到18点的所有数据,然后对这些数据进行统计递增计算得到4这个答案。每次系统时间向前滑动,就需要重复上述计算步骤。因为每次都需要基于原始时间序列重复计算,整个计算过程复杂且效率低下,唯一的优势就是计算比较灵活。



技术实现要素:

本发明的目的在于针对现有技术的不足,提供一种对时序数据进行统计最大连续递增次数与递增次数的处理方法。

本发明的目的是通过以下技术方案来实现的:一种对时序数据统计最大连续递增次数与递增次数的处理方法,对于一个时序数据集合p={(t1,v1),(t2,v2),(t3,v3),…,(tn,vn)},其中t代表不同事件时间,v代表对应时间上的一个事件;对该时间数据序列,计算其在任意时间区间内的最大连续递增(减),具体处理步骤为:

(1)根据时间切片长度ts对数据集合进行分组,得到集合m={{(t1,v1),(t2,v2)…(tm1,vm1)},{(tm1+1,vm1+1),(tm2+2,vm2+2)…(tm2,vm2)}…{(tmi+1,vmi+1),(tmi+2,vmi+2)…(tn,vn)}}:对于集合p里的每个元素(t,v),都有(t,v)属于而且仅属于集合m的一个元素mx,其中(t,v)与mx的映射关系为t/ts+1=x。这样,m集合里的每个元素mx代表时序数据集p中事件时间在ts*(x-1)与ts*x之间的元素组成的集合。

(2)对于集合m中的每个元素mx,计算其最大连续递增(减)序列的递增(减)次数count、首元素head、尾元素tail、mx中从首元素head开始的连续递增(减)序列的递增(减)次数headcount、mx中以尾元素tail为止的连续递增(减)序列的递增(减)次数tailcount、mx元素的个数size,记为fx=(headx,tailx,sizex,countx,headcountx,tailcountx),所有的fx组成集合fv={f1,f2…fx}。

(3)查询移动窗口中间结果集:根据指定时间戳t(可以是任意时间)和时间切片个数tc,找到t对应的fx,那么集合sx={fx-tc,fx–tc+1,…fx}就是该查询的中间结果集。

(4)计算移动窗口的递增(减)次数:对中间结果集sx中的元素从前到后依次合并,相邻两个元素合并成一个新元素,假设合并后的新元素是fnew,合并前两个相邻的元素是fa和fb,其中fa在前,fb在后,那么,headnew=heada,tailnew=tailb,sizenew=sizea+sizeb;当taila小于(大于)headb时,countnew=max(counta,countb,taila+headb+1),否则countnew=max(counta,countb);当taila小于(大于)headb而且headcounta=sizea-1时,headcountnew=headcounta+1+headcountb,否则headcountnew=headcounta;当taila小于(大于)headb而且tailcountb=sizeb-1时,tailcountnew=tailcountb+1+tailcounta,否则tailcountnew=tailcountb;这样依次合并后得到最终的一个元素,该元素的count就是移动窗口的最大连续递增(减)次数。

进一步地,所述时间切片长度ts除支持毫秒、秒、分钟、小时、天、周、月、年以外,还支持任意时间切片长度,比如3分钟,11秒等。

本发明的有益效果是:本发明预先把计算好的中间结果存储在相应时间戳,通过这样一种存储结构,可以根据指定的时间戳,快速得到对应的计算结果;首先,中间结果的存储位置灵活多变,满足各种场景的需求;另外,由于存储结果也是同样的数字,内存耗费没有增长,存储效率很高,而且因为已经提前计算好了中间结果,所以在查询时响应速度极快;最为重要的是,这部分结果是跟着系统时间移动而不断变化的,能够达到时间窗口平滑移动的目的。

附图说明

图1为一个实施例的账号交易序列示意图;

图2为本发明方法计算后的结果展示图;

图3为本发明方法与传统方法的实施效果对比图。

具体实施方式

下面结合附图和具体实施例对本发明作进一步详细说明。

假设我们有一个时序数据集合p={(t1,v1),(t2,v2),(t3,v3),…,(tn,vn)},其中t代表不同事件时间,v代表对应时间上的一个事件;对该时间数据序列,计算其在任意时间区间内的最大连续递增(减)次数,具体处理步骤为:

(1)根据时间切片长度ts对数据集合进行分组,得到集合m={{(t1,v1),(t2,v2)…(tm1,vm1)},{(tm1+1,vm1+1),(tm2+2,vm2+2)…(tm2,vm2)}…{(tmi+1,vmi+1),(tmi+2,vmi+2)…(tn,vn)}}:对于集合p里的每个元素(t,v),都有(t,v)属于而且仅属于集合m的一个元素mx,其中(t,v)与mx的映射关系为t/ts+1=x。这样,m集合里的每个元素mx代表时序数据集p中事件时间在ts*(x-1)与ts*x之间的元素组成的集合。

(2)对于集合m中的每个元素mx,在mx中可能会有很多连续递增的子序列,这些子序列的长度会有区别,将最长的子序列作为最大连续递增(减)序列,我们取最大连续递增(减)序列的递增(减)次数count、mx的首元素head、mx的尾元素tail,mx中从首元素head开始的连续递增(减)序列的递增(减)次数headcount,mx中以尾元素tail为止的连续递增(减)序列的递增(减)次数tailcount,mx元素的个数size,记为fx=(headx,tailx,sizex,countx,headcountx,tailcountx),所有的fx组成集合fv={f1,f2…fx}。

(3)查询移动窗口中间结果集:根据指定时间戳t(可以是任意时间)和时间切片个数tc,找到t对应的fx,那么集合sx={fx-tc,fx–tc+1,…fx}就是该查询的中间结果集。

(4)计算移动窗口的递增(减)次数:对中间结果集sx中的元素从前到后依次合并,相邻两个元素合并成一个新元素,假设合并后的新元素是fnew,合并前两个相邻的元素是fa和fb,其中fa在前,fb在后,那么,headnew=heada,tailnew=tailb,sizenew=sizea+sizeb;当taila小于(大于)headb时,也就是两个序列合并后连接处依然保持递增(减),countnew=max(counta,countb,taila+headb+1),否则countnew=max(counta,countb);当taila小于(大于)headb而且headcounta=sizea-1时,也就是两个序列合并后连接处依然保持递增(减)而且fa是一个完全递增(减)的序列,headcountnew=headcounta+1+headcountb,否则headcountnew=headcounta;当taila小于(大于)headb而且tailcountb=sizeb-1时,也就是两个序列合并后连接处依然保持递增(减)而且fb是一个完全递增(减)的序列,tailcountnew=tailcountb+1+tailcounta,否则tailcountnew=tailcountb;这样依次合并后得到最终的一个元素,该元素的count就是移动窗口的最大连续递增(减)次数。

本发明方法在流式数据处理场景中效果更加明显,在该场景中数据在产生后不断流入流式数据处理系统中,同时要求流式数据处理系统迅速的给出计算结果(通常是毫秒级或微妙级)。如果采用传统的计算方式,需要先查询出关联的全部历史数据,然后计算最大连续递增(减)次数;计算所需的时间与历史数据量直接相关,时间极不可控,在大维度情况下计算所需时间会达到秒级甚至分钟级。采用本发明方法后,每流入一条数据,采用步骤(2)的方法将其合并到对应的fx中,因为只需要处理一条数据,所以计算速度很快。输出结果时,只需要合并少量(等于时间切片个数tc)的元素即可得到所需结果。

实施例1

在金融领域,每一笔交易都有交易时间和交易金额,同一张卡在一段时间内的交易序列就是一个时序数据集合p。如图1所示,假设有交易时序数据集合p={(12:10,12),(12:40,7),(13:10,14),(13:20,5),(13:45,6),(14:28,19),(15:10,23),(15:20,67),(15:40,11),(15:50,2),(16:20,98),(16:25,15),(17:20,56)}。

首先,假设当时间切片长度为1小时,(12:10,12),(12:40,7)属于第一个分组,(13:10,14),(13:20,5),(13:45,6)属于第二个分组…(17:20,56)属于第六个分组。

接下来计算每个分组的首元素head、尾元素tai、元素的个数size、最大连续递增(减)序列的递增(减)次数count、集合中从首元素head开始的连续递增(减)序列的递增(减)次数headcount、集合中以尾元素tail为止的连续递增(减)序列的递增(减)次数tailcount,每个分组都会得到一个六元组(head,tail,size,count,headcount,tailcount),具体计算结果如图2所示。

假设查询时,时间戳为18:00、时间切片数为6,也就是查询(12:00,18:00)内所有交易金额组成的序列的最长连续递增序列的大小。因此,得到了图2中显示的6个六元组。

最后,合并这6个六元组。相邻两个六元组合并后得到一个新的六元组,合并的规则如上文介绍,例如第一个六元组为(12,7,2,0,0,0),第二个六元组为(14,6,3,1,0,1),合并时新的head为12,tail为6,size为2+3=5,count为max(0,1,1)=1,headcount=0,tailcount=1,得到新的六元组为(12,6,5,1,0,1)。逐个计算,最终可以得到过去6小时交易金额的最大连续递增次数为4。

实施例2

为了展示本发明方法的实际有益效果,我们做了一组实验。通过对比本发明方法和传统方法在处理同样的数据量时,本发明方法比传统方法使用更少的时间来展示本发明方法的效果。

实验场景为:生成随机的50万组测试数据,每组测试数据中包括一个时间戳和一个数字。时间戳代表数据的时序,数字代表系统在该时间点上的采集值。测试数据分布在连续的50个小时中,每个小时有1万组。每组数据的时间戳在该小时内均匀分布,采集值随机生成。

测试方法为:分别使用本发明方法和传统方法计算每1个、2个...50个小时的递增和递减次数,然后记录下每次测试的时间,最终绘制图表。

测试结果如图3所示。通过结果可以看出:

(1)传统方法的处理耗时远远大于本发明方法。

(2)随着数据量的增长,传统方法的处理耗时线性增长,而本发明方法基本保持不变。

上述实施例用来解释说明本发明,而不是对本发明进行限制,在本发明的精神和权利要求的保护范围内,对本发明作出的任何修改和改变,都落入本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1