Hive基于搜索的用户日志行为分析
Posted 大数据技术官
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive基于搜索的用户日志行为分析相关的知识,希望对你有一定的参考价值。
来源:about云
前言
”大数据时代“,“大数据/云计算”,“大数据平台”,每天听到太多的大数据相关的词语,好像现在说一句话不跟大数据沾边都不好意思说自己是做IT的。可能这与整个IT圈子的炒作也有关联,某一个方面来看其实就是一营销术语。很多朋友就想问,我想做大数据,但是没有这个条件,没有这个数据量,没有那么多业务场景,没有那多集群可以吗?其实,我觉得是可以的,大数据只是一个华丽的词语,实际的背后也是一些开源框架的支撑,也是通过技术来实现的,所以只要掌握这一套理论体系,开源框架,技术手段,底层实现,就ok。
所以我想写一系列的博客,来让这个看起揭开这个高大上技术的面纱,展露它的本质,让更多的人领略大数据的魅力。
至于怎么搭建hadoop集群,安装生态圈中的hbase、hive、pig、mahout、spark、flume等等,就不在我想讨论的范围内,有太多的的文章、博客都详实的记录了。
这篇我主要想分享,基于搜索引擎的用户日志行为的一些分析,时间比较仓促,如有遗漏或错误欢迎留言,互动,大家进步。
理论知识
做技术分析之前必须需要相关的理论知识作为研究支撑,所以建议先掌握相应的理论知识。主要分两部分,一个是统计分析相关的,一些关于得出数据总量分量的关系,百分比,进而绘制出趋势走向,历史图标,各种报表等,提供BI的功能。另外一部分是数据挖掘/文本挖掘,挖掘用户查询词的语义,查到相邻词语,进而进行相关搜索推荐等,挖掘出用户兴趣,人群画像等。
统计分析相关
搜索引擎用户行为分析
中文搜索引擎用户日志分析
数据挖掘/文本挖掘相关
大规模中文搜索引擎的用户日志分析
基于用户日志的查询推荐系统
准备工作
1、下载用户日志 ,有完整版(2GB)和迷你版(87KB),可以先下载迷你版查看数据格式,最终使用完整版做数据分析
2、建hive表: create table querylog (time string,userid string,keyword string,pagerank int,clickorder int,url string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
分析过程
1、用户搜索排行榜 >100 select * from ( select userid,count(*) as c from querylog group by userid having c>1 ) a order by c desc limit 100 ;
2、url搜索访问排行榜 > 100
select * from ( select url,count(*) as c from querylog group by url having c>1 ) a order by c desc limit 100 ;
总共的url的访问次数是 43545444
可以得到以下结果
http://www.baidu.com/ 660791 搜索引擎 1.517%
http://www.4399.com/ 231722 小游戏网站 0.532%
http://www.youku.com/ 133650 视频网站 0.306%
http://www.hao123.com/ 129220 导航网站
http://qzone.qq.com/ 114878 qq空间 sns网站
http://www.7k7k.com/ 98103 小游戏网站
http://cf.qq.com/ 85555 穿越火线网站
2 7926133 18.201%
3 4798577 11.019%
43250306 7.464%
52439101
61860029
71530145
81285208
91082268
101097680 2.520%
11231
12205
13193
可以看出来,以每页10条数据的显示,用户通常情况下只查看第一页的数据,占到了绝大多数,最后很少一部分会查看第二页的数据。
查询之后返回结果的第一页的点击率是41.966%,接近一半,说明用户会得到想要的查询的结果,或者更改查询语句
4、用户访问应用的时间特点
算出一年时间中,某一个时间段内的 搜索 数量
比如,查询一年中,所有23点搜索的数量:
hive -e "INSERT OVERWRITE LOCAL DIRECTORY './time/23' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select count(*) from querylog where time like '________23%';"
00点 817218 01点 543054 02点 375981 03点 283579 04点 235414 05点 221724 06点 256387 07点 405673 08点 1208389 09点 2032463 10点 2435041 11点 2408354 12点 2405614 13点 2612695 14点 2769876 15点 2870105 16点 2847254 17点 2609760 18点 2614522 19点 3050032 7.004% 20点 3167798 7.274% 21点 2995447 22点 2517636 23点 1861428
分析:
用一年的平均值给出的结论可以看出,用户在10点-17点为使用高峰期,应该可以看出来是上班时间使用较多。17点到18点为低峰期,可能是用户下班在回家的路上。
18点到22点为高峰期,特别是20点,达到一天使用的最高峰,应该是用户在家里使用。
用户基本以上班族为主。
思考扩展:
可以考虑出用户的使用习惯是在回家的时候达到最高峰,用户达到最活跃,凌晨时间段用户最少,可以从运营的角度考虑服务器的一些升级部署可以安排到凌晨时段,高峰期在晚上应该可以提高访问速度等。
继续搜索以周、月、季度为单位,搜索活跃度同比、环比排行榜
5、用户查询中包含的中文、英文字数的平均个数
思路1:userid和keyword作为唯一搜索条件。这样有遗漏,因为有的人隔一段时间可能会搜索同一个语句。
select count(distinct(keyword)) from querylog ;
没有重复的查询次数共有 : 25531020
select sum(length(keyword)) from ( select keyword from querylog group by userid,keyword ) a ;
用户搜索出来的查询词总共长度是 :189521004
用户查询语句中包含的中文、英文的平均个数是: 189521004/25531020=7.423个中文、英文或数字
思路2:根据点击顺序为1来判断,说明他第一次点击。如果点击顺序 > 1 说明用户是第二次以上点击了,keyword不是第一次输入。这样也有遗漏,有可能用户只输入了查询词,没有点击网页。
select count(keyword) from querylog where clickorder=1;
第一次点击的查询次数共有:30366974
用户搜索出来的查询词总共长度是: 221004260
用户查询语句中包含的中文、英文的平均个数是: 221004260/30366974=7.277个中文、英文或数字
6、用户查看结果页面停留的时间有多长
select * from querylog where unix_timestamp(time,"yyyyMMddhhMMss") < unix_timestamp("20111230003415","yyyyMMddhhMMss") limit 100;
扩展
还可以做更多的数据分析,在此就自己去思考,我点一下思路,比如:
用户的查询类型与数量
查询串中包含的字符类型
查询串中包含的词项个数
结果页面的查询与时间间隔
用户点击url与历史网页
以上是关于Hive基于搜索的用户日志行为分析的主要内容,如果未能解决你的问题,请参考以下文章