轉(zhuǎn)自丘壑博客,轉(zhuǎn)載注明出處
前言
書(shū)接上回,上一篇里我們已經(jīng)把需要的數(shù)據(jù)爬下來(lái)了。眾所周知,數(shù)據(jù)只有在分析出結(jié)論的時(shí)候才有價(jià)值,不能是為了爬而爬。
數(shù)據(jù)分析(Data Analysis)是指用適當(dāng)?shù)慕y(tǒng)計(jì)分析方法對(duì)收集來(lái)的大量數(shù)據(jù)進(jìn)行分析,提取有用信息和形成結(jié)論而對(duì)數(shù)據(jù)加以詳細(xì)研究和概括總結(jié)的過(guò)程。
在數(shù)據(jù)分析前要找到分析的目標(biāo),帶著問(wèn)題去分析,也就是了解前期數(shù)據(jù)分析的需求。在產(chǎn)品運(yùn)營(yíng)過(guò)程中,數(shù)據(jù)分析具有極其重要的戰(zhàn)略意義,是產(chǎn)品優(yōu)化和產(chǎn)品決策的核心大腦。因此做好數(shù)據(jù)分析,是產(chǎn)品運(yùn)營(yíng)中最重要的環(huán)節(jié)之一。如果程序員能有一些數(shù)據(jù)分析的意識(shí),懂一些數(shù)據(jù)分析的基本方法,無(wú)疑會(huì)對(duì)自身的職業(yè)發(fā)展會(huì)有很大的幫助。
所以,這一篇里將講一點(diǎn)很簡(jiǎn)單的數(shù)據(jù)分析的方法,看看能不能得出一些有意思的結(jié)論。同樣的,也是為了提供一種思路和方法。
思路
為什么分析?
首先,你得知道為什么分析?弄清楚此次數(shù)據(jù)分析的目的。因?yàn)槲冶旧硪彩且粋€(gè)開(kāi)發(fā)者,所以對(duì)WordPress插件開(kāi)發(fā)者的情況會(huì)天然的比較感興趣,也想看看國(guó)內(nèi)外一些優(yōu)秀的插件開(kāi)發(fā)者是誰(shuí),在做什么插件。
實(shí)際這次的分析純屬個(gè)人興趣,具體這些結(jié)論能有什么用,好像也并沒(méi)有什么卵用。還有一個(gè)原因可能是前段時(shí)間學(xué)了大量的機(jī)器學(xué)習(xí)數(shù)據(jù)分析方面的知識(shí),如饑似渴的在YouTube上在各種網(wǎng)站上填鴨式學(xué)習(xí),腦子塞的滿滿的,也想通過(guò)這次實(shí)驗(yàn)一下,看看自己是不是真的理解了,而不是說(shuō)僅僅是為了學(xué)習(xí)而學(xué)習(xí)
需要哪些數(shù)據(jù)? 如何采集?
數(shù)據(jù)來(lái)源的問(wèn)題上一篇中已經(jīng)解決了,不過(guò)有一點(diǎn)需要補(bǔ)充一下,是有的插件可能并沒(méi)有在WordPress.org上發(fā)布過(guò),可能就只是在github上或個(gè)人網(wǎng)站上提供了一個(gè)zip文件,就好比有的手機(jī)app并沒(méi)有在各大應(yīng)用商店上發(fā)布,這種會(huì)被遺漏掉,不過(guò)無(wú)所謂了,這種數(shù)據(jù)也不好統(tǒng)計(jì)到。
數(shù)據(jù)長(zhǎng)什么樣子?分析的維度是什么?
在做分析之前,先要簡(jiǎn)單的觀察數(shù)據(jù)的情況,比如他們的屬性個(gè)數(shù)、屬性類別、缺失值情況等等,對(duì)數(shù)據(jù)有個(gè)大概的認(rèn)識(shí)。
在上一篇文章中爬取的數(shù)據(jù)中,我們得到了一個(gè)WordPress.org的svn上的所有插件列表,但其實(shí)有很多無(wú)效數(shù)據(jù),有些插件在WordPress.org上已經(jīng)找不到了,并沒(méi)有過(guò)濾掉,會(huì)有很多行這種:
{"error": "Plugin not found."}
要么在把這些行全部刪除掉,要么在分析的時(shí)候過(guò)濾掉,其實(shí)完全可以在爬的時(shí)候就過(guò)濾掉,不管怎么說(shuō)自己挖的坑還是要自己填,當(dāng)然,在數(shù)據(jù)分析的時(shí)候這種情況也是經(jīng)常會(huì)出現(xiàn)的,第一步都需要先把無(wú)效數(shù)據(jù)過(guò)濾掉。為了后面方便一點(diǎn),我把這些行直接刪除掉了。竟然有24685行 “Plugin not found.”。。。刪玩之后還有54421行,這么一算,和官網(wǎng)的插件數(shù)量也差不多啊。。。
gsed -i '/"Plugin not found."/d' output.jsonl
然后,還需要對(duì)數(shù)據(jù)結(jié)構(gòu)有一個(gè)直觀性的了解。有必要把json數(shù)據(jù)結(jié)構(gòu)展示一下,一個(gè)正常插件的完整有效信息包容如下字段和值,基本上都可以望文生義,沒(méi)有什么特別復(fù)雜奇怪的,后面的分析都是基于這些字段進(jìn)行的:

