對QQ空間數據進行分析

對QQ空間數據進行分析

來自專欄踩坑晉陞之路

文章首發公眾號: 一個簡單程序猿

關注公眾號獲取更多乾貨。

繼前面《爬取QQ空間》的文章之後,寫一篇對數據簡單分析的文章。

分析了232個好友全部的49045條說說,89309條留言以及27500條好友關係網。根據爬取到的數據,做了如下分析:

  • 好友發說說月份統計
  • 好友所屬星座統計
  • 好友手機設備統計
  • 好友發說說小時統計
  • 對好友的好友進行統計

其中對好友所屬星座的統計可能不夠準確,因為這個是通過好友自己填寫的數據進行分析的。

下面我們就開始分析

首先我們先來分析一下好友發說說的月份:

先上分析的結果:

從圖中可以看到大家在每個月份發表說說的頻次大致差不了多少。而六七八三個月發表的稍微多一點。

上面的圖通過代碼實現,主要用到的模塊有:pymongo、matplotlib。

因為數據是存儲在mongodb的,所以通過pymongo進行操作,matplotlib是一個畫圖的模塊。

代碼很簡單,大致思路就是從資料庫中讀取說說創建的時間,通過切片提取月份,分別與months列表進行對比,如果匹配上了對應的data位置就加一,這樣就可以統計我們的好友發說說的月份在哪了。

代碼如下:

畫的是餅圖,關於餅圖的畫法,我希望對數據分析感興趣的朋友可以自己去查一下,我不希望我的文章向教程一樣,我說是什麼樣的,

你就認為是什麼樣子的,我希望你看過我寫的文章能夠給你帶來收穫和啟發,而不是讓大家按照代碼運行一遍。

好友所屬星座統計

先上圖:

代碼如下:

這裡的統計和上面月份的統計大同小異,這裡對數據進行了簡單的篩選,通過年齡進行篩選,大家知道有部分人不喜歡在空間填寫自己的個人檔信息,但是不寫的話,騰訊就默認給一個值,默認是1990-0-0,所以我們可以通過年齡來篩選掉這部分人,如果不篩選掉這樣就會造成數據的結果與真實結果偏移比較大。

這裡提一下,explode參數可以保證畫出來的結果是一個圓形,如果你想重點突出某一塊數據,你可以把某一塊數據在explode對應的位置

的0改為1即可。

好友手機設備統計

這裡對於好友手機中的大部分機型進行了統計,當然同一款手機可能有不同系列的,這裡我們統歸於一類產品,比如iPhone系列,小米系列等,我們使用了正則表達式,

原因是因為空間裡面為黃鑽用戶提供了個性化小尾巴的功能,也就是說他們的手機設備可以隨意添加內容,大家看一下就知道了:

雖然他們可以很個性,但是他們再個性也沒辦法把他們的手機型號給抹掉,只能添加一些描述性的文字,這樣我們就可以使用正則表達式去匹配他們的設備,如果他們包含我們統計的關鍵字,那麼就計數。這裡只統計了幾個主流的手機設備,代碼如下:

效果圖如下:

看來我好友中的土豪還是比較多的。

好友發說說小時統計

統計圖如下:

從圖中可以看出,大家都喜歡在哪個時間段發表說說,兩個比較突出的點是中午十二點和晚上十點,看來大家吃過飯和睡覺前比較喜歡發個說說。

代碼如下:

這裡我們引入了新的庫 numpy,一個強大的科學計算的庫,這裡我們畫的是柱狀圖,所以包含x軸和y軸,設置x軸的範圍是24,y軸是我們統計的各小時發的說說數據

關於柱狀圖bar的參數詳情這裡也不做介紹。

當然如果你感覺柱狀圖不能夠滿足你,沒關係我們看看折線圖:

折線圖可以更清晰的看出整體的走向和趨勢,可以清楚的看到兩個波峰,分別是十二點和二十二點。

對好友的好友進行統計

下面才是有意思的地方,我們可以對好友的好友進行統計,這也是我爬取點贊的人的原因,一般從你每條說說的點贊的信息來看,就可以分析出你的好友圈,如果你所有的說說,你的好友都沒給你點過贊,那你們關係也不是很親密。

這裡我們對好友的QQ關係進行簡單的整理,我們可以從他們的留言和點贊的人中提取它們的好友關係,代碼如下:

存儲到資料庫如下:

  • owner 自己的好友
  • name 好友的好友
  • QQ 好友的好友的QQ

提取到這些之後,我們的代碼就可以進行擴展了,可以在此基礎上再進一步去爬取, 前提是好友的好友沒有設置訪問許可權。

我實際測試了一下,發現24000個好友的好友,只有6700個是空間沒有設置許可權的,到目前為止爬了200萬的留言,153萬條說說。爬蟲是放在伺服器上24小時不停的爬取的, 期間QQ被封了一次(30分鐘)。

其他玩法

當然數據的玩法有很多,就看你選擇怎麼玩,比如像這樣:

import pymongoclient = pymongo.MongoClient(host=localhost, port=27017)db = client[QQ]table = db[board]def get_info(): for ii in table.find(): if 我愛你 in ii[content]: print(留言板的主人:, ii[owner], 留言者:, ii[name], 留言時間:, ii[time], 留言內容:, ii[content])if __name__ == __main__: get_info()

如果我把這些都發到空間裡面,估計好友都會把我拉黑了吧。。。

當然還有很多有趣的玩法,剩下的留給大家自己去探索吧, 文章就寫到這裡。

文章首發我的公眾號: 一個簡單程序猿

歡迎你的交流。


推薦閱讀:

TAG:爬蟲計算機網路 | 互聯網數據分析 | 數據分析 |