DolphinDB实时统计分析:滑动窗口计算

发布时间:2026/10/29 7:25:43

DolphinDB实时统计分析:滑动窗口计算 摘要本文深入讲解DolphinDB实时统计分析技术。从滑动窗口原理到窗口函数应用从实时统计到趋势计算从多维度分析到性能优化全面介绍滑动窗口计算的核心方法。通过丰富的代码示例帮助读者掌握实时统计分析的核心技能。一、滑动窗口概述1.1 滑动窗口原理滑动窗口数据流窗口1窗口2窗口3统计结果1.2 窗口类型类型说明滚动窗口固定大小不重叠滑动窗口固定大小可重叠会话窗口基于活动间隔1.3 应用场景场景窗口类型分钟级统计滚动窗口移动平均滑动窗口会话分析会话窗口二、滚动窗口2.1 时间序列引擎//创建数据流 share streamTable(100000:0,device_idtimestamptemperaturehumidity,[SYMBOL,TIMESTAMP,DOUBLE,DOUBLE])assensor_stream//创建聚合结果表 share table(1:0,time_windowdevice_idavg_tempmax_tempmin_tempcount,[TIMESTAMP,SYMBOL,DOUBLE,DOUBLE,DOUBLE,LONG])asagg_result//创建时间序列引擎 aggEnginecreateTimeSeriesEngine(temp_agg,60000,//1分钟窗口[avg(temperature)asavg_temp,max(temperature)asmax_temp,min(temperature)asmin_temp,count(*)ascount],agg_result,timestamp,device_id)//订阅 subscribeTable(,sensor_stream,agg,-1,aggEngine,true)2.2 多窗口聚合//多窗口聚合defmultiWindowAgg(){//1分钟窗口 agg1mcreateTimeSeriesEngine(agg_1m,60000,[avg(temperature)asavg_temp],agg_1m_result,timestamp,device_id)//5分钟窗口 agg5mcreateTimeSeriesEngine(agg_5m,300000,[avg(temperature)asavg_temp],agg_5m_result,timestamp,device_id)//1小时窗口 agg1hcreateTimeSeriesEngine(agg_1h,3600000,[avg(temperature)asavg_temp],agg_1h_result,timestamp,device_id)}2.3 自定义聚合//自定义聚合函数defmyAgg(data){returndict(STRING,ANY,[[mean,avg(data)],[std,std(data)],[skewness,skewness(data)],[kurtosis,kurtosis(data)]])}三、滑动窗口3.1 移动平均//移动平均defmovingAverage(data,window){returnselect timestamp,mavg(temperature,window)asmafromdata}//使用 ttable(1..100asid,now()1..100*1000astimestamp,rand(20.0..30.0,100)astemperature)resultmovingAverage(t,10)3.2 移动统计//移动统计defmovingStats(data,window){returnselect timestamp,temperature,mavg(temperature,window)asmoving_avg,mstd(temperature,window)asmoving_std,mmax(temperature,window)asmoving_max,mmin(temperature,window)asmoving_min,msum(temperature,window)asmoving_sumfromdata}3.3 指数移动平均//指数移动平均defema(data,alpha0.1){resultarray(DOUBLE,data.rows())result[0]data[0]for(iin1..data.rows()){result[i]alpha*data[i](1-alpha)*result[i-1]}returnresult}四、实时统计4.1 实时计数//实时计数 share table(1:0,time_windowcount,[TIMESTAMP,LONG])ascount_result countEnginecreateTimeSeriesEngine(count_engine,60000,[count(*)ascount],count_result,timestamp)subscribeTable(,sensor_stream,count,-1,countEngine,true)4.2 实时求和//实时求和 share table(1:0,time_windowtotal_temp,[TIMESTAMP,DOUBLE])assum_result sumEnginecreateTimeSeriesEngine(sum_engine,60000,[sum(temperature)astotal_temp],sum_result,timestamp)subscribeTable(,sensor_stream,sum,-1,sumEngine,true)4.3 实时百分位//实时百分位defpercentileAgg(data,p){returnpercentile(data,p)}//使用 share table(1:0,time_windowp50p90p99,[TIMESTAMP,DOUBLE,DOUBLE,DOUBLE])aspercentile_result percentileEnginecreateTimeSeriesEngine(percentile_engine,60000,[percentile(temperature,50)asp50,percentile(temperature,90)asp90,percentile(temperature,99)asp99],percentile_result,timestamp)subscribeTable(,sensor_stream,percentile,-1,percentileEngine,true)五、趋势计算5.1 变化率//变化率defcalculateChangeRate(data){returnselect timestamp,temperature,deltas(temperature)aschange,deltas(temperature)/prev(temperature)*100aschange_ratefromdata}5.2 累计统计//累计统计defcumulativeStats(data){returnselect timestamp,temperature,cumsum(temperature)ascum_sum,cumavg(temperature)ascum_avg,cummax(temperature)ascum_max,cummin(temperature)ascum_minfromdata}5.3 趋势检测//趋势检测defdetectTrend(data,window10){resultselect timestamp,temperature,mavg(temperature,window)asma,iif(temperaturemavg(temperature,window),up,iif(temperaturemavg(temperature,window),down,stable))astrendfromdatareturnresult}六、多维度分析6.1 分组统计//分组统计defgroupStats(data,groupCol){returnselect avg(temperature)asavg_temp,max(temperature)asmax_temp,min(temperature)asmin_temp,std(temperature)asstd_temp,count(*)ascountfromdata group byeval(groupCol)}6.2 多维度聚合//多维度聚合defmultiDimAgg(data){returnselect device_id,bar(timestamp,1h)ashour,avg(temperature)asavg_temp,max(temperature)asmax_temp,min(temperature)asmin_tempfromdata group by device_id,bar(timestamp,1h)}6.3 交叉分析//交叉分析defcrossAnalysis(data){returnselect device_id,iif(temperature25,high,low)astemp_level,count(*)ascount,avg(humidity)asavg_humidityfromdata group by device_id,iif(temperature25,high,low)}七、性能优化7.1 增量计算//增量计算defincrementalAgg(newData,existingStats){//更新统计量 newCountexistingStats.countnewData.rows()newSumexistingStats.sumsum(newData.temperature)newAvgnewSum/newCountreturndict(STRING,ANY,[[count,newCount],[sum,newSum],[avg,newAvg]])}7.2 并行计算//并行计算defparallelAgg(data,numPartitions4){resultsarray(ANY,0)for(iin0..numPartitions){partitionselect*fromdata where device_id%numPartitionsi results.append!(aggPartition(partition))}//合并结果returnmergeResults(results)}八、实战案例8.1 完整实时统计系统//实时统计分析系统//1.创建数据流 share streamTable(100000:0,device_idtimestamptemperaturehumiditypressure,[SYMBOL,TIMESTAMP,DOUBLE,DOUBLE,DOUBLE])assensor_stream enableTablePersistence(sensor_stream,true,true,1000000)//2.创建聚合结果表 share table(1:0,time_windowdevice_idavg_tempmax_tempmin_tempstd_tempcount,[TIMESTAMP,SYMBOL,DOUBLE,DOUBLE,DOUBLE,DOUBLE,LONG])asagg_result//3.创建时间序列引擎 aggEnginecreateTimeSeriesEngine(sensor_agg,60000,[avg(temperature)asavg_temp,max(temperature)asmax_temp,min(temperature)asmin_temp,std(temperature)asstd_temp,count(*)ascount],agg_result,timestamp,device_id)subscribeTable(,sensor_stream,agg,-1,aggEngine,true)//4.移动统计 share table(1:0,timestampdevice_idtemperaturema_10ma_30,[TIMESTAMP,SYMBOL,DOUBLE,DOUBLE,DOUBLE])asma_resultdefcalculateMA(data){insert into ma_result select timestamp,device_id,temperature,mavg(temperature,10)asma_10,mavg(temperature,30)asma_30fromdata context by device_id}subscribeTable(,sensor_stream,ma,-1,def(msg){calculateMA(msg)},true)//5.模拟数据defgenerateMockData(){while(true){datatable(take(1..10,10)asdevice_id,take(now(),10)astimestamp,rand(20.0..30.0,10)astemperature,rand(40.0..60.0,10)ashumidity,rand(1000.0..1020.0,10)aspressure)sensor_stream.append!(data)sleep(5000)}}submitJob(mock_data,模拟数据,generateMockData)//6.查询接口defgetLatestStats(){returnselect*fromagg_result order by time_window desc limit10}addFunctionView(getLatestStats)print(实时统计分析系统启动完成)九、总结本文详细介绍了DolphinDB实时统计分析滚动窗口时间序列引擎、多窗口聚合滑动窗口移动平均、移动统计、指数移动平均实时统计实时计数、实时求和、实时百分位趋势计算变化率、累计统计、趋势检测多维度分析分组统计、多维度聚合、交叉分析性能优化增量计算、并行计算思考题如何选择合适的窗口大小如何优化滑动窗口计算性能如何处理乱序数据参考资料DolphinDB时间序列引擎DolphinDB流计算系列预告下一篇将介绍实时关联分析敬请期待
延伸阅读

