99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀爬取張佳瑋138w+知乎關注者后,我做了數(shù)據(jù)可視化分析
爬取張佳瑋138w+知乎關注者后,我做了數(shù)據(jù)可視化分析
2017-09-10
收藏

爬取張佳瑋138w+知乎關注者后,我做了數(shù)據(jù)可視化分析

本項目僅為個人練手,若有冒犯張公子或其他人之處,在此先致以歉意,爬取的數(shù)據(jù)不做公開。另外行文時間問題,關注張公子的人數(shù)略有變化,很多數(shù)據(jù)也都有所變化,請批判性地看待可視化結果。

一、前言

作為本專欄第一篇文章,先介紹下小背景,即為什么爬知乎第一大V張公子的138w+關注者信息?

其實之前也寫過不少小爬蟲,按照網(wǎng)上各種教程實例去練手,“不可避免”的爬過妹子圖、爬過豆瓣Top250電影等等;也基于自身的想法,在浙大120周年校慶前,聽聞北美帝國大廈首次給大陸學校亮燈,于是爬取2016-2017年官網(wǎng)上每日的亮燈圖并用python的PIL庫做了幾個小logo,算是一名吃瓜群眾自發(fā)的慶賀行為;

也因為喜歡魯迅的作品,爬過在線魯迅全集的全部文章標題和鏈接;另外聽說太祖的某卷書是禁書,于是順帶也爬了遍毛選;還幫老同學在某票據(jù)網(wǎng)站下線前爬了大部分機構、人員信息,說是蠻值錢,然而也還在留著落灰......

再是知道百度Echarts開源的可視化網(wǎng)站里面的圖很酷炫,比如使我著迷的:微博簽到數(shù)據(jù)點亮中國,于是想著可以爬取微博大明星、小鮮肉的粉絲的居住地,然后搞搞怎么畫出全國乃至全球分布情況。但發(fā)現(xiàn)幾年前微博就限制只能查看200左右粉絲數(shù)(具體忘了),蠻掃興的,于是將目光轉向了知乎......

而既然要爬,那就爬關注人數(shù)最多的張公子吧,數(shù)據(jù)量也大,這方面是之前小項目所不及的,此前也看過不少爬知乎數(shù)據(jù)與分析的文章,因此也想練練手,看看大量訪問與獲取數(shù)據(jù)時會不會遇到什么封IP的反爬措施,以及數(shù)據(jù)可視化能搞成什么樣。

不過此文在爬蟲部分不做過多展開,看情況后續(xù)再另寫一文。思路如下:抓包獲取張佳瑋主頁關注者api,然后改變網(wǎng)址中offset參數(shù)為20的倍數(shù),一直翻頁直到獲取138w+關注者信息,其中返回的json數(shù)據(jù)主要有:關注者的昵稱、主頁id(即url_token)、性別、簽名、被關注人數(shù)等,也就是說需要訪問所有主頁id,才能獲取更多信息(個人主頁api:以黃繼新為例):居住地、所在行業(yè)、職業(yè)經歷、教育經歷、獲贊數(shù)、感謝數(shù)、收藏數(shù)等等。鑒于還不怎么會多進程爬取,如果把所有id再爬一遍會非常耗時間,于是篩選被關注數(shù)100+的id,發(fā)現(xiàn)只剩了4.1w+,之后較完整提取了這部分的信息,后續(xù)可視化也多基于此。

二、數(shù)據(jù)可視化

1、關注人數(shù)

大V總是少數(shù)的,而小透明到底有多少、分布情況如何呢?將關注人數(shù)劃分成不同區(qū)間,繪制成如下金字塔圖:

作為一只小透明,在此過程中發(fā)現(xiàn)自己處于前2w的位置,即圖中紅色區(qū)域,還是蠻吃驚的。上文已提到100+關注就超過了134w的用戶,而1k+、1w+、10w+就越來越接近塔尖,越來越接近張公子的所在,看上圖10w+以上的區(qū)域,如同高聳入云,渺然不可見,“亂山合沓,空翠爽肌,寂無人行,止有鳥道”,令小透明很是神往。

上升之路雖然崎嶇,但也同樣說明只要多增幾個關注,就勝過了數(shù)以萬計的用戶,這對于有志于成為大V的人,或許能在艱難的前行之路上,靠此數(shù)據(jù)透露的信息,拾得些許信心。

細看底部的區(qū)間,0關注有40.2w+,1-10關注有76.6w+,區(qū)分度已赫然形成,但小透明可能感受不出,那怕有幾百的關注,何嘗不會覺得自己依舊是個小透明呢?有誰會相信斬獲10人關注,就超過了100w+的用戶,數(shù)據(jù)能告知人經驗之外的事實,在此可見一斑。當然知乎大量用戶涌入且多數(shù)人并不產生優(yōu)質或有趣的回答,也是一二原因。

繼續(xù)看100+以上的數(shù)據(jù),底部占比依舊明顯,塔尖依然很小。

2、性別情況

接著對100+關注人群的性別組成進行分析,發(fā)現(xiàn)男女比例基本維持在2:1,與138w+用戶的男女比例差別不大。當然10w+關注由于人數(shù)較少,比例超過3:1,是否能得出男性在這方面更為優(yōu)秀就不得而知了。

3、10w+大V

前文已多次提到10w+大V,那么這190人里到底都有誰呢?這里以關注人數(shù)為權重,生成詞云如下:

