自學大資料: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搜尋訪問排行榜 > 1001 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與歷史網頁