如何處理數(shù)據(jù)?
整理數(shù)據(jù)是門技術(shù)活,相關(guān)工具也特別多,從開(kāi)源的到各大廠商的都有。不得不承認(rèn)Excel是個(gè)強(qiáng)大工具,很多時(shí)候一些簡(jiǎn)單的數(shù)據(jù)分析用Excel就可以很快速方便的完成,如果能熟練掌握和使用數(shù)據(jù)透視表那就更不得了了。我在工作中也經(jīng)常用Excel,玩的還算挺溜的,用數(shù)據(jù)透視表做各種維度的運(yùn)維數(shù)據(jù)處理和時(shí)間進(jìn)度安排,也能很好的完成工作。不過(guò)好像在程序員眼中似乎Office三大套件都挺不受待見(jiàn)的,我以前的一個(gè)leader就很不喜歡Excel,搞的我都得偷偷用,真是夠夠的。不知道有一句話說(shuō)的好嗎,“干活的累死累活,有成果那又如何,到頭來(lái)干不過(guò)寫PPT 的”。其實(shí)完全沒(méi)有必要對(duì)一些工具帶著有色眼鏡看,現(xiàn)在我是一個(gè)實(shí)用主義者,拿來(lái)主義者,能用就行,夠用就行,曾經(jīng)我也有程序員中的那種工具癖好,信奉“工欲善其事必先利其器”,光tm磨刀了,什么柴都沒(méi)砍!題外話了。
本次會(huì)用到的是Python的強(qiáng)大的數(shù)據(jù)分析工具pandas、numpy。這幾個(gè)庫(kù)都是大名鼎鼎如雷貫耳的了,只要知道Python的人就算沒(méi)用過(guò)也會(huì)多少有所耳聞,相關(guān)的書(shū)籍和課程也汗牛充棟。初次接觸的朋友可以看看下面這幾本書(shū)和教程,值得系統(tǒng)學(xué)習(xí)(假設(shè)你已經(jīng)有了一點(diǎn)Python的基礎(chǔ)):
Python數(shù)據(jù)分析-基礎(chǔ)技術(shù)篇
利用Python進(jìn)行數(shù)據(jù)分析 (O’Reilly精品圖書(shū)系列)
這些是一些系統(tǒng)性講解的書(shū),有關(guān)更多的類似numpy、pandas數(shù)據(jù)處理模塊的講解,可以自行查閱官網(wǎng)的文檔說(shuō)明。
如何展現(xiàn)和輸出?
數(shù)據(jù)可視化也是一個(gè)學(xué)問(wèn),是展示數(shù)據(jù)的一個(gè)非常好的手段,如何用合適的圖表表現(xiàn)?每一種圖表的寓意是什么? 好的圖表自己會(huì)說(shuō)話。毋庸多言,在Python的世界里,matplotlib是最著名的繪圖庫(kù),它支持幾乎所有的2D繪圖和部分3D繪圖,被廣泛地應(yīng)用在科學(xué)計(jì)算和數(shù)據(jù)可視化領(lǐng)域。但是介紹matplotlib的中文書(shū)籍很少,大部分書(shū)籍只是在部分章節(jié)中提到了matplotlib的基本用法,因此在內(nèi)容和深度上都力有不逮。《Python數(shù)據(jù)可視化編程實(shí)戰(zhàn)(第2版)》則是一本專門介紹matplotlib的譯著。70多個(gè)方法,輕松入門Python可視化編程。
matplotlib是一個(gè)開(kāi)源項(xiàng)目,由John Hunter發(fā)起。關(guān)于matplotlib的由來(lái),有一個(gè)小故事。John Hunter和他研究癲癇癥的同事借助一個(gè)專有軟件做腦皮層電圖分析,但是他所在的實(shí)驗(yàn)室只有一份該電圖分析軟件的許可。他和許多一起工作的同事不得不輪流使用該軟件的硬件加密狗。于是,John Hunter便有了開(kāi)發(fā)一個(gè)工具來(lái)替代當(dāng)前所使用的軟件的想法。當(dāng)時(shí)MATLAB被廣泛應(yīng)用在生物醫(yī)學(xué)界中,John Hunter最初是想開(kāi)發(fā)一個(gè)基于MATLAB的版本,但是由于MATLAB的一些限制和不足,加上他本身對(duì)Python非常熟悉,于是就有了matplotlib的誕生。創(chuàng)始人John Hunter在12年的時(shí)候因?yàn)榘┌Y去世了(默哀)
Seaborn是基于matplotlib的Python可視化庫(kù)。 它提供了一個(gè)高級(jí)界面來(lái)繪制有吸引力的統(tǒng)計(jì)圖形,可以作出非常漂亮的圖表,見(jiàn)下圖。Seaborn其實(shí)是在matplotlib的基礎(chǔ)上進(jìn)行了更高級(jí)的API封裝,從而使得作圖更加容易,不需要經(jīng)過(guò)大量的調(diào)整就能使你的圖變得精致。但應(yīng)強(qiáng)調(diào)的是,應(yīng)該把Seaborn視為matplotlib的補(bǔ)充,而不是替代物。

