分享

Hive基于搜狗搜索的用户日志行为分析

本帖最后由 howtodown 于 2015-4-13 00:19 编辑
问题导读
1.本文是如何学习大数据的?
2.用户查询中包含的中文、英文字数的平均个数,本文提出哪两个思路?
3.用户访问应用的时间特点如何使用hive实现统计的?





前言
”大数据时代“,“大数据/云计算”,“大数据平台”,每天听到太多的大数据相关的词语,好像现在说一句话不跟大数据沾边都不好意思说自己是做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    穿越火线网站

       发现用户通过搜狗搜索获取百度的地址的数量比较多,其次是游戏类,视频。可以发现有很高的比例的人,其实不是真正的使用搜狗搜索直接搜索数据,而是通过搜狗获得百度搜索,搜索数据。

       思考扩展:可以通过对每个网站的分类,比如可以划为视频、搜索、导航、SNS、游戏等网站类型,获得用户最关心的网站类型,什么类型网站最热门,在同一类型网站中热度排行榜,哪个网站最热门,排行榜是怎样的。

       3、用户搜索时,点击url在页面排行pagerank的统计
       select pagerank,count(pagerank) as c from querylog group by pagerank order by pagerank asc;     
      获得用户初次搜索的准确率,比如pagerank比较靠前,说明用户的搜索习惯比较好,或者搜索引擎   的查询命中率较高。
      
          1 18274343  41.966%    第一次搜索的命中率比较高  18274343 / 43545444
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

     
1.png



          分析:
          用一年的平均值给出的结论可以看出,用户在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与历史网页





已有(20)人评论

跳转到指定楼层
大数据爱我 发表于 2015-1-6 20:33:47
回复

使用道具 举报

落魂草 发表于 2015-1-6 23:18:38
回复

使用道具 举报

pengsuyun 发表于 2015-1-7 08:19:01
回复

使用道具 举报

arBen 发表于 2015-1-7 09:07:14
额…………。那个日志 我下载不了。给我的ftp地址连接不上。
回复

使用道具 举报

韩克拉玛寒 发表于 2015-1-7 09:12:17
回复

使用道具 举报

NIITYZU 发表于 2015-1-7 10:37:36
请问能提供完整版数据集网盘下载链接吗?,官网的好像不好下载了,谢谢
回复

使用道具 举报

hb1984 发表于 2015-1-7 13:50:25
谢谢楼主分享。        
回复

使用道具 举报

Tiny 发表于 2015-1-12 10:12:35
学习了,实例
回复

使用道具 举报

Riordon 发表于 2015-4-24 09:58:31
每个页面的访问的时长怎么统计呢?
回复

使用道具 举报

123下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条