用Python分析5萬+個WordPress插件

轉自丘壑博客,轉載註明出處數組

bestscreenshot.com/data-analys…


在以前的文章中,咱們已經把WordPress.org上的全部插件信息爬取下來,並分析了一些關於插件開發者的結論。本次是針對是插件的信息作一些簡單分析。安全

分析插件的維度也有很多,好比下載量、安裝量、tag/分類,甚至代碼自己。針對每一個維度也能提出一些有意思的問題角度。數據結構

總下載量是多少?下載量前十名是哪些?哪些分類的插件量下載量比較大?下載量和評分、插件描述文字之間是否是有什麼關係?哪些插件是版本帝,版本更新比較快?這些均可以是一些角度,雖然未必有什麼實際意義,也算是「Just for fun」 吧。wordpress

關於代碼自己的分析,國外也有比較專業的網站和團隊在作,好比有專門作WordPress插件的安全分析的團隊 WPWhiteSecurity.com , 也有專門分析一個網站所使用的各類插件、技術棧的專業團隊。總之,能夠分析的內容是不少的。本次僅作一些簡單的分析,也是拋磚引玉。函數

關於插件下載量

插件下載量總覽

一碗米飯總共有多少粒米?這個總和數據的參考意義其實不大。同理,全部插件的全部歷史下載量總和,只能算一個比較好玩的數據,能夠做爲一個WordPress市場份額的感性指標。這個數據很好計算,直接使用 pandas.DataFrame.sum 便可,sum會返回指定軸上值的和.性能

pandas.DataFrame.sum

簡單加總一下能夠看到,WordPress的插件被下載了將近30億次,天文數字。做爲一個參照,能夠看下WordPress各個版本的下載總量:1478295868 ,14億次網站

WordPress各個版本的歷史下載量

召喚出老朋友describe查看以後,能夠清晰的看出,總共54421個插件,每一個插件的平均下載次數爲53,849次,最少的爲0次,最多的爲1.5億次,WordPress的插件下載量仍是很是活躍的。google

下載量Top 10的插件

獲取下載量的排行,能夠直接用nlargest來進行排序。nlargest()的優勢就是能一次看到最大的幾行,並且不須要排序,索引仍是按照以前的索引。lua

pandas.DataFrame.nlargest
下載最多的WordPress插件

前10個裏面有兩個是SEO相關的,互聯網上在流量獲取成本愈來愈高,看來SEO確實仍是剛需;還有著名的電商插件WooCommerce,可見WordPress也在CMS以外成爲了中小企業自建電商平臺的主要選擇。下面就是插件下載量前十名的列表,都是明星插件,沒用過的也基本都聽過,耳熟能詳的了插件

Yoast SEO

Akismet Anti-Spam

Jetpack by WordPress.com

Wordfence Security – Firewall & Malware Scan

Contact Form 7

WooCommerce

All in One SEO Pack

Google Analytics Dashboard Plugin for WordPress by MonsterInsights

WP Super Cache

WordPress Importer

下載量的區間分佈

咱們的數據文件中,下載量是精確到個位的,其實有時候並不須要這麼精細的粒度,好比在分類彙總的時候就可使用更粗的粒度。下面來看看插件下載量的區間分佈,把具體的下載量的數據分個等級,拉平到一個居間內,看看0-1000的有多少,1000-10000之間的有多少等等。

一種方式是把下載量都除以10,用倍數來劃分區間,比較麻煩

最方便的方式就是直接使用對數函數,而後把對數值向下取整,就是各自的區間了。主要用到如下幾個函數:

np.floor 返回不大於輸入參數的最大整數。 即對於輸入值 x ,將返回最大的整數 i ,使得 i <= x。 注意在Python中,向下取整老是從 0 舍入。

np.log(a) np.log10(a) np.log2(a) : 計算各元素的天然對數、十、2爲底的對數 。numpy的強大之處是能夠直接對數組的全部元素進行計算。

這裏有一個地方須要注意下,有的插件的下載量是0,根據對數的定義:

若是a的x次方等於N(a>0,且a不等於1),那麼數x叫作以a爲底N的對數,記做x=logaN。其中,a叫作對數的底數,N叫作真數。

0沒有對數,在numpy中取0的對數,會獲得-inf(Infinity(無窮大))那麼處理辦法也有幾種:

  • 刪除相關數據:若是不影響總體數據分析,能夠考慮去除相應行和列,直接把下載量爲0的排除掉。
  • 數值替換:
    • 事先替換:把零值替換成爲一個「很是小的非零值」再取對數
    • 過後替換:先把全部數據都取對數,而後把-inf所有替換爲0

每種方法的代碼略有不一樣,這裏我採用的是事先刪除的方式,由於下載爲零的插件只有幾個而已,並不影響分析。下面是具體代碼:

基於range這個數據,能夠很方便的把插件按下載量幾個檔次:個、10、百、千、萬、十萬、百萬、千萬、億。按range彙總看下每一個檔次的插件有多少個:

每一個下載量區間的插件數量

肉眼能夠看出,數量最多的一檔幾種在range 3,也就是1,000-10,000 這一檔。能到達7(千萬級)、8(億級)這兩個級別的實屬百裏挑一。

進一步看一下,range 4(萬級)以上的插件數量總共佔了多少呢?

看出什麼來了嗎?典型的二八法則啊!20%的插件佔了總下載量的97% !

帕累托法則(英語:Pareto principle,也被稱爲 80/20 法則、關鍵少數法則、八二法則[1] 指出,約僅有20%的變因操縱着80%的局面。也就是說:全部變量中,最重要的僅有20%,雖然剩餘的80%佔了多數,控制的範圍卻遠低於「關鍵的少數」

還能夠看出一個結論,下載量在range 5(十萬級)的插件總數佔了4%,也就是說能進入十萬級俱樂部已經算是很成功的插件了。

下載量的與其餘因素的關係

上面咱們看到了一些插件下載量的整體概覽,旱的旱死,澇的澇死,5萬多個插件的下載量是很不平均,這也是很正常的,取決於不少方面的因素,好比功能是否是剛需、代碼質量、營銷推廣、技術支持等等因素,也有正規軍和業餘愛好者之分。這些都是一些很差量化的東西,不過也有一些數據能夠結合起來看看,是否是會對下載量有必定的影響,好比能夠把這幾個數據取出來一塊兒分析:

  • 「rating」:數值類型,插件的評分
  • 「num_ratings」:數值類型, 評分的人數
  • 「support_threads」: 數值類型,該插件在WordPress.org上的用戶求助帖子數量
  • 「support_threads_resolved」: 數值類型,用戶的帖子被解決的數量
  • "description":字符串類型,插件的描述文字,這個描述的字數做爲數值其實也能夠做爲一個指標

評分還有更新的指標,好比打5星的多少人,打4星的多少人等等,爲了簡化一點,評分只取一個打分人數便可,這個基本能反映出用戶的反饋度;一樣的原理,帖子也只取一個問題解決數量便可,這個能反映出開發者對用戶問題的技術支持的響應度。因此,一共有四個維度:下載量、打分數、問題解決數、描述文字字數。這些維度各自之間的數據量級差異太大,從0到億都有,直接拿來作圖基本上什麼都看不到,因此所有把他們都取對數,縮小到同一個刻度。那麼這四個數據之間有什麼關係呢?具體請看代碼和圖表:

下載量、打分數、問題解決數、描述文字字數的兩兩關係

這是一個信息量極大的散點圖矩陣,一行簡單的代碼就可以讓咱們獲得整個圖,使人驚歎。還能夠根據須要再作進一步的美化和調整,具體能夠參考這篇文章:如何利用散點圖矩陣進行數據可視化

散點圖矩陣會構建兩種基本圖形:直方圖和散點圖。位於對角線位置的直方圖讓咱們看到了每個變量的分佈,而對角線上下的散點圖則展現了變量兩兩之間的關係。例如,第一列幾個散點圖就展現了 下載量(downloaded) 和 評分數、問題解決數、描述字數 之間的關係。能夠看出下載量越大的插件打分人數越高、問題解決數也較高,而插件描述字數和下載量之間就看不出什麼特別明顯的關係,也有下載量很高但描述不多的,也有描述文字寫的不少但下載量寥寥的。

關於插件分類

最後,看一下插件的分類的狀況。WordPress的插件沒有明確的用途目錄分類,使用的是tag機制,是一種比較鬆散的內容分類方式,有好處也有不方便之處。

每一個插件都有能夠有不少個tag,爲了統計每一個tag的總下載量,須要作一下數據結構的轉換,代碼以下:

從各個TAG的下載總量和插件數量能夠看出來SEO、性能、安全、備份、電商、內容建設等等是最大的剛需。下一次,將就這幾方面作一些優秀插件的推薦,敬請期待!


Related Posts

相關文章
相關標籤/搜索