更多相关文章

2026/10/25 9:45:54

第七届心理健康与教育、人文发展国际学术会议(MHEHD 2026)

第七届心理健康与教育、人文发展国际学术会议(MHEHD2026)将于2026年8月17-19日在中国长沙隆重召开。会议主要围绕“心理健康”“人文教育”等研究领域展开讨论。旨在为心理健康与人文教育的专家学者及企业发展人提供一个分享研究成果、讨论存在的问题与挑…

2026/10/29 7:24:06

反向行星丝杠模组封装与选型实战指南

反向行星丝杠这个品类,在传动圈里属于那种"听过的人多、真正摸透的人少"的部件。我最早接触它是在一个精密升降模组项目上,当时客户要求在一根丝杠上同时实现高推力、长寿命和断电自锁,普通滚珠丝杠方案怎么算都过不了寿命校核&…

2026/10/29 7:24:06

AI短视频生产:Sora API技术解析与应用实践

1. 项目概述:AI短视频生产的技术革命去年夏天,我在为一个电商客户制作产品视频时,第一次感受到传统内容生产的瓶颈。团队需要3天时间才能产出一条30秒的短视频,而客户的需求是每天更新5条不同风格的视频。这种矛盾促使我开始研究A…

2026/10/29 7:24:06

BP神经网络与EKF/PF融合的状态估计算法对比

