转自丘壑博客 转自注明出处
在之前的文章中,我们已经把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 最强大最全能的最专业的SEO插件
Akismet Anti-Spam 是WordPress默认安装的插件,目标是帮助网站来过滤垃圾留言
Jetpack by WordPress.com 是WORDPRESS.com官方出品的怪兽级插件,这个插件里面集成了30个左右的网站常用的辅助功能
Contact Form 7史上最受欢迎的WordPress表单插件
WooCommerce WordPress上的电子商务插件之王 , 电子商务世界的皇冠上的宝石,
WP Super Cache 是WordPress 官方开发人员Donncha 开发,是当前最高效也是最灵活的WordPress 静态缓存插件。
WordPress Importer 官方产品的WorPress数据导入插件
下载量的区间分布
我们的数据文件中,下载量是精确到个位的,其实有时候并不需要这么精细的粒度,比如在分类汇总的时候就可以使用更粗的粒度。下面来看看插件下载量的区间分布,把具体的下载量的数据分个等级,拉平到一个居间内,看看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 法则、关键少数法则、八二法则)
还可以看出一个结论,下载量在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、性能、安全、备份、电商、内容建设等等是最大的刚需。下一次,将就这几方面做一些优秀插件的推荐,敬请期待!