用數據解決單身問題

  • 2019 年 10 月 8 日
  • 筆記

作者:數據不吹牛

來源:時間能編程

最近很多關於曬擇偶標準的帖子,活脫脫把知乎變成了另一個「世紀佳緣」,回答清一色的爆照和曬條件,這對於單身狗來說是妥妥的福利。

母胎SOLO的程式設計師小Q就沉迷其中不能自拔,這是他流著哈喇子發出的第100次感慨「你說說!這些小姐姐照片是真好看!但回答實在太太太多了,怎麼才能在這些回答中找到合適的人選呢?Z哥,你能不能從數據分析角度給我點思路啊?」

小Z不勝其擾,被迫接受了這個艱難的任務——基於數據打造一份擇偶指南

數據獲取

首先,我們要拿到這些小姐姐們的數據,小Z找到了擇偶/相親相關內容下最熱門的一個問題——你的擇偶標準是怎樣的?

說是問擇偶的標準,其實全是希望找到另一半的小哥哥、小姐姐們在答題。目前已經有27000+回答了:

回答爬取這一塊,知乎還是比較友善的,只需要在XHR裡面找到回答的動態網址,偽裝headers的User-Agent就能夠歡樂的批量爬取了。

小Z不費吹灰之力就爬到了問題下27664條回答,還包括每條回答的答主昵稱、關注人數、點贊數、性別等一大票欄位。

數據初窺

1、匿名情況和性別佔比

截至日前,這個回答下有13527個用戶是匿名的,佔比(48.90%)接近半數。需要注意的是,所有匿名用戶的性別默認都是男(知乎性別1表示男,0表示女,-1代表未知)。出於職業習慣,小Z以迅雷不及掩耳之勢分析了男女佔比(剔除了匿名用戶的佔比):

小Z發現,這個問題下,已經有大神基於內容進行了匹配,在未剔除匿名的情況下,發現男性佔比較大。

而我們剔除掉匿名的用戶,只基於爬取的性別源數據進行分析,發現男、女、未知三分天下,性別佔比相對均衡,可以確定的是,目前回答下有4758個不匿名的小姐姐。(這兩套邏輯下的統計結果並不衝突)

2、回答創建時間分布

在看回答創建時間分布前,需要先把知乎默認的時間戳格式轉換成我們習慣的時間格式:

回答時間分布:

  • 2018年4月30號,隨著問題的提出,第一個哥們開始答題,前期這個問題一直處於日回答數不過50的不溫不火狀態。時間來到了18年國慶節,可能是單身狗返鄉受到親友們的瘋狂質詢,導致回答數暴增,10月7日當天,日回答數突破300大關,隨後回答數穩定在100左右。
  • 無從考證2018年12月13日發生了什麼,那一天有506顆悸動的心將脫單的希望交給了知乎。
  • 19年春節前的返鄉期,又是一次情感大拷問,也是回答數的第三個小高潮。及至今日,每天還有60+新增回答。

縮小脫單範圍

「哥們,你看看吧」一番標準彙報式的操作完成之後,小Z有些嘚瑟。

「Emmm,這都哪兒跟哪兒啊!你別給我看這些有的沒的行嗎!什麼男女佔比,什麼發布時間分布,都關我屁事啊,我需要的是切實的!可以幫助我在上面找到女朋友的數據建議!」

納尼?這跟我預想的他會猛誇我一頓的結果完全不一樣啊!不過他說的確實在理。小Z頓時沒了底氣。「那行,數據都拿到了,你說說你找女朋友什麼條件吧」

小Q45度角仰望天空,露出了少男懷春般的甜笑「什麼條件不條件的,我只想找到一個我願意為她放棄所有預設條件的靈魂伴侶~」

噗!「這才是他單身的根本原因啊!這個人可能被需求壓成傻子了,要包容,要包容,要包容」小Z吐完一口老血後不斷安慰自己。