1. 项目概述在工程实践中,状态估计是一个永恒的话题。无论是自动驾驶车辆的定位、无人机导航,还是工业设备的故障诊断,都需要对系统状态进行准确估计。传统方法如扩展卡尔曼滤波(EKF)和粒子滤波(PF)已经发展成熟,但面对非线性强、…

2026/10/29 7:24:06

microduck:轻量级强化学习实验框架入门与实战

强化学习这个词听起来唬人,但真正上手跑通第一个环境的人都知道,最难的往往不是算法本身,而是从零搭起一套能跑、能看、能改的实验骨架。microduck 就是这样一个轻量级的强化学习实验框架,它把环境封装、策略网络、训练循环、日志…

2026/10/29 7:24:06

房产门户源码V9.39商业版部署指南:从本地环境到多端联调全流程

简介:爱家房产V9.39商业版是一套面向房产门户网站运营者的PHP源码,采用红色宽屏大气界面,覆盖二手房、新房展示及最新手机端、小程序端,内置沙盘功能,模板与程序分离的扩展性框架适合企业或个人快速搭建并深度二次开发…

2026/10/29 7:19:06

PCB布局布线核心逻辑与实操参数指南

画完原理图,点下“更新到 PCB”的那一刻,很多人会愣在原地:一堆元件框挤在板框外面,飞线像蜘蛛网一样缠成一团。原理图只是逻辑,PCB 布局和 PCB 布线才是把逻辑变成物理现实的环节,同一个电路,两…

2026/10/28 14:42:12

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/28 15:28:56

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/28 3:32:29

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/29 0:03:42

学生选课系统DFD图绘制指南:边界划分与分层校验实战

简介:文档以顶层与第一层DFD图为核心,完整刻画学生选课系统的逻辑模型,面向软件工程课程设计、系统分析学习及毕设前期建模人群。顶层图界定系统边界,外部实体包括管理员、教师和学生三类角色;第一层图进一步细化用户登…

2026/10/29 0:03:42

JIRA敏捷落地:Scrum角色权限、Sprint与燃尽图避坑指南

简介:围绕“基于JIRA的敏捷开发项目管理”这一主题,面向产品负责人、Scrum Master及研发测试成员,梳理Scrum角色分工、迭代流程与JIRA工具配置的对应关系,适合初、中级团队导入敏捷管理时参考。压缩包共1个docx文件,大…

2026/10/29 0:03:42

SEMI S8人机工程验收实战:从条款拆解到现场实测的完整指南

简介:面向半导体设备设计、制造与运维工程师及安全合规人员,这份资料聚焦SEMI标准体系下的设备安全规范,重点收录SEMI S8-0308《半导体制造设备人体工程学工程安全指南》。内容围绕设备设计原则、错误与事故预防、人体工程学适配三大主线展开…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