课堂学习笔记
第五天课程:数据分析
数据分析–基本步骤–明确目的和思路–数据分析方法论
- 明确数据分析目的,确定分析方法
- 用户行为理论是一个数据分析方法论
- 把跟数据分析相关的营销、管理等理论称为数据分析方法论
从宏观角度指导如何进行数据分析 - PEST分析法:对于宏观环境的分析。Political、economic、technological、social
- 5W2H分析法:why、what、when、who、where、how、how much
- 4P营销理论:Product、price、place、promotion
- 根据实际业务进行调整。
数据分析–基本步骤–收集 处理 分析 展现
- 按照数据分析框架,收集相关数据
- 数据挖掘侧重解决:分类,聚类,关联和预测
数据分析–分布式
- 分布式系统:一个软件或者硬件组件分布在不同的网络计算机上,彼此之后通过消息传递进行通信和协调。用更多的计算机组成分布式集群对外提供服务。
- 分布式方案:分布式应用和服务:提高并发访问能力,减少数据库连接,比如dubbo
分布式静态资源:减少服务器负载压力,比如CDN
分布式数据:apache hadoop HDFS
分布式计算 - 分布式和集群的区别和相同:都是用多台的服务器,分布式部署相同的服务模块,集群部署不同的服务或应用,减少负载。
大数据时代
- 理论-技术-实践
- 技术:
云技术:硬件虚拟化
分布式处理技术:数据源-计算层-存储层-查询层-产品
感知技术 - 互联网的大数据:百度两种类型数据:用户搜索表征的需求数据;爬虫和阿拉丁获取的公共web数据
大数据分析系统–实时、离线之分
- 大数据分析系统分为实时、离线两种。
- 实时处理:时效性要求高,流式处理,数据产生直接进行计算
- 离线处理:批处理,针对过去一段时间
- 区别在于数据产生到分析的时效性。
第六天课程:网站流量日志分析
网站流量日志分析–网站web流量日志
- 日志生成渠道:
web服务器软件,httpd、nginx,tomcat自带的日志记录功能。
自定义采集用户行为数据,通过在页面嵌入自定义的javascript代码来获取用户的访问行为,然后通过ajax请求到后台记录日志。 - 有没有记录流量日志,都不影响用户体验。
网站流量日志分析–自定义采集原理–雏形原理
- js如何更好的采集数据:埋点问题
- 跨域:协议、主机、端口 任何一个不一样,域就不一样
- 当使用ajax访问远程服务器,失败时,禁止跨域服务。每家产品都针对跨域问题进行了解决。
- 用图片请求模拟的形式把数据传递到后台。看似是图片请求,其实底层在传递数据。
网站流量日志分析–自定义采集原理–详解
- 原理分析
首先,用户的行为会触发浏览器对被统计页面的一个 http 请求,比如打开某网页。当网页被打开,页面中的埋点 javascript 代码会被执行。
埋点是指:在网页中预先加入小段 javascript 代码,这个代码片段一般会 动态创建一个script 标签,并将 src 属性指向一个单独的 js 文件,此时这个单 独的 js 文件(图中绿色节点)会被浏览器请求到并执行,这个 js 往往就是真正 的数据收集脚本。
数据收集完成后,js 会请求一个后端的数据收集脚本(图中的 backend), 这个脚本一般是一个伪装成图片的动态脚本程序,js 会将收集到的数据通过 http 参数的方式传递给后端脚本,后端脚本解析参数并按固定格式记录到访问 日志,同时可能会在 http 响应中给客户端种植一些用于追踪的 cookie。
网站流量日志分析–设计实现开始–确定收集信息
网站流量日志分析–确定埋点代码js
- 埋点代码:职责:当页面打开时,加载收集数据的js
- 如何页面一打开,埋点代码就执行
执行完埋点代码,采集数据的js就加载到界面
js收集数据,往后台发送数据
js匿名函数自调用 - var _maq = _maq || [] 防止数组已经被定义过。
- (function(){})(); js自调用匿名函数,避免重名,只运行一次,一般用于初始化 ()意思是立马调用匿名函数
<html>
<head>
埋点js开始
<script type="text/javascript">
var _maq = _maq || [];
_maq.push(['_setAccount', 'UA-XXXXX-X']);
(function() {
var ma = document.createElement('script'); //自动创建一个ma js
ma.type = 'text/javascript'; ma.async = true;
ma.src = ('https:' == document.location.protocol ?
'https://ssl' : 'http://www') + '.google-analytics.com/ma.js';
var s = document.getElementsByTagName('script')[0];//页面的第一个script
s.parentNode.insertBefore(ma, s); })();//将ma js插入到dom树,第一个script之前
</script>
</head>
</html>
这段代码的主要目的
就是引入一个外部的 js 文件(ma.js),方式是通过 document.createElement 方法 创建一个 script 并根据协议(http 或 https)将 src 指向对应的 ma.js,最后将这个 元素插入页面的 dom 树上。
注意 ma.async = true 的意思是异步调用外部 js 文件,即不阻塞浏览器的解析,待外部 js 下载完成后异步执行。这个属性是 HTML5 新引入的。
插入node需要通过parent或者兄弟来操作,比如s.parentNode.insertBefore(ma, s)
网站流量日志分析–前端数据采集js
数据收集脚本(ma.js)被请求后会被执行,一般要做如下几件事:
- 通过浏览器内置 javascript 对象收集信息,如页面 title(通过 document.title)、 referrer(上一跳 url,通过 document.referrer)、用户显示器分辨率(通过 windows.screen)、cookie 信息(通过 document.cookie)等等一些信息。
- 解析_maq 数组,收集配置信息。这里面可能会包括用户自定义的事件跟 踪、业务数据(如电子商务网站的商品编号等)等。
- 将上面两步收集的数据按预定义格式解析并拼接(get 请求参数)。
- 请求一个后端脚本,将信息放在 http request 参数中携带给后端脚本。
这里唯一的问题是步骤 4,javascript 请求后端脚本常用的方法是 ajax,但是ajax 是不能跨域请求的。一种通用的方法是 js 脚本创建一个 Image 对象,将 Image 对象的 src 属性指向后端脚本并携带参数,此时即实现了跨域请求后端。这也是 后端脚本为什么通常伪装成 gif 文件的原因。
网站流量日志分析–后端数据采集
log.gif 是后端脚本,是一个伪装成 gif 图片的脚本。后端脚本一般需要完 成以下几件事情:
- 解析 http 请求参数得到信息。
- 从 Web 服务器中获取一些客户端无法获取的信息,如访客 ip 等。 3、将信息按格式写入 log。
- 生成一副 1×1 的空 gif 图片作为响应内容并将响应头的 Content-type设为 image/gif。
- 在响应头中通过 Set-cookie 设置一些需要的 cookie 信息。