【原创】StreamInsight查询系列(十九)——查询模式之检测异常

上篇文章介绍了查询模式中如何发现趋势,这篇博文将介绍StreamInsight中如何检测异常。

测试数据准备

为了方便测试查询,我们首先准备一个静态的测试数据源:

var now = DateTime.Parse("09/12/2011 8:57:00 PM");
var input = new[]
{new { Time = now + TimeSpan.FromSeconds(1), Value = 20},new { Time = now + TimeSpan.FromSeconds(2), Value = 30},new { Time = now + TimeSpan.FromSeconds(3), Value = 120},new { Time = now + TimeSpan.FromSeconds(4), Value = 200},new { Time = now + TimeSpan.FromSeconds(5), Value = 20},new { Time = now + TimeSpan.FromSeconds(6), Value = 110},new { Time = now + TimeSpan.FromSeconds(7), Value = 110},new { Time = now + TimeSpan.FromSeconds(8), Value = 210},new { Time = now + TimeSpan.FromSeconds(9), Value = 120},new { Time = now + TimeSpan.FromSeconds(10), Value = 130},new { Time = now + TimeSpan.FromSeconds(11), Value = 20},new { Time = now + TimeSpan.FromSeconds(12), Value = 30},
};

接下去将上述数据源转变为点类型复杂事件流:

var inputStream = input.ToPointStream(Application, t =>PointEvent.CreateInsert(t.Time.ToLocalTime(), new { Value = t.Value }),AdvanceTimeSettings.IncreasingStartTime);

异常检测

问题:怎样每秒1次的计算过去5秒内Value字段值超过阈值100的事件数超过事件总数目80%的异常事件?

首先我们定义一下结果事件流中的负载类型SpikeEvent如下:

struct SpikeEvent
{public double Ratio { get; set; }
}

我们最终希望调用查询的方式如下:

int threshold = 100;
double ratio = 0.8;var resultStream = DetectSpikes(inputStream,threshold, // 指定阈值(超过该阈值的事件被认为是“特殊事件”)ratio, // “特殊事件”占事件总数的百分比TimeSpan.FromSeconds(5), // 窗口大小TimeSpan.FromSeconds(1), // 跳跃大小e => e.Value); // 指定的比较字段

因此最关键的部分就是如何实现DetectSpikes。阅读过

《StreamInsight查询系列(十五)——查询模式之窗口比率》文章的读者应该对此类查询并不陌生。

这里不加过多描述地给出DetectSpikes的实现:

/// <summary>
/// 在输入流中检测异常
/// </summary>
/// <typeparam name="TInput">输入流事件类型</typeparam>
/// <param name="inputStream">输入流</param>
/// <param name="threshold">异常定义阈值</param>
/// <param name="ratio">异常事件占事件总数的百分比</param>
/// <param name="windowSize">衡量事件数目的窗口大小</param>
/// <param name="hopSize">跳跃大小</param>
/// <param name="fieldSelector">选择输入事件中的某个字段来检测事件类型</param>
/// <returns>query that detects the spikes</returns>
private static CepStream<SpikeEvent> DetectSpikes<TInput>(CepStream<TInput> inputStream, int threshold, double ratio,TimeSpan windowSize, TimeSpan hopSize,Expression<Func<TInput, int>> fieldSelector)
{// 统计跳跃窗口内所有事件的数目var totalValues = from w in inputStream.HoppingWindow(windowSize,hopSize,HoppingWindowOutputPolicy.ClipToWindowEnd)select new{Count = w.Count(),};// 构造包含过滤条件的LINQ语句var parameter = fieldSelector.Parameters.First();var field = fieldSelector.Body;Expression<Func<TInput, bool>> filterExpression = (Expression<Func<TInput, bool>>)Expression.Lambda(Expression.GreaterThan(field, Expression.Constant(threshold)),parameter);// 统计跳跃窗口内异常事件的数目var bigValues = from w in inputStream.Where(filterExpression).HoppingWindow(windowSize,hopSize,HoppingWindowOutputPolicy.ClipToWindowEnd)select new{Count = w.Count(),};// 选择异常事件数目超过事件总数一定百分比的事件var output = from total in totalValues.ToPointEventStream()join big in bigValues.ToPointEventStream()on true equals truewhere big.Count * 1.0 / total.Count >= ratioselect new SpikeEvent { Ratio = big.Count * 1.0 / (total.Count) };return output;
}

输出结果如下:

下一篇将介绍StreamInsight查询模式中如何检测间隙事件。

转载于:https://www.cnblogs.com/StreamInsight/archive/2011/09/12/StreamInsight-Query-Series-Part19-Query-Patterns-Detect-Spikes.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tensorflow 旋转图片_使用TensorFlow对图像进行随机旋转的实现示例

https://www.jb51.net/article/178934.htm在使用深度学习对图像进行训练时&#xff0c;对图像进行随机旋转有助于提升模型泛化能力。然而之前在做旋转等预处理工作时&#xff0c;都是先对图像进行旋转后保存到本地&#xff0c;然后再输入模型进行训练&#xff0c;这样的过程会增…

SIP协议详解

SIP协议概念** 会话启动协议SIP&#xff08;Session Initiation Protocol&#xff09;是一个在IP网络上进行多媒体通信的应用层控制协议&#xff0c;它被用来创 建、修改、和终结一个或多个参加者参加的会话进程。 **SIP协议可用于发起会话&#xff0c;也可以用于邀请成员加入…

arcgis判断两个字段是否相等

def a(b,c):if(bc):return 1else:return 0 不懂问题请进群交流

深入浅出InfoPath——动态获取InfoPath中的命名空间

问题描述&#xff1a;我们在不同的开发Server和Product环境中部署InfoPath的时候&#xff0c;发现命名空间会随InfoPath的小版本变化而变化。 比如&#xff1a;http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-03-14T09:12:19 处理办法&#xff1a; 使用Linq to…

一元三次方程重根判别式_许兴华——关于复数集中解一元二次方程的问题

在学习复数时&#xff0c;最近有个别比较好学的同学提出一个问题&#xff1a;“对于复数系数一元二次方程&#xff0c;是否可以用求根公式求解呢&#xff1f;”——回答是肯定的&#xff01;关于复数集中解一元二次方程的问题。其实&#xff0c;在复数集内解关于x的一元二次方程…

arcgis批量将栅格里的nodata转为0

新建模型 修改名称 在arcgis的工具箱中新建一个模型&#xff0c;具体模型如下 模型里的具体参数如下 1.栅格计算器 2.输出路径&#xff0c;%—%这样的的输出可以保留之前的文件的名称 不懂问题请进群交流

基于SIP协议的视频通讯

1.sip协议及其发展 sip&#xff08;session initiation protocal&#xff09;称为会话发起协议&#xff0c;是由ietf&#xff08;internet engineering task force&#xff09;组织于1999年提出的一个在基于ip网络中&#xff0c;特别是在internet这样一种结构的网络环境中&…

hive sql 怎么实现循环_Hive存储过程实现-hpsql

1. 什么是hpsql目前版本的hive中没有提供类似存储过程的功能&#xff0c;使用Hive做数据开发时候&#xff0c;一般是将一段一段的HQL语句封装在Shell或者其他脚本中&#xff0c;然后以命令行的方式调用&#xff0c;完成一个业务或者一张报表的统计分析。好消息是&#xff0c;现…

解决若干WTL与VS2010的兼容问题(如error MSB6006: “cmd.exe”)

解决[error MSB6006: “cmd.exe” 已退出&#xff0c;代码为 9009。]问题: The AppWizard for VS2010 above has two small glitches (however they might deter people from using WTL with VS2010). These are very easy to fix: 1) [Output Directory] and [Intermediate Di…

arcgis中制作复杂符号

简介 在arcgis制图中常会遇到复杂的制图符号,如下 通过平常的代码显示并不会显示原图这样的效果,接下来我们开始解决改问题 主要思想: 通过字体文件将其显示 所以的软件: arcgis和FontCreator FontCreator软件下载链接

vb 通过php连接mysql数据库连接_PHP连接MySQL数据库的几种方法

1.最简单的方式-mysql(面向过程)$con mysql_connect("localhost","root","password");$select_db mysql_select_db(test);if (!$select_db) {die("could not connect to the db:\n" . mysql_error());}//查询代码$sql "select…

处理硬件设备访问权限问题

在硬件抽象层模块中&#xff0c;我们是调用open函数来打开对应的设备文件的。例如&#xff0c;在2.3.2小节中开发的硬件抽象层模块freg中&#xff0c;函数freg_device_open调用open函数来打开设备文件/dev/freg。 60 if((dev->fd open(DEVICE_NAME, O_RDWR)) -1) { 61 …

根据rtk参数在arcgis中进行可视化

RTK原始文件 通过原始文件发现&#xff0c;arcgis中并没有中央经线是113的CGS2000投影坐标&#xff0c;所以此处需要进行自定义投影转换 不懂问题请进群交流

django图片上传到oss_django 配置阿里云OSS存储media文件的例子

1. 安装django-aliyun-oss2-storage包linux上用 pip install django-aliyun-oss2-storage 无报错&#xff0c;顺利安装windows上报错:(python3_sbs) F:\projects\virtualenv\python3_sbs\Scripts>pip install django-aliyun-oss2-storageCollecting django-aliyun-oss2-stor…

解决mapgis转位置范围偏差过大的问题(比例尺)

问题描述: 在mapgis投影坐标转地理坐标,结果发现地理坐标错误 这样的地理坐标很明显是错误的,发现经度位置些许有些偏差,纬度有大幅度偏差 问题主要出现在在调整投影参数的比例尺分母不正确 解决: 找一个相似研究范围的mapgis文件或者shp文件 方法1(mapgis文件): …

有意思的小学数学竞赛题-2

刚刚在matrix67上看到一篇很有意思的帖子&#xff0c;原文http://www.matrix67.com/blog/archives/4485 我老早就写过一个经典的小学几何题。如果你还没看过这个问题&#xff0c;你一定要去看看。一个小学奥数老师曾 经告诉我&#xff0c;当年带领学生参加这次竞赛时&#xff0…

c语言递归例题分数_C语言递归练习(附答案)

dic递归基础练习题&#xff1a;1.求123……n的值//a(a1)…bint sum(int a,int b){if(ba) return a;return asum(a1,b);}2.求1*2*3*……*n的值a*(a1)*(a2)…*bcheng(int begin,int end){if(beginend) return begin;return begin * cheng(begin1,end);}5.小猴子第一天摘下若干桃子…

MYSQL安装时解决要输入current root password的方法

在装MYSQL的时候发现要输入current root password (你的系统曾经装过MYSQL在重装就会要求输入原来设定的密码&#xff0c;如果是第一次安装就不会出现) 终归结出以下解决方法&#xff1a; 1.清除MYSQL的安装目录,默认是C:\Program Files 2.清除MYSQL数据存放目录&#xff0…

利用python处理中国地面气候资料日值数据集(V3.0)

原始文件 数据链接 00年到18年气象数据&#xff0c;但是未进行处理-数据集文档类资源-CSDN下载00年到18年气象数据&#xff0c;但是未进行处理&#xff0c;如果需要处理好的数据&#xff08;execl和shp&#xff09;&#xff0c;请查看本博主其他更多下载资源、学习资料请访问C…

window.open使用中遇到的问题

前端开发中经常要用到 window.open 弹出一个新窗口来进行交互&#xff0c;但是在使用过程中却会碰到各种各样的问题&#xff0c;下面是我在平时开发过程中碰到的一些问题。 对于winodw.open的使用可以先看下这个文章 http://www.w3help.org/zh-cn/causes/BX1053 一.浏览器拦截…