使用python抓取婚戀網用戶數據並用決策樹生成本身擇偶觀

最近在看《機器學習實戰》的時候萌生了一個想法,本身去網上爬一些數據按照書上的方法處理一下,不只能夠加深本身對書本的理解,順便還能夠在github拉拉人氣。恰好在看決策樹這一章,書裏面的理論和例子讓我以爲這個理論和選擇對象簡直不能再貼切,看完長相看學歷,看完學歷看收入。若是能夠從婚戀網站上爬取女性的數據信息,手動給她們打標籤,並根據這些數據構建決策樹,不就能夠找出本身的擇偶模式了嗎!github項目:huatian-funny,下面就詳細的闡釋一下。git

數據爬取

以前在世紀佳緣上爬取過相似的數據,整體的感受是上面的用戶數據要麼基本不填要麼一看就很假,周圍的一些老司機建議能夠在花田網上看下,數據質量確實高不少,惟一的缺點就是上面的數據不給爬,搜索用戶的API須要登陸,並且只顯示三十多個用戶的信息。恰好我須要的數據也不多,就把搜索條件劃分的很細,每次取到的數據很小,但最終聚集的數量仍是至關可觀的,最終獲取了位置在上海年齡22-27共計2000個左右的用戶數據。填寫好spider.py中的用戶名和密碼,直接運行這個文件就能夠爬取數據,由於數據量不大,很快就能夠運行完畢,存儲在mongodb中的數據以下:github

爬蟲用到的工具是requests,流程上也很簡單,先發送登錄請求獲取cookie,而後調用搜索API獲取數據,拿到的數據是json格式,不須要任何轉換直接存儲mongodb,很是的方便,惟一想吐槽的就是花田搜索API接口居然用的是POST方式,太沒有專業水準了。稍微提一下如何用request獲取cookie,用Session構建一個session對象,用這個對象發送登錄請求後,以後的請求都會自動帶上登錄返回的cookie,使用起來很是的簡單。mongodb

1 from requests import Session
2 
3 session = Session()
4 session.post(login_url, data=post_data, headers=POST_HEADERS)
5 response = session.get(search_url, headers=GET_HEADERS)

 

給用戶打標籤

因爲決策樹屬於監督學習,須要一個給定的標籤,所以須要本身根據用戶的外貌、年齡、學歷等多個維度的判斷給出一個標籤,最後生成的決策樹在必定程度上就能夠反映本身的擇偶標準。針對女性的標籤很簡單粗暴,只有滿意和不滿意兩種,有興趣的同窗能夠按照真實的狀況設置更多的標籤,例如優秀、通常、備胎、不合格等等。由於外貌是選擇對象過程當中一個必不可少的要素,把相貌量化相當重要,由於沒有相關的工具根據頭像進行評分,只能我的主觀進行量化,採用了當下很是流行的十分制。json

爲了增長打標籤的效率,專門寫了一個桌面窗口,運行mark.py便可,運行結果以下。(tkinter是一個坑,調代碼的時間夠我把整個數據集看好幾遍了,不過真的用起來的時候仍是挺有意思的)cookie

備註:由於剛開始看的不少用戶只有頭像、年齡、身高、工資、學歷這五個信息,因此整個過程當中只參考了這五個維度進行評價,下面的決策樹也是根據這五個維度進行處理。session

訓練數據

決策樹

機器學習中,決策樹是一個預測模型,它表明的是對象屬性與對象值之間的一種映射關係。樹中每一個節點表示某個對象,而每一個分叉路徑則表明的某個可能的屬性值,而每一個葉結點則對應從根節點到該葉節點所經歷的路徑所表示的對象的值。決策樹僅有單一輸出,若欲有複數輸出,能夠創建獨立的決策樹以處理不一樣輸出。從數據產生決策樹的機器學習技術叫作決策樹學習, 通俗點說就是決策樹,說白了,這是一種依託於分類、訓練上的預測樹,根據已知預測、歸類將來。機器學習

理論方面我能夠參考《機器學習實戰》第三章或者這篇博客,很淺顯易懂的解釋了具體的原理,我就不贅述了。ide

結果展現

代碼參考的是《機器學習實戰》,針對現實本身作了一些優化調整,和原來的代碼不是徹底相同,運行train.py就能夠顯示出結果,以下:工具

 

由於線很擠,調了好久只能拿到這個效果了。到這兒已經很清晰明瞭的闡明瞭主題,我就是一個外貌黨,顏值高的pass,顏值低的忽略,不高不低的考慮的至關糾結。有興趣的同窗能夠本身試一試。post

PS1:其實不太想認可本身是一個外貌協會成員,人醜顏控註定孤獨一輩子。

PS2:由於打標籤的過程有些隨意,因此有一部分不許確。

PS3:沒有相親的打算,不約。

相關文章
相關標籤/搜索