小Q繼續補充道:「這樣吧,你能幫我列一個清單嗎?我覺得可能還是要自己聊聊,看合不合拍。哦對了,匿名的就算了,我不喜歡太害羞的」。

得!匿名算了是吧,那我直接篩掉!靈魂伴侶是吧,那肯定接受異地,地區匹配先省略了!能放棄所有預設條件是吧,那學歷年齡身高哥也不用給你去正文苦哈哈的匹配了!

問題的重點,就在於如何設計一套合適的邏輯來從數據中清洗和篩選出目標小姐姐們。

沉思片刻,小Z制定了一個四步脫單法來解決這個問題:

1、既然是靈魂伴侶,那如果回答連30字都沒有超過,不是抖機靈就是敷衍,怎麼能承擔起「靈魂」二字呢!必須PASS掉!

搞定,這一步下來,目標群體還有4244個小姐姐

2、數據最重要的特性之一就是時效性,別看回答數量這麼多,真正抓得住的幸福才是屬於自己的幸福,如果一個答主最近一次更新答案的時間超過了一個月,那只有兩種可能,要麼是她已經找到了,要麼她已經對這個方式失去了興趣。所以,加上時間條件,篩選出最近30天還活躍的小姐姐們。

經過本輪篩選,小姐姐的數量直接從4244個縮小到598個。

3、小Z發現,有一些小姐姐在回答中強調照片OR內容已刪,已經找到。這類回答當然要繼續PASS。

還剩下562位~

4、對於相貌平平無奇,條件一般的小Q來說,去追已經被眾星捧月的小姐姐們,難度實在是太大了。於是小Z根據經驗暴力設置了兩個閾值:

  • 知乎帳號被關注人數超過1500以上的,對小Q來說算是大V了,PASS!
  • 回答點贊超過150或評論條數超過100的,說明已經有狼群盯上,激烈的競爭不適合與世無爭的小Q。

四步走下來,名單已經成功銳減到480了,剩下的都是些走心的(回答字數多)、熱乎的(最近更新)、正在擇偶中且競爭還不算激烈的小姐姐們。小Z長舒一口氣後,又有了新的困惑:「這樣篩選得到的名單,雖然說範圍精確多了,能不能再進一步,給他一個優先順序排序呢?

引入指數,暴力排序

問題的核心要給他找一份相對不錯,又競爭尚小的名單。而相對不錯,又競爭壓力尚小,怎麼量化呢?將髮際線撓退了2厘米後,小Z有所頓悟。

在這個回答下,點贊越多說明答主在某個方面越受青睞,評論越多則表示主動出擊的人越多,競爭可能更激烈。而前面已經對點贊和評論數進行了清洗,大熱不在,如何在小熱中進行排序呢?

這裡,小Z用每個回答的點贊數除以評論數,得到一個贊評指數,用來衡量平均一個評論能夠獲得多少贊,數值是越高越好的。

舉個栗子:

回答A有130個贊,30條評論,回答B有130個贊,60條評論,點贊數相同的情況下,B的評論更多,競爭更加激烈,從競爭的角度看,選擇A更加明智;回答C和D分別有50條評論,而C的點贊數要高於D,在評論數相同的情況下(競爭激烈程度相近),我們應該選擇更受青睞的C。

從贊評指數來看,A的4.33 > B的2.17;C的2.24 > D的1.70,看來,評贊指數能夠為我們的選擇提供優先順序指導。

於是,小Z用暴力的贊評指數對剩下的小姐姐進行排序,並取TOP30,得到了最終的脫單大名單。

不錯不錯,有心了有心了。」小Q接過名單,忍俊不禁,樂呵呵的去按ID索伴,至於後續嘛,外號鐵公雞的小Q破天荒的請小Z吃了一頓豐盛的燒烤。

最後,小Z把爬取程式碼,源數據以及篩選過程打包整理,後台回復「脫單」即可獲取完整程式碼,旁友們可以執行程式碼獲取符合小Q條件的小姐姐,不過,更好的方式還是嘗試自己設置條件來篩選另一半。