如何分析找出知乎的潛在的熱門問題?
我記得有位知友做過類似的正則分析,可惜鏈接找不到了。
手機上就寫個思路吧
爬蟲抓知乎,還有知乎日報
知乎日報用來做分類器的正類,然後再遠一些不熱門的主題做負類,然後剩下的作為未標記樣本,做半監督分類,用訓練好的分類器預測就好了謝邀,我好像有一點點資格回答這個問題,各位請看我的簽名。
之前學Python時寫了一個爬蟲,爬取知乎的問題數據,分析比較後選出500個最可能火的問題放在那個網站上。
其中的爬蟲已經開源了,傳送門:MorganZhang100/zhihu-spider · GitHub
各位用Github的親路過的時候請給點個Star或Fork,十分感謝!
以下是正文,想看一句話的結論直接翻最後:
分析會火的問題其實挺簡單(粗暴)的,基本上看一個問題的(單位時間內的)曝光量(或曝光量的增長率)即可。
所謂曝光量,指的就是這個問題出現在多少人的時間線上了。而出現在一個人的時間線上的原因無外乎:
1. 我關注的話題的熱門問題
2. 我關注的人關注了這個問題
3. 我關注的人回答了這個問題
4. 我關注的人給這個問題的答案點贊了
5. 其它(比如邀請某人回答該問題等)
前四點,也是最主流的四點,都可以通過知乎公開的信息計算出一個比較具體的數字。
舉例來說,我們計算一下「因為我關注的人關注了這個問題而出現在我的時間線上」的次數。
1. 我們點擊關注者名單,可以看到所有人 知乎 - 與世界分享你的知識、經驗和見解
2. 我們點擊進去某個人的名字,比如我,再點擊關注我的人的名單知乎 - 與世界分享你的知識、經驗和見解,就可以知道因為我關注/回答了這個問題,有多少人以及哪些人的時間線上會看到這個問題。
3. 重複步驟2直到我們獲取了所有關注這個問題的人的名單,去掉其中重複的名字,得到的人數就是「因為我關注的人關注了這個問題而出現在我的時間線上」的曝光量的上限。
為什麼是上限?因為我關注的人可能對這個問題做了多種操作,比如關注、回答、點贊等,這些會被知乎合併後出現在我的時間線上,而不是簡單的一次次的重複出現。
類似的我們還可以計算出其它幾種曝光量的次數。
我們除了可以計算出最後的曝光量之外,還可以通過回答者回答問題的時間(這個有公開數據),關注者關注問題的時間(這個沒有公開數據,不過可以通過定時抓取關注者列表來得到這個粗略的數據)來知道這些曝光量的增長曲線(曝光量/時間曲線)。
有了這些數據之後就簡單了:
只要這個問題的曝光量大,它就幾乎一定是火的。
只要這個問題的曝光量的增長速度大,它就幾乎一定是會變火的。
而經過我對知乎數據的抓取和分析,得到的一句話的結論是:
基本上曝光量跟問題關注者人數是正相關的。只要一個問題在短時間內關注者人數上升到一個坎,基本就可以認為這個問題很可能會火。當然,這種預測的准與不準是可以通過調整這個坎的參數來調整的。坎越嚴格這個預測就越准。就是這麼簡cu單bao。
以上均是一家之言,不一定對,歡迎討論。
以後有機會再把「如何分析找出給哪個問題寫答案會得票多」分享給大家。
#前言
#並不是自問自答。
#準備計算大V關注與問題是否為熱點的相關性。待更。
#預實驗腳本寫錯了…滾去修改。
#早上還好使晚上就405了。見鬼……
#對不起剛剛腦殘了,腳本還能用,不過我不打算把它貼出去了,太佔地方。想看的私信吧(其實是因為粗糙到拿不出手…)
#做完了
#開始做@肖智博所提出的方案。十二萬分感謝…(雖然我從沒寫過機器學習的代碼)
提點自己的猜想,期待討論。
1、如果你的伺服器夠強,應該可以掃描所有問題,監測每個問題的關注度。
你會發現關注度超過一個範圍之後,就可能會有一個暴漲的趨勢。它們就是潛在的熱點問題。這個我之前做過一點,不過因為設備不給力,掃描一次的時間太長,導致結果基本上沒什麼用(只用一個筆記本還想怎樣!)
私以為關注數破200就已經算是熱點了。如果有人寫出了能收到200贊的答案,那麼平均來看這個答案就會出現在幾千人的timeline上。更多的人看到,更多的人點贊,往複循環,然後大家就會覺得這真的是個熱門問題。
但是!!!我們沒有伺服器啊!!!
於是就有了2。
2、一般人應該是沒有1中的條件。不過如果你稍微分析一下熱點問題的關注列表,可能會有新的收穫。
根據我刷知乎的經驗,問題成為熱點之前,很可能發生過一件事:被大v關注或點贊。熱點問題在我的timeline里第一次和第二次出現的原因一般正是通過大v的活動,而且彼時這個問題常常看起來並不火爆。
關於這個猜想,我等會去寫個腳本統計一下好了——如果不睡回籠覺的話。
02/13/2015
======================================================
一、預實驗
腳本寫好了。我簡直太勤勞了…
我們先來小小地測試一下。
運行腳本,得到前200位關注者,查找其中的千粉用戶。
#排除了匿名用戶
#list中的順序不能代表關注順序,誤差在20位左右.
測試問題1:不能接受男朋友提出的婚前性行為,怎麼辦? - 戀愛
測試問題2:有哪些好的 LaTeX 編輯器? - 文本編輯器
前200位關注者中有4位千粉用戶。當然這個問題不算是很熱啦。
測試問題3:在北京,有哪些不是景點但值得一去的地方? - 時尚
還好還好…
測試問題4:Python 常用的標準庫以及第三方庫有哪些? - Python
嗯,這就叫程序員社區。
測試問題5:如何優化 Python 爬蟲的速度? - 爬蟲(計算機網路)
我都說了它是程序員社區吧…
測試問題6:有沒有什麼自然科學理論瞬間擊中你以至於改變了你的價值觀? - 自然科學
…這問題火了一點不奇怪。
測試問題7:如何看待蘇格蘭科學家成功降低光速? - 物理學
果然是因為三體嗎…
測試問題8:找個化學專業的男(女)朋友是一種怎樣的體驗? - 戀人相處
@dream journey
全是化學狗…
數據如上所示。有興趣的可以用我的代碼自己試一試。以上8個問題的前100位關注者中都有至少一位大V。我覺得這個結果部分地驗證了我的猜想。如果你能把社區里所有1000粉以上的人記錄下來(人數並不很多),然後每天兩次分析他們timeline的重合情況,就可能獲取未來的熱點問題。
當然,也有一些像書記 @孟德爾 一樣每天點贊各種冷僻問題的人。這種事情我也沒辦法…
#第一個長答案竟然是由代碼填充的…
02/13/2015
二、卡方檢驗
皮爾森卡方檢定_維基百科
@dream journey同學指出,我並不能證明大V關注是熱點問題的充分條件。換言之,大V是否關注與問題是否會成為熱點並不一定有明顯的相關性。
於是我所要做的就是取得足夠的樣本,為這個表補充數據。
通過卡方檢驗,我們能夠估計出兩個事件相關的概率。
那麼問題就在於樣本的搜集。我們可以很清楚地發現,知乎問題的url有很明顯的特點。例如:http://www.zhihu.com/question/27507213 ,結尾是八位的數字。那麼我就可以隨機生成八位數字作為問題編號,以此來獲取隨機性足夠的樣本。
獲取的樣本中,可能會有大量毫無營養的問題,所以我要設定一個篩選標準,以避免問題基數被無意義地拉大。我暫且把過濾數設置為10。少於10人關注的問題我將不予計算。
待我繼續寫腳本……
==================過了一段時間==================
腳本寫完了。有效url的密度比我想像中要小得多,20000多個頁面中只有510個沒有404 NOT FOUND。再除去那些10關注以下的,剩下了……呃……96個。
對不起…我真沒想到居然有這麼水…
嗯嗯…繼續說正事。
取前200名關注者中過千粉用戶數不小於3的問題為大V關注問題,關注數200以上的為熱點問題:
我覺得我沒算錯…這麼大的結果在常用卡方表裡已經查不到了。
所以從理論上講我現在有了99.99%以上的把握,要是相關性不大的話你們可以打死我。
02/14/2015
增補70條數據。現有數據為:
越來越大了…
接下來我們來加強一下條件。
使用之前收集的數據,去除關注數不大於10的問題。定義前100名關注者中過千粉用戶數不小於3的問題為大V關注問題,關注數300以上問題為熱點問題。重新整理得:
, 對應的,說明二者有相關性的概率低於90%。換言之,加強條件後相關性大大減弱。
不過這麼強的條件真的用的上嗎?
#我突然醒覺自己本來是在寫multidimentional scaling的……
02/14/2015
時事/娛樂類問題:
從新浪微博的熱門博文中估計出一個語言模型,然後對所有被提問者打上時事/娛樂相關標籤的問題,使用最大邊際相關(MMR)的方法遞進選出個問題,是已被選出的問題的集合。
或者最小化以下度量:
可調參數用來在相關性和結果集的多樣性之間作權衡。
結果即為個熱門問題。
技術類問題:
根據每個人在相關技術領域回答的質量(贊同、感謝)等計算大家對各個技術話題的「推薦權重」(比如輪子哥對 Windows 話題的推薦權重就很高)。
各話題截取全知乎 top 5000,這些人對相關技術問題的關注、回答等行為會為問題增加分數。
然後就是實時排序,將熱門問題推送到粉絲的時間線上以及進入「發現」欄目。
其他問題:
看關注者增長的加速度就好。
- Carbonell, Jaime, and Jade Goldstein. "The use of MMR, diversity-based reranking for reordering documents and producing summaries." Proceedings of the 21st annual international ACM SIGIR conference on Research and development in information retrieval. ACM, 1998.
- Zhai, Cheng Xiang, William W. Cohen, and John Lafferty. "Beyond independent relevance: methods and evaluation metrics for subtopic retrieval." Proceedings of the 26th annual international ACM SIGIR conference on Research and development in informaion retrieval. ACM, 2003.
樓上的方法很好,寫代碼的確是很有效的方法。像我這種不會寫代碼的,只好腦補了。但是我敢保證,這個腦補很靠譜!
1.這個問題要有價值,最好針對一個空白。
也就是說知乎上有很多人會對這個問題感興趣,之前卻沒有這樣的問題。
例如我之前提的問題:如何評價TFBoys?
用了不到一周,瀏覽量突破50萬。
2.能被推送到很多人的timeline上
一個問題能推送到你的timeline上,只有兩種可能。一是你關注了的人(大多是大V或者我這種小V)關注,回答,點贊,二是XX話題下很多人贊同了回答XXX。
想讓大V關注,還要看第一點,問題要足夠吸引人。另外適當邀請小V也是很好的辦法。
二就是要把話題選好,有些知友提了個問題,就選了兩個話題,而且兩個話題的關注者加一起不到1000。這樣的問題怎麼可能火起來?
稍後個人將說一點如何讓一個問題火起來的心得,大家可以先點贊,24小時內填坑。
最後預測一下,這個問題最後關注人數必破1000。
1)找到粉絲排名前500的大V
2)抓取他們六個小時以內的動態
3)他們每提出一個問題,回答一個問題,關注一個問題,給一個問題下的答案點贊,相應的問題權重加一
4)把所有問題按權重排序
5)把即時關注人數少於300的問題標記為潛在熱門
效果可以參考:知乎封神榜 - 您的知乎之旅從此開始
歡迎提改進意見
推薦閱讀:
※使用爬蟲抓投資數據是否是一個高效的方式?
※如何用爬蟲抓取股市數據並生成分析報表 ?
※一個人一生要在紅燈前停留多久?
※演算法之路該如何學習?
※你壓力最大的時候是什麼時候,怎麼度過的?