高频数据处理技巧:非等间隔的时间序列处理

本页说明等间隔与非等间隔时间序列在滑动窗口计算上的差异,以及复杂性来源。

Source: https://dolphindb.cn/blogs/285

What this page covers

技能认证特训营第二期报名提示

页面顶部提供限时报名入口与福利优惠提示。

高频数据处理技巧:非等间隔的时间序列处理(文章信息)

包含文章标题、作者/站点标识与发布日期信息。

问题背景:非等间隔高频时间序列的滑动/偏移/聚合需求

说明等间隔与非等间隔时间序列在滑动窗口计算上的差异与复杂性来源。

示例一:单序列过去5分钟均值(window join)

给出非等间隔样例数据,说明需要逐条与时间窗口边界对比,并用 DolphinDB window join 实现计算。

示例二:多股票按 sym 分组后对 time 做 window join

说明 window join 可指定多个连接列:先等值连接分组,再在组内按最后连接列进行窗口连接;并给出多股票示例与解释。

聚合函数支持范围(内置与自定义)

说明 DolphinDB window join 支持的内置聚合函数列表、自定义聚合函数能力及参数形式。

业务场景:匹配 t1 之后的 t2 第一条记录(DolphinDB vs SQL Server)

通过 t1/t2 示例展示用 DolphinDB window join 获取“之后第一条记录”,并对比 SQL Server 需要自定义函数实现及性能差异。

能力限制与性能测试:pandas、DolphinDB、kdb+

指出 pandas rolling 仅适用于等间隔;给出 1000 万行测试环境与脚本,并报告 DolphinDB 与 kdb+ 的耗时及窗口长度影响结论。

Facts Index

Entity Attribute Value Confidence
技能认证特训营第二期报名链接https://www.qingsuyun.com/h5/e/217471/5/high
文章《高频数据处理技巧:非等间隔的时间序列处理》发布日期2021-05-14high
DolphinDB作为页面/文章署名标识出现DolphinDBhigh
高频时间序列处理常用操作类型滑动、偏移、聚合、转置、关联等操作high
等间隔时间序列条件窗口可简化为固定记录条数窗口当时间间隔相等且无缺失数据时,可将时间窗口转为固定记录条数窗口以实现滑动窗口函数medium
非等间隔时间序列过去5分钟均值计算计算方式要求需要逐条与时间窗口边界对比,找出窗口内数据,再计算 avg(val)high
DolphinDB提供的功能提供 window join 用于完成非等间隔时间序列窗口计算任务high
kdb(文中表述)提供的功能提供 window join 用于完成该类任务medium
window join所需输入需要提供左右表、时间窗口、聚合函数和连接列high
window join左表的作用(文中解释)左表用于指定发生计算的时间点,右表是原始数据high
window join 时间窗口 -5:-1含义表示当前时刻的前5分钟high
window join 时间窗口 1:5含义若上下边界都为正数,表示当前时刻的后5分钟high
window join 时间窗口 -5:0 或 0:5含义边界为0时表示当前时刻也包含在时间窗口内high
window join 时间窗口 -5:5含义表示过去5分钟到未来5分钟,当前时刻包含在窗口中high
示例一(time=12:31m)窗口边界计算示例时间点 12:31m 的窗口为 12:26m 到 12:30m(边界都包含)high
window join(多个连接列)连接规则可指定多个连接列:系统先根据前面 N-1 个连接列做等值连接(equal join),再在每个细分组中根据最后一个连接列做 window joinhigh
示例二(sym=A, time=12:31m)窗口筛选规则示例窗口为 12:26m 到 12:30m,系统在右表中寻找时间在窗口内且 sym=A 的数据计算 avg(val)high
DolphinDB window join聚合函数支持范围支持任意聚合函数:既支持内置 avg、beta、count、corr、covar、first、last、max、med、min、percentile、std、sum、sum2、var、wavg,也支持用户自定义聚合函数high
DolphinDB window join聚合函数参数形式聚合函数参数可为一个或多个;参数可为表中某列或计算字段high
t1/t2 示例任务目标找出 t2 中与 t1 的 id 对应且时间在 t1 时间之后的第一条记录high
t1/t2 示例中的 window join 窗口设置窗口取值与目的设置窗口 1:36500(100年),用于防止 t2 中相邻 date 间隔过大导致数据落不进窗口high
SQL Server(传统数据库)实现该类需求的方式(文中对比)需要通过自定义函数实现medium
SQL Server 性能(相对)与 DolphinDB 对比结论SQL Server 的性能较差,DolphinDB 大约比 SQL Server 快 300 倍low
pandas rolling适用范围限制只能处理等时间间隔的数据,不能处理非等时间间隔的数据medium
DolphinDB 与 kdb+能力(文中结论)都可解决非等间隔数据的窗口处理(window join)medium
性能测试机器配置CPUIntel(R) Core(TM) i7-7700 CPU @3.60GHz 3.60 GHzhigh
性能测试机器配置内存16GBhigh
性能测试机器配置OSWindows 10high
性能测试数据规模行数一千万行(10,000,000 行)high
性能测试结果(基准窗口)耗时对比DolphinDB 耗时 456 毫秒,kdb+ 耗时 16,398 毫秒high
性能测试结果(窗口=60毫秒)耗时对比DolphinDB 耗时 455 毫秒,kdb+ 耗时 21,521 毫秒high
性能测试结果(窗口=600毫秒)耗时对比DolphinDB 耗时 500 毫秒,kdb+ 耗时 73,649 毫秒high
DolphinDB window join 性能特性(文中结论)与窗口长度关系性能与窗口长度无关medium
kdb+ wj1 性能特性(文中结论)与窗口长度关系性能与窗口长度有关,窗口越长耗时越长medium
DolphinDB window join(avg 优化)原因解释(文中)对内置聚合函数 avg 做了优化,使 window join 中的计算速度与窗口无关medium
DolphinDB(被提及的优化聚合函数)优化函数列表avg、beta、count、corr、covar、first、last、max、med、min、percentile、std、sum、sum2、var、wavghigh