目录
0 算法原理
1 数据准备
2 问题分析
3 小结
数字化建设通关指南专栏原价99,现在活动价39.9,按照阶梯式增长,直到恢复原价
0 算法原理
波峰识别算法
序列数据是按照时间进行采集,其中400个点一个周期,一条数据共10个周期,即4000个点。 首先针对序列数据判断每个周期是否存在波峰,并在存在波峰的情况下进行波峰形状识别。 其中波峰识别主要遍历寻找某个值既大于左边又大于右边
参数:
①peak_thre:获取时域振动数据95% 分位数值大小,将此值得0.8倍作为波峰阈值
②peak_width:数据中间隔10个点及其以内的波峰被识别为一个波峰
算法原理:
data[i-1]<data[i] & data[i]>data[i+1] & data[i]> peak_thre
OR
data[i-1]=data[i] & data[i]> peak_thre
1 数据准备
with peak as(select stack(30,1, 1,2, 3,3, 3,4, 5,5, 25,6, 4,7, 10,8, 11,9, 2,10, 11,11, 1,12, 13,13, 23,14, 33,15, 53,16, 3,17, 13,18, 93,19, 30,20, 21,21, 2,21, 13,23, 31,24, 56,25, 53,26, 13,27, 33,28, 31,29, 28,30, 1) as(id,val))
2 问题分析
具体实现SQL如下:
with peak as(select stack(30,1, 1,2, 3,3, 3,4, 5,5, 25,6, 4,7, 10,8, 11,9, 2,10, 11,11, 1,12, 13,13, 23,14, 33,15, 53,16, 3,17, 13,18, 93,19, 30,20, 21,21, 2,21, 13,23, 31,24, 56,25, 53,26, 13,27, 33,28, 31,29, 28,30, 1) as(id,val))select sum(case when val >= lag_val and val >= lead_val and val > peak_thre then 1 end) peak_cntfrom (select id, val, peak_thre, peak_width, lag(val, 1, 0) over (partition by peak_width order by id) lag_val, lead(val, 1, 0) over (partition by peak_width order by id) lead_valfrom (select id, val, percentile(val, 0.95) over () * 0.8 as peak_thre, ceil(id / 10) peak_widthfrom peak) t) t
SQL解释:
- (1) peak_thre:采用percentile(val, 0.95) 函数
- (2)峰值判断利用lag()及lead()函数
- (3)间隔10个点分组: ceil(id / 10)
3 小结
本文利用SQL实现了一种时序数据的波峰个数检测算法。在时序数据分析时,lag(),lead()分析函数及统计函数常常被用到。
如果觉得本篇文章对你还有点帮助,那么不妨也可以选择去看看我的博客专栏文章,里面内容更精彩。具体专栏内容如下(部分展示):
数字化建设通关指南专栏原价99,现在活动价39.9,按照阶梯式增长,直到恢复原价
主要内容包括:
1 SQL进阶实战技巧
可以参考如下教程,具体链接如下
SQL很简单,可你却写不好?也许这才是SQL最好的教程
上面链接中的文章及技巧会不定期更新。
2 数仓建模实战技巧和个人心得
文章部分标题展示如下:
1)新人入职新公司后应如何快速了解业务?
2)以业务视角看宽表化建设?
3) 维度建模 or 关系型建模?
4)业务模型与数据模型有什么区别?业务阶段的模型该如何建设?
5)业务指标体系该如何建设?指标体系该如何维护?指标平台应如何建设?指标体系 该由谁来搭建?
6)如何优雅设计DWS层?DWS层模型好坏该如何评价?
7)指标发生异常,该如何排查?应从哪些方面入手寻找问题点?
8) 数据架构的选择,mpp or hadoop?
9)数仓团队应如何体现自己的业务价值,讲好数据故事?
10)BI与大数据有什么关系?BI与信息化、数字化之间有什么关系?BI与报表之间的关 系?
11)数据部门如何与业务部门沟通,并规划指引业务需求?
文章不限于以上内容,有新的想法也会及时更新到该专栏。
具体专栏链接如下:
数字化建设通关指南_莫叫石榴姐的博客-CSDN博客