基于Python的搜索引擎檢索日志數據分析
網絡數據是沙地,數據分析的作用就是在一堆冗雜無序的沙地中找出產品有用的“金子”。
01 前言
數據——可以簡單理解為人們動作行為的符號表示。信息技術的發展,使得計算機每時每刻記錄著人們的數據,人們在計算機面前,早已經是“透明人”。
萬物皆在運動,對于數據來說,也是一直在變化的。我們對數據進行分析,就是希望可以從不斷變化的數據中發現規律、發現趨勢,提煉有價值的內容。
好的數據是一座未被發掘的金礦,而好的數據分析報告,可以幫助經營管理者明確戰略,不斷優化和調整策略,也可以幫助產品經理更好地掌握產品運行情況,不斷有針對性的升級優化產品,提升客戶體驗,增強用戶粘性,確保產品用戶和效益持續增長。
02 分析目的
不同領域有不同領域的分析目的。例如基金公司的數據分析,更多的是來對所投資股票的價值分析。電商公司的數據分析,會很關注漏斗的轉化率。結合本文的實際案例分析,我們數據分析的目的,主要有以下幾點:
- 驗證我們的判斷。例如:我們根據經驗,判斷一般晚上探索某個領域的知識會比較多,我們來驗證自己的判斷是否正確。
- 用戶興趣發現以及商機發現。例如:某個關鍵詞檢索很頻繁,說明極有可能成為熱點,提早進行針對于熱點的準備,從而獲得流量優勢。
- 防范風險。例如:某個關鍵詞在某個地區短時間內頻率很高,那極有可能會存在區域風險。相關部門或企業,提早進行介入處置,化解風險,從而盡可能減少損失。
03 數據準備
既然是實踐,就需要對真實的數據進行分析。
本文數據來自于搜狗實驗室《搜索引擎用戶查詢日志(SogouQ)》(數據地址:http://www.sogou.com/labs/resource/q.php)。使用的搜狗實驗室所提供的精簡版數據,此數據包包含一天的檢索數據,數據壓縮包小為63MB,解壓后數據包大小為144MB。
數據格式為:訪問時間\t用戶ID\t[查詢詞]\t該URL在返回結果中的排名\t用戶點擊的順序號\t用戶點擊的URL。
其中,用戶ID是根據用戶使用瀏覽器訪問搜索引擎時的Cookie信息自動賦值,即同一次使用瀏覽器輸入的不同查詢對應同一個用戶ID。
數據樣例如下:
00:00:00 2982199073774412 [360安全衛士] 8 3 download.it.com.cn/softweb/software/firewall/antivirus/20067/17938.html
在此主要是給大家形象地展示一下數據格式,更為詳細的數據大家可以去搜狗實驗室官網獲得。
04 分析過程
1. 不同時段的檢索情況
我們以小時為單位,共分24小時,來查看全天時段的用戶檢索情況。首先在Python程序中導入CSV文件,這個太基礎了,就不在此多講了。
由于源數據時間格式是“時:分:秒”格式,而我們是準備以每一小時為時段進行分析。為了便于操作,我們將源數據“時:分:秒”處理為僅保留小時。之后我們將數據格式化成DataFrame數據格式。使用groupby函數,對時間進行操作。使用size()對分組數據進行歸集顯示。
由于本文主要講解思路,在此僅展示部分源代碼。如果需要操作指點,可以關注我的微信公眾號:佳佳原創。在公眾號中留言,我看到后,第一時間會回復大家。部分源代碼如下:
上圖中的print( )函數主要用來看生成的數據。注釋掉也可以。根據操作,生成相應數據,并根據數據生成分析折線圖如下圖所示:
如果對于生成折線圖有時需要不斷微調,而每次生成數據運算時間較長,其實可以將生成的數據先保存起來,之后調整折線圖元素的時候,直接使用結果數據就可以,不需要再重新計算數據,這樣可以節約很多時間。
經過我們將數據圖示化后,原本密密麻麻的數據顯得更為清晰,我們可以方便直觀地看出,用戶在凌晨4點左右檢索頻次是最少的,而在下午16點左右檢索頻次最多,也側面反應出了網民的上網習慣。
如果我們是廣告商家,我們可以針對這種情況,對不同時段的廣告進行有針對性的定價。而我們如果是需要進行廣告投放,也知道哪個時段投放,廣告的曝光率相對最高。
2. 不同用戶的檢索情況
接下來,我們再分析一下不同用戶的檢索情況,看一看哪些用戶檢索量比較大。
這個分析需要用到Python DataFrame中的count()操作,即:groupby(用戶ID).count()。之后我們將新生成的數據再構建一個DataFrame,取排名前50的用戶數據,做降序操作。部分源代碼如下圖所示:
上圖中Console中顯示的數據就是當天檢索量排名前50的用戶。有興趣的同學,可以到搜狗實驗室官網上下載一下這個數據,查看一下檢索量431的那位客戶當天究竟檢索了什么內容。一定是一位重度依賴網絡的朋友。
具體訪問了什么,我們稍后再看。經過數據分析,我們決定取排名前20的用戶,用柱狀圖顯示出他們的檢索情況。選取20名用戶主要原因是,一是為了圖示美觀,另一個是為了縮小數據范圍,集中于幾個用戶進行分析,節約分析成本。排名前20的用戶檢索情況如下圖所示:
由于數據比較多,時間關系,我們接下來選取其中一個用戶分析一下其檢索數據。接下來進入下一環節。
3. 用戶檢索數據析
我們選取檢索量最大的一個用戶“11579135515147154”,分析一下他一天的檢索情況。我們先看一下這個用戶不同時段的檢索量。
08 2
09 64
20 57
21 218
22 90
左側是時間數據,右側是檢索量。
看來這個用戶晚上21點的時候,檢索的比較頻繁。
我們再分析一下這個用戶都檢索了哪些內容。同時將此用戶的檢索詞的檢索量進行了倒序排列。如下所示:
由于數據據有限,我們也不知道這個用戶的年齡、職業、性別。但感覺檢索的內容倒是挺令人驚訝的。也客觀的說明,每一個看似正常的人,都有不為人知的一面。
大家如果想深入分析,可以在搜狗實驗室下載這個數據,結合本文提供的分析量排名前20的用戶ID,直接在數據中檢索一下這20名用戶的搜索情況。
4. 不同關鍵詞的檢索情況
接下來我們以全天的視角,分析一下當天不同關鍵詞的檢索情況。基本分析思路是提取出當天所有關鍵詞的數量,然后通過詞頻云圖進行直觀展示。
根據數據,我們生成詞頻信息,同樣,為了便于觀測,我們按詞頻數進行倒序排列。由于數據比較多,我們僅作部分展示。如下圖所示:
為了詞頻云圖的展示,我們需要引入“import collections”和“import wordcloud”這兩個庫。具體用法可以查閱相關資料,就不在此過多講述了。
如果大家在使用過程中,有任何疑問,也可以隨時咨詢我。我看到了,會第一時間回復大家。由于大部分檢索詞還是挺“奇怪”的,所以就大家不要看的那么清晰了,知道大體分析思路就可以。根據詞頻,生成詞頻云圖,如下圖所示:
05 分析總結
有時候對方提供的數據或多或少導入的時候,會有一些問題,例如:和我們的處理格式有些差異,編碼問題。這就需要我們在數據分析前,先要整理數據,把數據導入時的異常處理掉,同時把可能存在的一些影響分析的垃圾數據解決掉。
俗話說”Rubbish in, rubbish out”。所以在數據分析前,確保數據的真實、可靠、有效,是非常有必要而且非常重要的一個步驟。
對于數據分析而言,不同領域、不同場景、不同目標,數據分析的方式方法有所不同,這就需要我們對癥下藥。互聯網企業、電商網站,更多的是分析用戶留存,轉化率,訪問軌跡。而金融行業的企業,像基金公司,更多的是做時序分析,趨勢分析。本文的分析,更多的是通過數據提取,可視化,發現一些潛在的情況。
而通過我們本次對用戶檢索數據的分析,給人最直觀的一種感覺就是網絡平臺就像是一個濃縮的社會,雖然大家在網上檢索,誰也不認識誰,但在某種程度上卻有一些聯系。而在這個平臺上,有好人,也有壞人,側面也在反應的人們在日常生活中的千姿百態。也正是因為網絡檢索的匿名性,反而個人行為沒有偽裝,也體現了更為真實的個人。從這個角度上講,網絡數據分析結果的效果,往往比線下數據分析要好。
雖然現在注重隱私保護,但如果出于公共安全的目的,其實可以進行相關數據的分析與預警,提早發現可能發生的違法犯罪情況。例如:如果一個人頻繁的檢索如何綁架等惡性詞匯,從一定程度上也客觀反應了其心理狀態,再結合其行動軌跡、購物記錄,結合評分卡,綜合判斷此人發生違法犯罪的概率,提早進行預防,減少對公共安全損害的發生風險。
科技是一把雙刃劍,要想真正發揮科技的價值,需要我們更為合理科學的掌握和使用科技,從而使科技真正為人們服務。企業或是個人價值觀的好與壞,也就決定了對數據分析結果價值的好與壞。不論怎樣,如果每個企業、每個人都能將“不作惡”作為其行為準則的底線,這個世界便會美好許多。
原創不易,如果大家覺得本文對您有幫助,請多多轉發,或者點擊作者進行打賞。感謝大家閱讀~
作者:王佳亮,中國計算機學會(CCF)會員。微信公眾號:佳佳原創
本文由 @佳佳原創 原創發布于人人都是產品經理,未經許可,禁止轉載
題圖來自Unspalsh, 基于CC0協議
你做的是什么類型的PM呢,數據PM嗎?我想問下,數據PM日常工作要打代碼嗎?我一個非程序員經驗,想通過自學python轉數據pm的非計算機專業的理科生,這種路徑可行嗎~
路徑可行~學些代碼會強化邏輯思維,可以為你的工作錦上添花~
我的評論沒展示出來嗎~