1. 程式人生 > >自學大資料:Hive基於搜狗搜尋的使用者日誌行為分析

自學大資料: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        可以得到以下結果        發現使用者通過搜狗搜尋獲取百度的地址的數量比較多,其次是遊戲類,視訊。可以發現有很高的比例的人,其實不是真正的使用搜狗搜尋直接搜尋資料,而是通過搜狗獲得百度搜索,搜尋資料。        思考擴充套件:可以通過對每個網站的分類,比如可以劃為視訊、搜尋、導航、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
          分析:           用一年的平均值給出的結論可以看出,使用者在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與歷史網頁