對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()
如果我把這些都發到空間裡面,估計好友都會把我拉黑了吧。。。
當然還有很多有趣的玩法,剩下的留給大家自己去探索吧, 文章就寫到這裡。
文章首發我的公眾號: 一個簡單程序猿
歡迎你的交流。
推薦閱讀: