Day25_20180602_网站日志流量分析项目06:数据分析的实现及任务调度框架
一、数据仓库模型
| valid | string | |
| ip | string | |
| user_id | string | |
| time | string | |
| daystr | string | |
| timestr | string | |
| month | string | |
| day | string | |
| hour | string | |
| request | string
注意:构建星型模型的好处:虽然会有一定的数据冗余,但是数据分析时候不用关联更深层次的表进行数据处理,处理数据更高效。
星型模型:时间维度:年、季度、月、周、天、小时
雪花模型:时间维度:时间
浏览分析
统计每天每小时的PV数
分析维度:天、小时
select daystr,hour ,count(request) as pv
from weblog_detail
group bydaystr,hour;
统计每天的pv数
select daystr,count(request) as pv
from weblog_detail
group bydaystr;
统计每月的pv数
注意:注意:如果做了分区这么写可以,如果没有需要在分组字段上面加上year
select month,count(request) as pv
from weblog_detail
group bymonth where year='';
--如果分区字段:年/月/日月:01-12
--如果分区字段:年/月/日月:01-12select year ,month ,count(request) as pv from table group by year,month;--如果分区字段:日(yyyy-MM-dd)月:yyyy-MM年/月:yyyy/MM
统计不同终端维度的PV数
user_agent:browser_t/browser_vos_t/os_v统计不同浏览器终端的pv数据
select browser_t,browser_v,count(request) as pv
from weblog_detail
group by browser_t,browser_v;
select user_agent,count(request) as pv from weblog_detail group by user_agent;
统计不同终端类型的pv数据
统计谷歌浏览器的不同终端的pv数selectuser_agent,count(request) as pv from weblog_detail where user_agent like '%Chrome%' and user_agent like "%Linux%" group by user_agent;
统计每个月每个终端的pv数
select month,user_agent ,count(request) as pv
fromweblog_detail
group bymonth,user_agent;
统计每天人均pv数
本案例中以ip代表用户,实际工作中有用户id字段总pv/用户个数
selectdaystr,count(request)/count(distinct ip) as avg_pv
fromweblog_detail
group bydaystr;
基于visit模型进行统计
select daystr,sum(pageNum)/count(distinct ip) as avg_pv from click_visit group by daystr;
注意:解析:sum(pageNum)已经提前聚合过了,效率比count(request)高很多。
统计每天每个来源的pv数
select daystr,ref_host,count(request) as pvfrom weblog_detailwhere ref_host is not null group by daystr,ref_host order bypv desc;
统计每天每个小时来源中产生最多的pv的的TOP3
2018-05-23 00 www.baidu.com 90888
2018-05-23 00 www.qq.com 90123
2018-05-23 01 www.baidu.com 88888
2018-05-23 01 www.qq.com 34567
分析:分组后排序,窗口函数
分组:group by:分组后只有一条窗口函数:row_number() 先求出每天每个小时每个来源的pv数
select tmp2.daystr,tmp2.hour,tmp2.ref_host,tmp2.pv,tmp2.numb
from ( select tmp1.daystr,tmp1.hour,tmp1.ref_host,tmp1.pv,row_number() over (partition by tmp1.daystr,tmp1.hour order by tmp1.pv desc )as numbfrom(select daystr,hour,ref_host ,count(request) as pvfrom weblog_detailwhereref_host is not nullgroup bydaystr,hour,ref_host) tmp1
) tmp2 where tmp2.numb < 4;
受访分析
统计每日热门的页面的topN统计每天的每个页面的访问数量
select tmp1.daystr,tmp1.request,tmp1.pv,row_number() over (partition tmp1.daystr order by tmp1.pv) as numb
from (select daystr,request,count(*) as pvfrom weblog_detail group by daystr ,request)
tmp1;
访客分析
每个访客每小时的访问数
本题中的ip应该替换为用户id字段select ip,hour,count(request) as pv from weblog_detail group by ip,hour;
每个小时的ip访问数select ip,daystr,hour,count(request) as pvfrom weblog_detailgroup by ip,daystr,hour;
每天的/每月的ip访问数select ip,daystr,count(request) as pv from weblog_detail group by ip,daystr;select ip,month,count(request) as pv from weblog_detail group by ip,month;
统计新增访客
如何区分一个用户时老用户还是新增用户?新增用户:从来没有访问过,第一次访问的用户与老用户的区别:有没有客户idguid:访客id在程序中通过读取cookie,判断当前访问是否存在guid如果不存在,表示是一个新用户缺点:清除cookie导致guid丢失,下一次又是新用户第一种方式:监听所有请求,如果用户提交访问,那么我们读取cookie,如果没有guid,该请求标记为特殊的请求事件,打标签,该请求没有guid,isNew=false处理日志时判断isNew字段第二种方式:判断该用户的id是否出现过创建一张表:history_user用于记录所有访问过的用户id让今天所有的访问的用户id与历史表中的id进行join今天:user1 user2 user3 user4history_user:user1 user4select a.id as newId from tody_log a left join history_user b on a.id=b.id where b.id is null;newId oldIduser1 user1user2 nulluser3 nulluser4 user4注意:第二种方式效率低(两种表的数据比较大,join会很消耗资源),第一种方式是公司工作常用的方法。 将新的id最后再插入history_user新增会员:第一次注册url:用户访问的所有url中包含注册成功的页面
visit模型分析
单次访客统计
只访问了一次的访客
select ip ,count(distinct session) as times
from click_visit
group by ip
having count(distinct session) = 1;
回头访客个数
访问了不止一次的访客
select ip ,count(distinct session) as times
from click_visit
group by ip
having count(distinct session) > 1;
人均访问频率
select avg(tmp.times) as avg_time from (
select ip ,count(distinct session) as times
from click_visit
group by ip
) as tmp ;
用户平均访问页数select avg(tmp.pvs) as avg_pv from (
select ip ,count(request) as pvs
from weblog_detail
group by ip
) as tmp ; select sum(pageNum) /count(distinct ip) as avg_ip from click_visit;
pageview模型分析
每个用户的访问时长将每个用户访问的所有页面的停留时长进行统计select ip,sum(staylong) as length from click_pageviews group by ip;用户的平均访问时长select sum(staylong) /count(distinct ip) as avg_length from click_pageviews;
访问页面的漏斗
页面转化 分析step1:https://www.baidu.com/ 1000step2:http://news.baidu.com/ 800step3:http://news.baidu.com/guonei 300step4:http://www.jiemian.com/article/2194607.html 20
统计:每一步的转化及流失
Step1、 /hadoop-mahout
Step2、 /hadoop-hive
Step3、 /hadoop-zookeeper
Step4、 /black-ip-list结果: rate retainedstep1 1000 100% nullstep2 800 80% 80%step3 500 50% 62.5%step4 200 20% 40%
先求出每一步用户的个数create table rs_tmp1 (
step string,
numb int
) row format delimited fields terminated by '\t';insert overwrite table rs_tmp1
select 'step1',count(*) as numb from weblog_detail where request like '/hadoop-hive%'
union all
select 'step2',count(*) as numb from weblog_detail where request like '/hadoop-mahout%'
union all
select 'step3',count(*) as numb from weblog_detail where request like '/hadoop-zookeeper%'
union all
select 'step4',count(*) as numb from weblog_detail where request like '/black-ip-list%';
笛卡尔积abc123a 1b 1c 1a 2b 2
create table rs_tmp2 as
selecta.step as r1step,a.numb as numb1,b.step as r2step,b.numb as numb2
from rs_tmp1 a
joinrs_tmp1 b;create table rs_tmp3 as
select r1step,numb1/numb2 as rate
from rs_tmp2
wherer2step = 'step1';create table rs_tmp4 as
select r1step,numb1/numb2 as retained
from rs_tmp2
wherecast(substr(r1step,5,1) as int) - 1 = cast(substr(r2step,5,1) as int);
SELECTa.step,a.numb,b.rate,c.retained
FROMrs_tmp1 a
JOIN rs_tmp3 b ON a.step = b.r1step
LEFT JOIN rs_tmp4 c ON b.r1step = c.r1step;
访客流失:上一个时间维度访问了,当前时间维度没有访问回流:上一个时间维度没有访问,当前时间维度访问了会员会话订单来源
Day25_20180602_网站日志流量分析项目06:数据分析的实现及任务调度框架相关推荐
- 大数据离线---网站日志流量分析系统(1)---简介及框架
本次介绍网站日志流量分析系统,首先是简介和架构.后面会对架构中需要的每个模块的进行逐个介绍.本篇主要分为两个部分 网站日志流量分析系统简介 整体技术流程和架构 1. 网站日志流量分析系统简介 1.1点 ...
- 网站日志流量分析系统之(日志收集)
一.概述 网站日志流量分析系统之(日志埋点)这里我们已经将相关数据通过ajax发送至日志服务器,这里我只用了一台日志服务器(本机Windows环境),日志收集主要分为以下几个步骤: ①日志服务器集结合 ...
- 大数据离线---网站日志流量分析系统---日志数据原始信息
这里式日志数据的原始信息 194.237.142.21 - - [18/Sep/2013:06:49:18 +0000] "GET /wp-content/uploads/2013/07/r ...
- 数据分析---网站日志流分析
文章目录 数据分析平台介绍 网站流量分析项目的一些问题 1.数据处理流程 1.数据采集 2.数据预处理 3.数据入库 4.数据分析(ETL) 5.数据展现 2.mr程序进行数据预处理理论方面 3.流量 ...
- 网站用户行为分析项目之会话切割(一)
文章目录 0x00 教程内容 0x01 项目分析 1. 项目背景 2. 学习收获 3. 数据源介绍 4. 项目总体流程 5. 最终数据结构 0x02 编程实现 1. 构建Maven项目 2. 编码前准 ...
- 宝塔面板下载网站日志,分析百度蜘蛛和谷歌蜘蛛的爬取记录
准备工作:安装好宝塔面板.一个能正常访问的网站.一个在线网站分析工具 1.打开宝塔面板--文件--根目录--www--wwwlogs--域名.log(这个就是网站的日志文件)--选中需要下载的网站日志 ...
- 日志流量分析之ftp传输过程分析
文章目录 思路总结 日志文件分析 第一步 获取数据包,并使用wirshark打开 第二步 分析告警日志信息,确实是通过ftp传输进入 第三步 通过过来ftp的协议,查看数据包 第四步 通过过来规则,进 ...
- Java实现网站请求流量分析统计
如上图所描绘的,在不断刷新test.html请求页面时,上图total.html页面会实时的更新(1秒响应更新一次),折线图会实时进行上下变动.其中需要导入echarts.min.js和jquery- ...
- Cloudera Hadoop 4 实战课程(Hadoop 2.0、集群界面化管理、电商在线查询+日志离线分析)...
课程大纲及内容简介: 每节课约35分钟,共不下40讲 第一章(11讲) ·分布式和传统单机模式 ·Hadoop背景和工作原理 ·Mapreduce工作原理剖析 ·第二代MR--YARN原理剖析 ·Cl ...
最新文章
- urlrewrite使用小结
- R语言distVincentySphere函数计算大圆距离实战(Great Circle Distance)
- Dynamics 365新功能:可编辑的网格(行内编辑)
- 【PAT乙级】1024 科学计数法 (20 分)
- 论文小综 | Neuro-Symbolic Reasoning in NLP
- Java Hashtable equals()方法与示例
- 修复Oracle9i中DBA的密码
- Springboot,log文件配置时,logging.file.name与logging.file
- mysql enclosed by_MySQL导入格式化数据
- python 调用父类方法, 重写父类构造方法, 不显式调用,会报错
- linux shell中$0,$?,$!等的特殊用法
- 浏览器静态资源的缓存机制(http强缓存 协商缓存)
- 编译NVIDIA之Video_Codec_SDK_9.1.23之Sample
- AndroidStudio配置NDK
- 11G新特性 -- Expression Statistics
- 读文件fread函数的用法
- iptables 详解
- HTG评论Kobo Aura HD:不是Kindle,那还行
- 程序员如何写项目经历
- php中exec的用法,php exec用法详解
热门文章
- Java、JSP足球俱乐部管理系统
- FoneLab Mac Data Retriever for Mac v1.2.28 – 优秀的数据恢复工具
- Categorial Depth Distribution Network for Monocular 3D Object Detection翻译
- java的jframe隐藏窗口_JFrame Frame 窗口关闭
- centos6.4下tuxedo11gR1安装及jolt连接测试
- DELPHI 打印预览功能
- 我希望女孩子不要点进来
- 四句话解决const赋值问题
- Queue常用类解析之BlockingQueue(二):ArrayBlockingQueue
- perceptivepixel PPI 55触摸屏初步测试结果