睿象云智能告警平台的分派策略
632
2023-07-10
本文讲了如何进行事件分析,事件分析方法。
最原始的事件注册
addEventListener方法大家应该都很熟悉,它是Html元素注册事件最原始的方法。先看下addEventListener方法签名:
element.addEventListener(event, function, useCapture)
event:事件名,例如“click”,这里要提醒的一点是不要加前缀“on”;
function:事件触发时执行的函数;事件分析报告
userCapture:默认为false,表示event事件在冒泡阶段触发。如果设置为true,则事件将会在捕获阶段触发。如果不清楚什么是捕获和冒泡,请自觉了解事件的冒泡机制。
虽然addEventListener包含了三个参数,但一般我们都只使用了前两个参数,下面的代码只使用了两个参数:
document.getElementById("myBtn").addEventListener("click", function() {
alert(“我是在冒泡阶段触发的哦!”);
});
上面代码注册的函数会在冒泡阶段触发,如果想在捕获阶段触发,直接把第三个参数传递进去就ok了。在实现DOM元素拖拽功能时,会使用到捕获方式。
另外,IE8以及之前的版本不支持事件按捕获形式传播,并且注册方法也没有addEventListener函数,IE为事件注册提供了attachEvent方法。和addEventListener相似,也包含有event和function参数,但不包含第三个参数。
jQuery事件注册
jQuery的事件函数通过jQuery.fn.extend附加到jQuery对象,jQuery.fn.extend包含了jQuery的所有事件注册函数。那么jQuery到底提供了哪些事件函数?这里把这些函数分层了三类:
(1)和事件同名的函数:jQuery几乎提供了所有DOM元素事件的同名函数,像我们经常使用的click、focus、scroll等函数。使用也很简单,例如我们要给div元素绑定click事件,可以直接写成$(“div”).click(function(){})。DOM元素的事件有很多,jQuery为每个事件都添加了同名的注册函数吗?看源码!
//循环遍历所有的dom元素事件名数组
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
//把dom元素所有事件通过fn[事件名]的方式添加到jquery对象
// Handle event binding
jQuery.fn[ name ] = function( data, fn ) {
//如果参数长度大于0,则调用on方法委托函数到name事件;如果参数长为0,则触发事件执行
return arguments.length > 0 ?
this.on( name, null, data, fn ) :
this.trigger( name );
};
});
首先看到的是一串包含了所有DOM元素事件的字符串,通过空格把字符串分隔成数组。如果传递的参数长度大于0,则调用jQuery对象的on方法注册事件。如果参数长度为0,则直接调用trigger方法触发事件。例如(“div”).click(function())将会调用on方法注册事件,而(“div”).click()则调用trigger方法,立即触发click事件。事件分析法
上面的代码有几点需要作下解释:
jQuery.fn中的函数包含的上下文this是指向jQuery实体,例如$(“div”)实体。
jQuery.fn[name] = function(){}等效于jQuery.fn.name = function(){},例如jQuery.fn[“click”] = function(){}等效于jQuery.fn.click = function(){}。
This.on和this.trigger方法这里暂不忙解释。
(2)绑定和委托函数:bind/unbind和delegate/undelegate方法通过jQuery.fn.extend附加到jQuery对象上。代码很简单:
jQuery.fn.extend({
//事件绑定
bind: function( types, data, fn ) {
return this.on( types, null, data, fn );
},
//事件解绑
unbind: function( types, fn ) {
return this.off( types, null, fn );
},
//事件委托
delegate: function( selector, types, data, fn ) {
return this.on( types, selector, data, fn );
},
//委托解绑
undelegate: function( selector, types, fn ) {
return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
}
});
bind和delegate都是直接调用jQuery对象的on函数,唯一区别是传递的参数不同,bind的第二个参数为null,而委托的第二个参数是一个selector。别小看这个区别,使用jQuery绑定事件常出的问题部分原因就是没搞清楚这两个参数的区别。
(3)底层注册函数:前面介绍的和事件同名的函数、绑定和委托函数最终都是调用了jQuery对象的on函数,我们在编程的时候也可以直接使用on函数。on函数代码比较复杂,我们先看看外壳:
jQuery.fn.extend({
//比较底层的事件委托函数,其他函数都是调用这个来和元素建立绑定或者委托
on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
return this.each( function() {
jQuery.event.add( this, types, fn, data, selector );
});
},
//一次性事件绑定
one: function( types, selector, data, fn ) {
return this.on( types, selector, data, fn, 1 );
},
//比较底层的事件解绑,其他解绑函数都是调用该函数执行解绑
off: function( types, selector, fn ) {
return this.each(function() {
jQuery.event.remove( this, types, fn, selector );
});
},
//触发事件
trigger: function( type, data ) {
return this.each(function() {
jQuery.event.trigger( type, data, this );
});
},
//只执行元素绑定的处理函数,不会触发浏览器的默认动作
triggerHandler: function( type, data ) {
var elem = this[0];
if ( elem ) {
return jQuery.event.trigger( type, data, elem, true );
}
}
});
为什么说是底层的函数?因为前面的所有绑定最终都是调用on函数,所有的解绑最终调用off函数。这里还包含了trigger和triggerHandler函数,前一个是触发元素的所有type事件行为,而triggerHandler只触发绑定的函数而不触发行为。例如focus事件,triggerHandler只会触发绑定给元素的focus处理函数,而不会真的让元素获得焦点。但trigger函数会让元素获取焦点。
汇总一下,jQuery提供的事件处理函数不外乎也就下面这些。
一、什么是事件分析?
事件分析模型是用来研究用户的某个、某些行为事件本身特征的方法,用此方法来追踪、记录用户行为或业务过程。安全事件分析
事件分析是所有分析模型中最基础的一种,它是指对具体的行为事件,进行指标加工的一种分析方法。
常见的指标计算规则为行为事件发生的人数、次数、人均次数,以及针对行为事件的属性特征进行特殊运算,如去重、求和、求均值等。
例如:
市场人员可能关注点击进入落地页的人数以及进入落地页后用户是否点击核心按钮,比如“立即注册/立即购买”等?
运营人员可能更关注某次邀请好友活动中老用户是否点击该活动页面,是否将邀请海报分享到朋友圈?
PM可能更关心新功能上线后用户是否点击打开?
由此可见,事件就是用户在产品上的行为,它是用户行为的一个规范性描述,用户在产品上的所有获得的程序反馈都可以抽象为事件,由开发人员通过埋点进行采集。
也就是说,将一段代码放入对应的页面/按钮,用户进入页面/点击按钮的本质是在加在背后的代码,同时再加在事件采集代码,这样就被SDK所记录下来了。
二、事件如何采集?
在采集事件数据时,需要3个基本概念:
事件:用户在产品上的行为
属性:描述事件的维度
值:属性的内容
这3个基本概念,组成的事件结构,可以极大地节省事件量,提高工作效率,使后续的数据洞察和交叉分析更精确。
就像我们在写记叙文的时候,要关注的六要素一样:事件、地点、人物、起因、经过、结果。简单点说就是谁,在什么时间,在哪儿,干了什么事同样的逻辑。
三、事件模型的应用
事件分析是最基础的数据分析模型,应用场景很广泛。
事态模型度量后的结果可以通过线形图、柱状图、表格、数值、气泡图等方式表达。
事态模型的线图可以用来观察一个或者多个数据连续变化的趋势,可以根据分析需要进行周期性数据分析。
通过事件分析还可以准确了解产品内发生的事件量,根据产品特性合理配置追踪,检测变化趋势、维度对比等指标。
一、事件分析概述
事件分析,本质上是分析埋点事件的用户触发情况以及埋点事件的分析统计情况。
比如APP启动事件的触发次数、触发人数、人均触发次数等。
ps1:说句题外话,既然是分析埋点事件,那么埋点是否准确,就直接关系到事件分析的数据是否准确。可见,重视埋点质量是多么重要的一件事情(可惜可叹,很多公司根本不重视埋点质量,悲哀呀)。
ps2:再啰嗦一下,理论上来说,通过埋点事件分析,可以几乎实现任何数据需求,甚至连用户画像、指标体系都可以通过分析埋点事件实现。
二、事件分析细述
1. 分析哪些类型的事件
元事件:指埋点里面真真实实存在的埋点事件,不经过任何二次处理,比如埋了一个APP启动事件,这个APP启动事件就是元事件。
虚拟事件:基于元事件,进行算法计算得出的事件,比如我们可以创建一个虚拟事件,算法为APP启动事件的次数/APP元素点击的次数,然后分析这个虚拟事件的数据情况。
2. 分析事件的哪些指标
包括事件层面的指标和事件属性层面的指标:
1)事件层面的指标
总次数:时间范围内,触发事件的次数触发人数:时间范围内,触发事件的人数人均次数:时间范围内,总次数/触发人数2)事件属性层面的指标
对于所有类型的事件属性- 去重数:时间范围内,事件属性的去重个数。事件所有的属性,都可以分析这个指标。
对于数值型的事件属性- 总和:时间范围内,属性的取值求和。
均值:时间范围内,属性取值的术平均值最大值:时间范围内,属性取值的最大值最小值:时间范围内,属性取值的最小值3)从什么维度分析事件指标
事件分析,不仅可以分析事件的指标数据,还要支持按照某些维度,从某个维度分析事件的指标数据。这些维度包括以下两个部分:
事件属性维度也即事件的公共字段和自定义字段。如果事件的属性是数值类型,则可按照数值区间进行分析,比如支付事件,有支付金额这个属性,那么我们可以按照金额区间[0,200],[201,500]这两个区间,进行分组聚合分析。用户属性维度也即触发事件的用户属性,比如按性别进行分组聚合分析事件数据。4)事件分析结果过滤
过滤条件可以从下面两个方面,对事件分析的结果进行过滤:不良事件分析
事件属性:包括事件的通用属性和事件的自定义属性用户属性:也即触发事件的用户属性,比如过滤出性别是女的数据5)举例
我们以APP启动事件作为栗子说明,假设该事件有自定义字段:启动时长。
这个事件,属于元事件事件层面的指标有:总次数、触发人数、人均次数事件的启动时长这个属性的指标有:去重数、总和、均值、最大值、最小值按照维度,分析事件的指标数据,我们从下面两个方面举例:事件属性维度:比如按照启动时长的分布区间[0,2s]、(2s,4s],分析两个区间里面APP启动的触发次数用户属性维度:比如从用户的城市这个维度出发,分别统计深圳和广州两个城市的APP启动次数最后,可以对事件分析的结果,进行筛选过滤,比如筛选出性别女的数据。
三、事件分析总结
我们总结一下事件分析:事件分析,其实就是从不同维度分析事件的指标数据。事件分析报告
有哪些事件:元事件和虚拟事件。有哪些指标:包括事件层面的指标:总次数、触发人数、人均次数,和事件属性层面的指标:去重数、总和、均值、最大值、最小值。有哪些属性维度:事件属性维度、用户属性维度。可以从事件属性和用户属性两个方面对数据进行筛选过滤。
四、事件分析UI界面
这里简单画一下事件分析的UI界面原型。
1. 事件设置部分
2. 结果展示部分
五、埋点事件其他应用
埋点事件,不仅可以用作事件分析,还可以应用到其他方面。比如用户画像、指标体系搭建。
用户画像:
用户画像,本质上来说,就是对用户进行打标签。而用户为什么会打上某个标签呢?最终还是落在用户行为上,而埋点事件就是用户行为的数据。所以对埋点事件进行分组聚合,其实就是打标签的过程。
举个栗子:我们对商品购买事件的金额,做区间维度分析,月购买金额在500元以下的用户打上低消费标签,月购买金额在500~800元之间的用户打上中消费标签,月购买金额在800元以上的用户打上高消费标签。这个打标签的过程,其实就是对事件进行维度聚合的过程。事件日志分析
指标体系:
搭建数据指标体系的搭建工作,具体方法,在这里不细说,后面我们专门进行总结。但是基本思路就是通过原子指标加上修饰词(维度),组合派生出各种派生指标的方法,穷尽所有的业务指标。
这里的原子指标,其实就是前面我们总结的那些事件层面的指标和事件属性层面的指标。而原子指标的修饰词,恰恰是埋点事件的属性和用户属性。
发表评论
暂时没有评论,来抢沙发吧~