用數據找知己:驀然回首 那人卻在三十五萬用戶中
前言
我在2010年加入豆瓣,已經標記了586部看過的電影,雖然和資深用戶比起來還差很多,但自己認為還算是一個合格的電影業餘愛好者。
在豆瓣逛久了,我們自然想找一些志同道合的朋友,比如喜歡同一種類型電影的朋友,喜歡同一個作者作品的朋友。當然啦,豆瓣也通過各種各樣的形式,來幫助我們找到這種朋友,比如豆瓣小組,電影討論區,找同好功能,APP里的用戶推薦啦,各種各樣的功能總能幫助你找到一兩個人能聊得來的朋友。但是呢,作為一個有更高追求的人,我總覺得冥冥之中,幾千萬用戶,一定有個人和我看的電影高度相似,也許重合度可以達到99.9999999999%。於是我在三年前的知乎上提了這麼個問題:如何在網站上找到與自己看過的電影或者書籍重合度很高的的人?結果只有兩位哥們回答了我的問題。
很顯然,從我寫下那個問題開始,到目前為止好像還是沒有這種功能(也許只是我不知道)。不過呢,自從入了數據分析的坑之後,我突然發現我可以自己動手來找到全豆瓣和我看電影喜好最相近的人!
目標
我們這次的目標是在豆瓣上找到和我看電影喜好最相似的人,那麼首要要對最相似的做一個定義。
當我們登陸自己的豆瓣主頁後,我們再打開別人的豆瓣主頁,我們可以看到頂部會有一個「共同喜好」,這些的喜好包括了書影音的合集。為了統計方便,在這次尋找知己的過程中,就認為共同喜好就是共同看過的電影。比如下面隨便點開一個用戶,我們有23部電影的重合。這個參考指標簡單粗暴非常好使(當然我們可以抓取每個用戶看過的電影名字,和自己的看過的做匹配,但是這個耗時會更長)。
但是,這裡就有個新問題,比如對方是個電影大咖,看了2000部電影,其中我看的586部電影TA都看了,那我們的重合度就是586部!顯然重合度已經到達了MAX。但是這時候又有個用戶,TA看了600部電影,我們共同喜好雖然只有400部,但後者顯然比前面那個大咖更加符合「我的知己」,因為重合度佔了TA看過電影的比重更高。
如果利用共同喜好度佔TA看過電影的比重來衡量的話,還是會出現個問題。比如一個用戶只看了20部電影,但是這20部電影我也恰好看了,這樣我們的重合率就是100%,顯然TA不能算一個合格的知己。
因此,我最後決定按照共同喜好度佔TA看過電影的比重作為衡量標準,並且用TA看過電影的數量進行篩選,初步定在看過300部以上的用戶才考慮共同喜好占的比重。
數據抓取
此次數據抓取和以往不同,這次抓取必須要保持我自己的豆瓣登錄狀態,才能顯示共同喜好。所以花了一點時間,拋棄了以前一直在用的cookies+requests辦法,應用了selenium模擬豆瓣自動登陸抓取。
不過我發現這個辦法抓起來有點慢(暫時也還沒點亮分散式爬蟲的技能樹),我不可能無休止的一直爬下去,於是我決定縮小範圍。在所有我看過的電影里,我選定了《環太平洋》這部電影作為我抓取的用戶來源(也就是說沒看過環太平洋的不能和我做知己了=。=)。最後,一共在短評區提取了353942個用戶的主頁地址。我將遍歷他們的主頁,提取兩個關鍵信息:和我的共同喜好和看過的電影數量。
寫完代碼後我把它扔在了雲上跑了幾天,速度還是不快。最後由於時間關係(趕著七夕節發文呢!),寫這篇文章的時候只爬完了18萬用戶的信息。不過18萬人也足夠了,如果和我有緣肯定就在這裡了!
數據篩選和整理
我把所有的數據合併(因為爬蟲中斷過),除去無效數據,去重,根據看過的電影平均數(422部)作為篩選門檻,最後按照共同喜好度佔TA看過電影的比重倒序排列,終於找到了這群人中我的「最知己」!
令人失望的是同喜好度佔TA看過電影的比重並沒有達到99.99999999999%,只有36.19%。
TA看了431部電影,其中有156部電影和我相同,18萬人裡面和我的重合度最高。我還注意到TA也是和我一樣2010年加入的豆瓣,而且是切爾西球迷?!(雖然我是曼聯球迷),這還是很有意思的。
結果
當然了!必須給TA發一份豆油,至於會不會理我,那就是另外一回事啦!
最後,祝天下有情人都是失散多年的姐妹!
推薦閱讀:
※從Excel到簡道雲,跳出傳統數據管理思維
※世界頂尖數據科學家忠告:別再被虛榮指標欺騙了!
※「銀聯消費數據」可以從哪裡獲取?
※亞馬遜美站 hot new releases 榜單分析
※iPhone 步行數據分析