以下列舉幾個(gè)常用的8個(gè)圖表類型和用途:
(1)、折線圖:合適用于隨時(shí)間而變化的連續(xù)數(shù)據(jù),例如隨時(shí)間收入變化,及增長(zhǎng)率變化。
(2)、柱型圖:主要用來(lái)表示各組數(shù)據(jù)之間的差別。主要有二維柱形圖、三維柱形圖、圓柱圖、圓錐圖和棱錐圖。如支付寶與微信覆蓋率差別。
(3)、堆積柱形圖:堆積柱形圖不僅可以顯示同類別中每種數(shù)據(jù)的大小,還可以顯示總量的大小。例如我們需要表示各個(gè)支付方式的人數(shù)及總?cè)藬?shù)時(shí)。
(4)、線-柱圖:這種類型的圖不僅可以顯示出同類別的比較,還可以顯示出趨勢(shì)情況。
(5)、條形圖:類似于橫向的柱狀圖,和柱狀圖的展示效果相同,主要用于各項(xiàng)類的比較。
(6)、餅圖:主要顯示各項(xiàng)占比情況。餅圖一般慎用,除非占比區(qū)別非常明顯。因?yàn)槿庋蹖?duì)對(duì)餅圖的占比比例分辨并不直觀。而且餅圖的項(xiàng),一般不要超過(guò)6項(xiàng)。6項(xiàng)后建議用柱形圖更為直觀。
(7)、復(fù)合餅圖:一般是對(duì)某項(xiàng)比例的下一步分析。
(8)、母子餅圖:可直觀地分析項(xiàng)目的組成結(jié)構(gòu)與比重。例如上次短信支付能力用戶中,沒(méi)有第3方支付能力的用戶,中間有X%比例是沒(méi)銀行卡,X%比例是沒(méi)微信支付賬號(hào)等。
圖表不必太花哨,一個(gè)表說(shuō)一個(gè)問(wèn)題就好。用友好的可視化圖表,節(jié)省閱讀者的時(shí)間,也是對(duì)閱讀者的尊重。
有一些數(shù)據(jù),辛辛苦苦做了整理和分析,最后發(fā)現(xiàn)對(duì)結(jié)論輸出是沒(méi)有關(guān)系的,雖然做了很多工作,但不能為了體現(xiàn)工作量而堆砌數(shù)據(jù)。
在展現(xiàn)的過(guò)程中,請(qǐng)注明數(shù)據(jù)的來(lái)源,時(shí)間,指標(biāo)的說(shuō)明,公式的算法,不僅體現(xiàn)數(shù)據(jù)分析的專業(yè)度,更是對(duì)報(bào)告閱讀者的尊重。
數(shù)據(jù)分析
本文為了講述的清晰一點(diǎn),每一部分的分析可能都會(huì)跑一遍完整的數(shù)據(jù)獲取代碼,這會(huì)產(chǎn)生一些代碼冗余和重復(fù)運(yùn)行,實(shí)際上是不優(yōu)雅的,不過(guò)這只是個(gè)純演示性的示例,重要的是能讓讀者看明白就行了,拋磚引玉。代碼的優(yōu)化和運(yùn)行效率那就又是另外一個(gè)故事了。
下面就開(kāi)始進(jìn)入代碼的是世界吧!
關(guān)于開(kāi)發(fā)者
你誰(shuí)???關(guān)于開(kāi)發(fā)者的名字
首先我們看下作者的數(shù)量情況,一般來(lái)說(shuō)每個(gè)插件都會(huì)有作者名字的,但竟然也會(huì)有寫插件連作者名字都沒(méi)有。沒(méi)名字的插件誰(shuí)知道是什么野路子來(lái)的,用戶也不敢安裝。那我們看看有多少是沒(méi)有名字的,小試牛刀。判斷有沒(méi)有名字的邏輯很簡(jiǎn)單,對(duì)于沒(méi)有作者名字的插件,有author這個(gè)key,但值為空,這樣數(shù)據(jù)jsonlines文件循環(huán)一遍就可以得出了


結(jié)論:
很明顯,即使不用圖表也能肉眼看見(jiàn),99%的WordPress插件都有作者名字。這個(gè)餅圖其實(shí)比較傻也比較丑,沒(méi)啥必要,僅作演示。
誰(shuí)的插件最多?關(guān)于作者的插件數(shù)量
用author這個(gè)key來(lái)分析作者的插件數(shù)量的話,會(huì)有個(gè)問(wèn)題,這個(gè)key里大部分是html代碼形式,還有一部分是直接顯示的文本,或者干脆就是空的,就像上面一步看到過(guò)的樣子,有不少文字處理工作要做。那么我們可以看看另外一個(gè)key?author_profile, 這個(gè)就是開(kāi)發(fā)者在WordPress.og上注冊(cè)的用戶名了,是必須的,也是唯一的,類似這種https://profiles.wordpress.org/brooksx, 所以我們就用這個(gè)做分析吧
首先把所有的author_profiles都取出來(lái),放入一個(gè)列表。保險(xiǎn)起見(jiàn)author_profile把都轉(zhuǎn)換str的格式,然后去掉其中重復(fù)的字段https://profiles.wordpress.org/,這個(gè)不去掉也成,主要是為了下面的圖表展示時(shí)候名字不要那么擁擠

這個(gè)list還是比較大的,有5萬(wàn)多個(gè)元素,所以我們把它轉(zhuǎn)成numpy的array。至于為什么這么做,可以參考一下這篇文章?python學(xué)習(xí)筆記 — python中的list和numpy中的矩陣分析

下一步,把這個(gè)numpy的array扔進(jìn)pandas里進(jìn)行分析

這種形式就相當(dāng)于一個(gè)Excel文件,每行都是一個(gè)作者名字,并不能看出什么東西來(lái)。因?yàn)槲覀円@一步主要是要統(tǒng)計(jì)數(shù)量,也就是count,所以,需要把這個(gè)DataFrame轉(zhuǎn)換成我們需要的形式,按作者計(jì)數(shù)。
pandas 的value_counts()函數(shù)可以對(duì)Series里面的每個(gè)值進(jìn)行計(jì)數(shù)并且排序。value_counts是計(jì)數(shù),統(tǒng)計(jì)所有非零元素的個(gè)數(shù),默認(rèn)以降序的方式輸出Series。如下:

describe函數(shù)(統(tǒng)計(jì)計(jì)數(shù)函數(shù))。describe函數(shù)總結(jié)數(shù)據(jù)集分布的中心趨勢(shì),分散和形狀,不包括NaN值。從下面的結(jié)果可以看出來(lái),一共有27289個(gè)不重復(fù)的開(kāi)發(fā)者,平均每人開(kāi)發(fā)了1.99個(gè)插件,最多的開(kāi)發(fā)了93個(gè)插件。

開(kāi)發(fā)者的插件數(shù)量分布圖
從上面的describe函數(shù)的結(jié)果可以看出一些平均值等數(shù)據(jù),如果想更直觀的顯示呢,那就可以使用散點(diǎn)圖。
散點(diǎn)圖也叫 X-Y 圖,它將所有的數(shù)據(jù)以點(diǎn)的形式展現(xiàn)在直角坐標(biāo)系上,以顯示變量之間的相互影響程度,點(diǎn)的位置由變量的數(shù)值決定。散點(diǎn)圖通常用于顯示和比較數(shù)值,不光可以顯示趨勢(shì),還能顯示數(shù)據(jù)集群的形狀,以及在數(shù)據(jù)云團(tuán)中各數(shù)據(jù)點(diǎn)的關(guān)系。
在我們的例子中,只有一個(gè)維度,所以使用分類散點(diǎn)圖就可以直觀的顯示出同一作者的插件數(shù)量的分步。下圖可以看出大部分大部分作者發(fā)布的插件數(shù)量是1-20個(gè),那些開(kāi)發(fā)了幾十個(gè)插件的大牛真可以說(shuō)是WordPress的死忠粉了,質(zhì)量且不論,光這個(gè)數(shù)量沒(méi)有極大的熱情和勤奮度那是不可能完成的,當(dāng)然,某些數(shù)量比較多的帳號(hào)也有可能是公司化運(yùn)行的WordPress開(kāi)發(fā)公司使用同一個(gè)帳號(hào)發(fā)布的。

對(duì)于一維數(shù)據(jù)的可視化,散點(diǎn)圖僅適用于數(shù)據(jù)量較小的情況;當(dāng)數(shù)據(jù)量稍大時(shí),散點(diǎn)圖就不適用了。
上圖可以看到,該散點(diǎn)圖雖然可以清晰地表示數(shù)據(jù)聚集區(qū)域(20附近),但由于該區(qū)域內(nèi)數(shù)據(jù)點(diǎn)太多,導(dǎo)致點(diǎn)的重合度過(guò)大,從而難以分辨該區(qū)域與其它區(qū)域在聚集度上的差異。為了解決這個(gè)問(wèn)題,可以使用直方圖(Histogram)。
所謂直方圖,就是將數(shù)據(jù)值所在范圍分成若干個(gè)區(qū)間,然后在圖上描畫每個(gè)區(qū)間中數(shù)據(jù)點(diǎn)的個(gè)數(shù)。與散點(diǎn)圖相比,直方圖可以清晰地展示數(shù)據(jù)聚集區(qū)域,以及各區(qū)域之間聚集度的差異。

TOP 10
電影TOP100,金曲10,還有全球小姐,還有年度最美的女人,最性感的男人,各種頒獎(jiǎng)典禮,福布斯……全球大學(xué)排名……榜單這種形式是經(jīng)久不衰的,所以下面就看一下WordPress.org上發(fā)布插件最多的前10名作者的排行吧
上面已經(jīng)獲得了所有開(kāi)發(fā)者的統(tǒng)計(jì)量并排序好了,所以只要取前10個(gè)數(shù)據(jù)就可以了?author_count[:10]。這種圖就是最簡(jiǎn)單的柱狀圖了。

下面就是 wordPress.org 上發(fā)布的插件數(shù)量前10名的作者的鏈接
namepluginsprofilewebsite
Peter Shaw93https://profiles.wordpress.org/shawfactorhttps://shawfactor.com/
Scott Reilly74https://profiles.wordpress.org/coffee2codehttp://coffee2code.com/
Algoritmika Ltd69https://profiles.wordpress.org/algoritmikahttps://wpfactory.com
YITH61https://profiles.wordpress.org/yithemeshttps://yithemes.com/
DeMomentSomTres54https://profiles.wordpress.org/marcqueralthttp://DeMomentSomTres.com
Gopi Ramasamy54https://profiles.wordpress.org/gopiplushttp://www.gopiplus.com/work/2010/07/18/youtube-with-fancy-zoom/
Access Keys53https://profiles.wordpress.org/access-keyshttps://access-keys.com
WP OnlineSupport52https://profiles.wordpress.org/wponlinesupporthttps://www.wponlinesupport.com
GamiPress50https://profiles.wordpress.org/rubengchttps://gamipress.com/
BestWebSoft48https://profiles.wordpress.org/bestwebsofthttps://bestwebsoft.com/
你哪兒的?關(guān)于開(kāi)發(fā)者的地域
這一part有點(diǎn)麻煩,就目前的數(shù)據(jù)集來(lái)說(shuō),沒(méi)有區(qū)域這個(gè)屬性,要想獲得話,需要進(jìn)行二次爬取或二次處理,簡(jiǎn)單想了一下,有幾個(gè)思路:
根據(jù) https://profiles.wordpress.org 上開(kāi)發(fā)者自己填寫的Location來(lái)判斷,但是不是所有的人都會(huì)填寫Location
根據(jù)開(kāi)發(fā)者的網(wǎng)站的域名信息來(lái)判斷,但這個(gè)也不一定準(zhǔn)確,比如有的會(huì)隱藏whois信息,有的在國(guó)外注冊(cè)的也不一定就是該國(guó)人
根據(jù)開(kāi)發(fā)者的網(wǎng)站的服務(wù)器ip地址來(lái)判斷,同上道理,也不準(zhǔn)確
nlp(自然語(yǔ)言處理)來(lái)判斷。。。如果名字是中文的就判斷為中國(guó)的,其他的還真不一定好判斷
所以,就是很蛋疼,就不弄了,其實(shí)不用什么分析,用腳趾頭想想也肯定是英語(yǔ)國(guó)家的開(kāi)發(fā)者更多更活躍。。。這里可以看下WordPress的創(chuàng)始人Matt Mullenweg在2016年WordCamp大會(huì)上分享的一個(gè)全球開(kāi)發(fā)者數(shù)量分布,
可以看出,歐洲美國(guó)一片紅啊,WordPress的開(kāi)發(fā)者非常活躍,開(kāi)源的社區(qū)和生態(tài)很強(qiáng)大,背靠著WordPress能養(yǎng)活很多中小型開(kāi)發(fā)、咨詢公司。中國(guó)的開(kāi)發(fā)者也有不少,目測(cè)廣州深圳的居多。Matt還調(diào)侃了一下俄羅斯 “What’s up Russia?”,呵呵

參考鏈接
一維數(shù)據(jù)可視化:直方圖(Histogram)
數(shù)據(jù)分析8個(gè)流程與常用7個(gè)思路
未完待續(xù)
不知不覺(jué)又寫了這么多長(zhǎng)。。。好像也分析出個(gè)毛線出來(lái),就算作為一個(gè)Python數(shù)據(jù)分析和數(shù)據(jù)可視化的的入門介紹吧。下一篇繼續(xù)分析一下插件的下載量、分類等其他的維度