大家上知乎的話應該也有關注一些大V,許多名字應該并不陌生,比如馬伯庸、動機在杭州、葛巾、朱炫、丁香醫(yī)生等等,當然也會發(fā)現(xiàn)并不是所有大V都關注了張公子,哪怕他是知乎第一人,目前已交出了3026個回答,135個知乎收錄回答的傲人成績(據(jù)說也是豆瓣和虎撲第一人)。

4、居住地分布

終于到了我最初開始這個項目時,最想獲取的的信息了。雖然由于爬取效率而篩選掉了100關注以下的id共134w,數(shù)據(jù)量方面不如標題所示的那么多,略有遺憾,但其實真的拿到4.1w+條較優(yōu)質數(shù)據(jù)時,發(fā)現(xiàn)處理起來也并不容易。

比如這里的居住地信息,有亂填水星、火星、那美克星,也有填國家、省份、縣市、街道格式不一的,還有諸如老和山之類外行人不明白的“啞謎”等等,數(shù)據(jù)之臟令人頭疼,且純文本的數(shù)據(jù)又不像數(shù)字類可以篩選、排序,還沒想到好的方式應對。再者Echarts官網(wǎng)雖然有不少可以套用的模板,但有很多地方的經緯度需要重新獲取,這樣就在數(shù)據(jù)處理和地圖上定位有兩處難題需要解決。

由于第一次處理這類數(shù)據(jù)并可視化,第一次用Echarts就打算畫這個酷炫的地圖,因此最終先縮小數(shù)據(jù)量,還是以1w+大V的數(shù)據(jù)來可視化,目前先完成國內分布情況,以后看情況再擴大數(shù)據(jù)量和繪制全球分布情況。

其中出現(xiàn)次數(shù)排名前幾的城市依次為:北京 360,上海 183,深圳 55,杭州 52,廣州 47,成都 26,南京 20......應該算是意料之中的??紤]到并不是每個人對這些點所代表的城市都熟悉,加上城市名,效果如下,重疊較為嚴重,顯示效果不夠好,仍需解決。

5、Top20 系列

接下來分別對所在行業(yè)、職業(yè)經歷、教育經歷等進行分析,結果如下(注:用戶有多條職業(yè)經歷或教育經歷的,僅爬取了最新的一條數(shù)據(jù)):


學校方面幾乎全為985、211高校,當然拿得出手的會樂于寫上,略微差些的可能不會填寫,而且涌入用戶多了后,這類數(shù)據(jù)也就只是調侃知乎人人都是985高校,年薪百萬的點了。所在行業(yè)方面,互聯(lián)網(wǎng)遙遙領先,計算機軟件、金融、高等教育位居前四。


Top20 公司中BAT、網(wǎng)易、華為、小米科技、美團網(wǎng)以及谷歌、Facebook、微軟等大廠都悉數(shù)在列。再看Top20 職業(yè)里除了各種名號的程序員、產品經理、運營等互聯(lián)網(wǎng)職業(yè),創(chuàng)始人、CEO等占據(jù)前排,不可謂不令人大驚從早到晚失色。

6、認證信息

原本只知道博士可以提供信息得到認證,知乎也會給予其回答更好的顯示途徑,使其更容易成長為大V,以此作為對高學歷人群、優(yōu)質用戶的獎勵。

此次抓取的100+關注4.1w+條數(shù)據(jù)中有208條認證信息。除卻各種專業(yè)的博士、博士后外,還有37家公司、機構,9條醫(yī)師,11條教授/講師/研究員,13條CFA、CPA持證人或工程師、建筑師,以及28條其他類:副總裁、創(chuàng)始人、記者、律師、WCG2005-2006魔獸爭霸項目世界冠軍、職業(yè)自行車手、主持人、作家、歌手等等。看來還是有不少優(yōu)質用戶可以后續(xù)去了解下的。

7、優(yōu)秀回答者

除了認證信息外,優(yōu)秀回答者這是鑒別某用戶是否為優(yōu)質用戶,是否值得關注的一個重要指標。包含張佳瑋在內,共有468位優(yōu)秀回答者,涉及257個話題,共出現(xiàn)768人次優(yōu)秀回答者標簽。

而所有優(yōu)秀回答者貢獻的回答和知乎收錄回答情況如下:

最右上角的便是張佳瑋的貢獻情況,令人望塵莫及。也有不少用戶貢獻了上千個回答,可以說是非常高產。但大部分用戶回答數(shù)<1000,收錄數(shù)<50。密集區(qū)域放大后如圖:

有不少數(shù)據(jù)收錄回答為0,因為還不知道知乎優(yōu)秀回答者的評判標準,所以此處還需進一步了解。另外這些數(shù)據(jù)點,對應的加上一些大V名字可能顯示起來能好,但一直在摸索,還不得要領。

三、小結

本項目是個人第一次百萬級數(shù)據(jù)的爬取,當然由于爬取效率方面需要改進,所以詳細用戶信息選擇性的只爬了100+關注人數(shù)共4.1w+的id。另外也是第一次數(shù)據(jù)可視化,從完全不懂Echarts的各種參數(shù),硬剛配置項,到勉強獲得了上述還算能看的一些數(shù)據(jù)圖,不少地方還需進一步學習、改進,以求獲得更合乎要求的、理想的、自定義的可視化圖。

另外,除卻上述數(shù)據(jù)外,還有點贊數(shù)、感謝數(shù)、收藏數(shù)、關注數(shù)和被關注數(shù)、簽名、個人簡介等等數(shù)據(jù)并未處理,但基本想要獲取的圖都得到了,算是完成了此項目,也學到了很多東西。


數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師考試動態(tài)
數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調,回調的第一個參數(shù)驗證碼對象,之后可以使用它調用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }