用Python分析5万+个WordPress插件

526 阅读9分钟

转自丘壑博客,转载注明出处

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