用Python分析WordPress官網所有外掛的開發者資訊

xodyhu發表於2019-03-09

轉自丘壑部落格,轉載註明出處

前言

書接上回,上一篇裡我們已經把需要的資料爬下來了。眾所周知,資料只有在分析出結論的時候才有價值,不能是為了爬而爬。

資料分析(Data Analysis)是指用適當的統計分析方法對收集來的大量資料進行分析,提取有用資訊和形成結論而對資料加以詳細研究和概括總結的過程。

在資料分析前要找到分析的目標,帶著問題去分析,也就是了解前期資料分析的需求。在產品運營過程中,資料分析具有極其重要的戰略意義,是產品優化和產品決策的核心大腦。因此做好資料分析,是產品運營中最重要的環節之一。如果程式設計師能有一些資料分析的意識,懂一些資料分析的基本方法,無疑會對自身的職業發展會有很大的幫助。

所以,這一篇裡將講一點很簡單的資料分析的方法,看看能不能得出一些有意思的結論。同樣的,也是為了提供一種思路和方法。

思路

為什麼分析?

首先,你得知道為什麼分析?弄清楚此次資料分析的目的。因為我本身也是一個開發者,所以對WordPress外掛開發者的情況會天然的比較感興趣,也想看看國內外一些優秀的外掛開發者是誰,在做什麼外掛。

實際這次的分析純屬個人興趣,具體這些結論能有什麼用,好像也並沒有什麼卵用。還有一個原因可能是前段時間學了大量的機器學習資料分析方面的知識,如飢似渴的在YouTube上在各種網站上填鴨式學習,腦子塞的滿滿的,也想通過這次實驗一下,看看自己是不是真的理解了,而不是說僅僅是為了學習而學習

需要哪些資料? 如何採集?

資料來源的問題上一篇中已經解決了,不過有一點需要補充一下,是有的外掛可能並沒有在WordPress.org上釋出過,可能就只是在github上或個人網站上提供了一個zip檔案,就好比有的手機app並沒有在各大應用商店上釋出,這種會被遺漏掉,不過無所謂了,這種資料也不好統計到。

資料長什麼樣子?分析的維度是什麼?

在做分析之前,先要簡單的觀察資料的情況,比如他們的屬性個數、屬性類別、缺失值情況等等,對資料有個大概的認識。

上一篇文章中爬取的資料中,我們得到了一個WordPress.org的svn上的所有外掛列表,但其實有很多無效資料,有些外掛在WordPress.org上已經找不到了,並沒有過濾掉,會有很多行這種:

{"error": "Plugin not found."}複製程式碼

要麼在把這些行全部刪除掉,要麼在分析的時候過濾掉,其實完全可以在爬的時候就過濾掉,不管怎麼說自己挖的坑還是要自己填,當然,在資料分析的時候這種情況也是經常會出現的,第一步都需要先把無效資料過濾掉。為了後面方便一點,我把這些行直接刪除掉了。竟然有24685行 “Plugin not found.”。。。刪玩之後還有54421行,這麼一算,和官網的外掛數量也差不多啊。。。

gsed -i '/"Plugin not found."/d' output.jsonl複製程式碼

然後,還需要對資料結構有一個直觀性的瞭解。有必要把json資料結構展示一下,一個正常外掛的完整有效資訊包容如下欄位和值,基本上都可以望文生義,沒有什麼特別複雜奇怪的,後面的分析都是基於這些欄位進行的:

如何處理資料?

整理資料是門技術活,相關工具也特別多,從開源的到各大廠商的都有。不得不承認Excel是個強大工具,很多時候一些簡單的資料分析用Excel就可以很快速方便的完成,如果能熟練掌握和使用資料透視表那就更不得了了。我在工作中也經常用Excel,玩的還算挺溜的,用資料透視表做各種維度的運維資料處理和時間進度安排,也能很好的完成工作。不過好像在程式設計師眼中似乎Office三大套件都挺不受待見的,我以前的一個leader就很不喜歡Excel,搞的我都得偷偷用,真是夠夠的。不知道有一句話說的好嗎,“幹活的累死累活,有成果那又如何,到頭來幹不過寫PPT 的”。其實完全沒有必要對一些工具帶著有色眼鏡看,現在我是一個實用主義者,拿來主義者,能用就行,夠用就行,曾經我也有程式設計師中的那種工具癖好,信奉“工欲善其事必先利其器”,光tm磨刀了,什麼柴都沒砍!題外話了。

本次會用到的是Python的強大的資料分析工具pandas、numpy。這幾個庫都是大名鼎鼎如雷貫耳的了,只要知道Python的人就算沒用過也會多少有所耳聞,相關的書籍和課程也汗牛充棟。初次接觸的朋友可以看看下面這幾本書和教程,值得系統學習(假設你已經有了一點Python的基礎):

這些是一些系統性講解的書,有關更多的類似numpy、pandas資料處理模組的講解,可以自行查閱官網的文件說明。

如何展現和輸出?

資料視覺化也是一個學問,是展示資料的一個非常好的手段,如何用合適的圖表表現?每一種圖表的寓意是什麼? 好的圖表自己會說話。毋庸多言,在Python的世界裡,matplotlib是最著名的繪相簿,它支援幾乎所有的2D繪圖和部分3D繪圖,被廣泛地應用在科學計算和資料視覺化領域。但是介紹matplotlib的中文書籍很少,大部分書籍只是在部分章節中提到了matplotlib的基本用法,因此在內容和深度上都力有不逮。《Python資料視覺化程式設計實戰(第2版)》則是一本專門介紹matplotlib的譯著。70多個方法,輕鬆入門Python視覺化程式設計。

matplotlib是一個開源專案,由John Hunter發起。關於matplotlib的由來,有一個小故事。John Hunter和他研究癲癇症的同事藉助一個專有軟體做腦皮層電圖分析,但是他所在的實驗室只有一份該電圖分析軟體的許可。他和許多一起工作的同事不得不輪流使用該軟體的硬體加密狗。於是,John Hunter便有了開發一個工具來替代當前所使用的軟體的想法。當時MATLAB被廣泛應用在生物醫學界中,John Hunter最初是想開發一個基於MATLAB的版本,但是由於MATLAB的一些限制和不足,加上他本身對Python非常熟悉,於是就有了matplotlib的誕生。創始人John Hunter在12年的時候因為癌症去世了(默哀)

Seaborn是基於matplotlib的Python視覺化庫。 它提供了一個高階介面來繪製有吸引力的統計圖形,可以作出非常漂亮的圖表,見下圖。Seaborn其實是在matplotlib的基礎上進行了更高階的API封裝,從而使得作圖更加容易,不需要經過大量的調整就能使你的圖變得精緻。但應強調的是,應該把Seaborn視為matplotlib的補充,而不是替代物。

ASrJje.png

以下列舉幾個常用的8個圖表型別和用途:

(1)、折線圖:合適用於隨時間而變化的連續資料,例如隨時間收入變化,及增長率變化。

(2)、柱型圖:主要用來表示各組資料之間的差別。主要有二維柱形圖、三維柱形圖、圓柱圖、圓錐圖和稜錐圖。如支付寶與微信覆蓋率差別。

(3)、堆積柱形圖:堆積柱形圖不僅可以顯示同類別中每種資料的大小,還可以顯示總量的大小。例如我們需要表示各個支付方式的人數及總人數時。

(4)、線-柱圖:這種型別的圖不僅可以顯示出同類別的比較,還可以顯示出趨勢情況。

(5)、條形圖:類似於橫向的柱狀圖,和柱狀圖的展示效果相同,主要用於各項類的比較。

(6)、餅圖:主要顯示各項佔比情況。餅圖一般慎用,除非佔比區別非常明顯。因為肉眼對對餅圖的佔比比例分辨並不直觀。而且餅圖的項,一般不要超過6項。6項後建議用柱形圖更為直觀。

(7)、複合餅圖:一般是對某項比例的下一步分析。

(8)、母子餅圖:可直觀地分析專案的組成結構與比重。例如上次簡訊支付能力使用者中,沒有第3方支付能力的使用者,中間有X%比例是沒銀行卡,X%比例是沒微信支付賬號等。

圖表不必太花哨,一個表說一個問題就好。用友好的視覺化圖表,節省閱讀者的時間,也是對閱讀者的尊重。

有一些資料,辛辛苦苦做了整理和分析,最後發現對結論輸出是沒有關係的,雖然做了很多工作,但不能為了體現工作量而堆砌資料。

在展現的過程中,請註明資料的來源,時間,指標的說明,公式的演算法,不僅體現資料分析的專業度,更是對報告閱讀者的尊重。

資料分析

本文為了講述的清晰一點,每一部分的分析可能都會跑一遍完整的資料獲取程式碼,這會產生一些程式碼冗餘和重複執行,實際上是不優雅的,不過這只是個純演示性的示例,重要的是能讓讀者看明白就行了,拋磚引玉。程式碼的優化和執行效率那就又是另外一個故事了。

下面就開始進入程式碼的是世界吧!

關於開發者

你誰啊?關於開發者的名字

首先我們看下作者的數量情況,一般來說每個外掛都會有作者名字的,但竟然也會有寫外掛連作者名字都沒有。沒名字的外掛誰知道是什麼野路子來的,使用者也不敢安裝。那我們看看有多少是沒有名字的,小試牛刀。判斷有沒有名字的邏輯很簡單,對於沒有作者名字的外掛,有author這個key,但值為空,這樣資料jsonlines檔案迴圈一遍就可以得出了

結論:

很明顯,即使不用圖表也能肉眼看見,99%的WordPress外掛都有作者名字。這個餅圖其實比較傻也比較醜,沒啥必要,僅作演示。

誰的外掛最多?關於作者的外掛數量

author這個key來分析作者的外掛數量的話,會有個問題,這個key裡大部分是html程式碼形式,還有一部分是直接顯示的文字,或者乾脆就是空的,就像上面一步看到過的樣子,有不少文書處理工作要做。那麼我們可以看看另外一個key author_profile, 這個就是開發者在WordPress.og上註冊的使用者名稱了,是必須的,也是唯一的,類似這種https://profiles.wordpress.org/brooksx, 所以我們就用這個做分析吧

首先把所有的author_profiles都取出來,放入一個列表。保險起見author_profile把都轉換str的格式,然後去掉其中重複的欄位https://profiles.wordpress.org/,這個不去掉也成,主要是為了下面的圖表展示時候名字不要那麼擁擠

這個list還是比較大的,有5萬多個元素,所以我們把它轉成numpy的array。至於為什麼這麼做,可以參考一下這篇文章 python學習筆記 — python中的list和numpy中的矩陣分析

下一步,把這個numpy的array扔進pandas裡進行分析

這種形式就相當於一個Excel檔案,每行都是一個作者名字,並不能看出什麼東西來。因為我們要這一步主要是要統計數量,也就是count,所以,需要把這個DataFrame轉換成我們需要的形式,按作者計數。

pandas 的value_counts()函式可以對Series裡面的每個值進行計數並且排序。value_counts是計數,統計所有非零元素的個數,預設以降序的方式輸出Series。如下:

describe函式(統計計數函式)。describe函式總結資料集分佈的中心趨勢,分散和形狀,不包括NaN值。從下面的結果可以看出來,一共有27289個不重複的開發者,平均每人開發了1.99個外掛,最多的開發了93個外掛。

開發者的外掛數量分佈圖

從上面的describe函式的結果可以看出一些平均值等資料,如果想更直觀的顯示呢,那就可以使用散點圖。

散點圖也叫 X-Y 圖,它將所有的資料以點的形式展現在直角座標系上,以顯示變數之間的相互影響程度,點的位置由變數的數值決定。散點圖通常用於顯示和比較數值,不光可以顯示趨勢,還能顯示資料叢集的形狀,以及在資料雲團中各資料點的關係。

在我們的例子中,只有一個維度,所以使用分類散點圖就可以直觀的顯示出同一作者的外掛數量的分步。下圖可以看出大部分大部分作者釋出的外掛數量是1-20個,那些開發了幾十個外掛的大牛真可以說是WordPress的死忠粉了,質量且不論,光這個數量沒有極大的熱情和勤奮度那是不可能完成的,當然,某些數量比較多的帳號也有可能是公司化執行的WordPress開發公司使用同一個帳號釋出的。

對於一維資料的視覺化,散點圖僅適用於資料量較小的情況;當資料量稍大時,散點圖就不適用了。
上圖可以看到,該散點圖雖然可以清晰地表示資料聚集區域(20附近),但由於該區域內資料點太多,導致點的重合度過大,從而難以分辨該區域與其它區域在聚集度上的差異。為了解決這個問題,可以使用直方圖(Histogram)。

所謂直方圖,就是將資料值所在範圍分成若干個區間,然後在圖上描畫每個區間中資料點的個數。與散點圖相比,直方圖可以清晰地展示資料聚集區域,以及各區域之間聚集度的差異。

TOP 10

電影TOP100,金曲10,還有全球小姐,還有年度最美的女人,最性感的男人,各種頒獎典禮,福布斯……全球大學排名……榜單這種形式是經久不衰的,所以下面就看一下WordPress.org上釋出外掛最多的前10名作者的排行吧

上面已經獲得了所有開發者的統計量並排序好了,所以只要取前10個資料就可以了 author_count[:10]。這種圖就是最簡單的柱狀圖了。

下面就是 wordPress.org 上釋出的外掛數量前10名的作者的連結

namepluginsprofilewebsite
Peter Shaw93profiles.wordpress.org/shawfactorshawfactor.com/
Scott Reilly74profiles.wordpress.org/coffee2codecoffee2code.com/
Algoritmika Ltd69profiles.wordpress.org/algoritmikawpfactory.com
YITH61profiles.wordpress.org/yithemesyithemes.com/
DeMomentSomTres54profiles.wordpress.org/marcqueraltDeMomentSomTres.com
Gopi Ramasamy54profiles.wordpress.org/gopipluswww.gopiplus.com/work/2010/0…
Access Keys53profiles.wordpress.org/access-keysaccess-keys.com
WP OnlineSupport52profiles.wordpress.org/wponlinesup…www.wponlinesupport.com
GamiPress50profiles.wordpress.org/rubengcgamipress.com/
BestWebSoft48profiles.wordpress.org/bestwebsoftbestwebsoft.com/

你哪兒的?關於開發者的地域

這一part有點麻煩,就目前的資料集來說,沒有區域這個屬性,要想獲得話,需要進行二次爬取或二次處理,簡單想了一下,有幾個思路:

  • 根據 https://profiles.wordpress.org 上開發者自己填寫的Location來判斷,但是不是所有的人都會填寫Location
  • 根據開發者的網站的域名資訊來判斷,但這個也不一定準確,比如有的會隱藏whois資訊,有的在國外註冊的也不一定就是該國人
  • 根據開發者的網站的伺服器ip地址來判斷,同上道理,也不準確
  • nlp(自然語言處理)來判斷。。。如果名字是中文的就判斷為中國的,其他的還真不一定好判斷

所以,就是很蛋疼,就不弄了,其實不用什麼分析,用腳趾頭想想也肯定是英語國家的開發者更多更活躍。。。這裡可以看下WordPress的創始人Matt Mullenweg在2016年WordCamp大會上分享的一個全球開發者數量分佈,

可以看出,歐洲美國一片紅啊,WordPress的開發者非常活躍,開源的社群和生態很強大,背靠著WordPress能養活很多中小型開發、諮詢公司。中國的開發者也有不少,目測廣州深圳的居多。Matt還調侃了一下俄羅斯 “What’s up Russia?”,呵呵

ApFsRH.png

參考連結

一維資料視覺化:直方圖(Histogram)

資料分析8個流程與常用7個思路

未完待續

不知不覺又寫了這麼多長。。。好像也分析出個毛線出來,就算作為一個Python資料分析和資料視覺化的的入門介紹吧。下一篇繼續分析一下外掛的下載量、分類等其他的維度


相關文章