用Python分析5萬+個WordPress外掛

xodyhu發表於2019-03-22

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

bestscreenshot.com/data-analys…


在之前的文章中,我們已經把WordPress.org上的所有外掛資訊爬取下來,並分析了一些關於外掛開發者的結論。本次是針對是外掛的資訊做一些簡單分析。

分析外掛的維度也有不少,比如下載量、安裝量、tag/分類,甚至程式碼本身。針對每個維度也能提出一些有意思的問題角度。

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

關於程式碼本身的分析,國外也有比較專業的網站和團隊在做,比如有專門做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的外掛下載量還是非常活躍的。

下載量Top 10的外掛

獲取下載量的排行,可以直接用nlargest來進行排序。nlargest()的優點就是能一次看到最大的幾行,而且不需要排序,索引還是按照之前的索引。

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) : 計算各元素的自然對數、10、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這個資料,可以很方便的把外掛按下載量幾個檔次:個、十、百、千、萬、十萬、百萬、千萬、億。按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



相關文章