用Python分析WordPress官网所有插件的开发者信息

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


前言

书接上回,上一篇里我们已经把需要的数据爬下来了。众所周知,数据只有在分析出结论的时候才有价值,不能是为了爬而爬。

数据分析(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数据结构展示一下,一个正常插件的完整有效信息包容如下字段和值,基本上都可以望文生义,没有什么特别复杂奇怪的,后面的分析都是基于这些字段进行的:

用Python分析WordPress官网所有插件的开发者信息

如何处理数据?

整理数据是门技术活,相关工具也特别多,从开源的到各大厂商的都有。不得不承认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的补充,而不是替代物。

用Python分析WordPress官网所有插件的开发者信息

以下列举几个常用的8个图表类型和用途:

(1)、折线图:合适用于随时间而变化的连续数据,例如随时间收入变化,及增长率变化。

(2)、柱型图:主要用来表示各组数据之间的差别。主要有二维柱形图、三维柱形图、圆柱图、圆锥图和棱锥图。如支付宝与微信覆盖率差别。

(3)、堆积柱形图:堆积柱形图不仅可以显示同类别中每种数据的大小,还可以显示总量的大小。例如我们需要表示各个支付方式的人数及总人数时。

(4)、线-柱图:这种类型的图不仅可以显示出同类别的比较,还可以显示出趋势情况。

(5)、条形图:类似于横向的柱状图,和柱状图的展示效果相同,主要用于各项类的比较。

(6)、饼图:主要显示各项占比情况。饼图一般慎用,除非占比区别非常明显。因为肉眼对对饼图的占比比例分辨并不直观。而且饼图的项,一般不要超过6项。6项后建议用柱形图更为直观。

(7)、复合饼图:一般是对某项比例的下一步分析。

(8)、母子饼图:可直观地分析项目的组成结构与比重。例如上次短信支付能力用户中,没有第3方支付能力的用户,中间有X%比例是没银行卡,X%比例是没微信支付账号等。

图表不必太花哨,一个表说一个问题就好。用友好的可视化图表,节省阅读者的时间,也是对阅读者的尊重。

有一些数据,辛辛苦苦做了整理和分析,最后发现对结论输出是没有关系的,虽然做了很多工作,但不能为了体现工作量而堆砌数据。

在展现的过程中,请注明数据的来源,时间,指标的说明,公式的算法,不仅体现数据分析的专业度,更是对报告阅读者的尊重。

数据分析

本文为了讲述的清晰一点,每一部分的分析可能都会跑一遍完整的数据获取代码,这会产生一些代码冗余和重复运行,实际上是不优雅的,不过这只是个纯演示性的示例,重要的是能让读者看明白就行了,抛砖引玉。代码的优化和运行效率那就又是另外一个故事了。

下面就开始进入代码的是世界吧!

关于开发者

你谁啊?关于开发者的名字

首先我们看下作者的数量情况,一般来说每个插件都会有作者名字的,但竟然也会有写插件连作者名字都没有。没名字的插件谁知道是什么野路子来的,用户也不敢安装。那我们看看有多少是没有名字的,小试牛刀。判断有没有名字的逻辑很简单,对于没有作者名字的插件,有author这个key,但值为空,这样数据jsonlines文件循环一遍就可以得出了

用Python分析WordPress官网所有插件的开发者信息用Python分析WordPress官网所有插件的开发者信息

结论:

很明显,即使不用图表也能肉眼看见,99%的WordPress插件都有作者名字。这个饼图其实比较傻也比较丑,没啥必要,仅作演示。

谁的插件最多?关于作者的插件数量

author这个key来分析作者的插件数量的话,会有个问题,这个key里大部分是html代码形式,还有一部分是直接显示的文本,或者干脆就是空的,就像上面一步看到过的样子,有不少文字处理工作要做。那么我们可以看看另外一个key author_profile, 这个就是开发者在WordPress.og上注册的用户名了,是必须的,也是唯一的,类似这种https://profiles.wordpress.org/*sx, 所以我们就用这个做分析吧

首先把所有的author_profiles都取出来,放入一个列表。保险起见author_profile把都转换str的格式,然后去掉其中重复的字段https://profiles.wordpress.org/,这个不去掉也成,主要是为了下面的图表展示时候名字不要那么拥挤

用Python分析WordPress官网所有插件的开发者信息

这个list还是比较大的,有5万多个元素,所以我们把它转成numpy的array。至于为什么这么做,可以参考一下这篇文章 python学习笔记 — python中的list和numpy中的矩阵分析

用Python分析WordPress官网所有插件的开发者信息

下一步,把这个numpy的array扔进pandas里进行分析

用Python分析WordPress官网所有插件的开发者信息

这种形式就相当于一个Excel文件,每行都是一个作者名字,并不能看出什么东西来。因为我们要这一步主要是要统计数量,也就是count,所以,需要把这个DataFrame转换成我们需要的形式,按作者计数。

pandas 的value_counts()函数可以对Series里面的每个值进行计数并且排序。value_counts是计数,统计所有非零元素的个数,默认以降序的方式输出Series。如下:

用Python分析WordPress官网所有插件的开发者信息

describe函数(统计计数函数)。describe函数总结数据集分布的中心趋势,分散和形状,不包括NaN值。从下面的结果可以看出来,一共有27289个不重复的开发者,平均每人开发了1.99个插件,最多的开发了93个插件。

用Python分析WordPress官网所有插件的开发者信息

开发者的插件数量分布图

从上面的describe函数的结果可以看出一些平均值等数据,如果想更直观的显示呢,那就可以使用散点图。

散点图也叫 X-Y 图,它将所有的数据以点的形式展现在直角坐标系上,以显示变量之间的相互影响程度,点的位置由变量的数值决定。散点图通常用于显示和比较数值,不光可以显示趋势,还能显示数据集群的形状,以及在数据云团中各数据点的关系。

在我们的例子中,只有一个维度,所以使用分类散点图就可以直观的显示出同一作者的插件数量的分步。下图可以看出大部分大部分作者发布的插件数量是1-20个,那些开发了几十个插件的大牛真可以说是WordPress的死忠粉了,质量且不论,光这个数量没有极大的热情和勤奋度那是不可能完成的,当然,某些数量比较多的帐号也有可能是公司化运行的WordPress开发公司使用同一个帐号发布的。

用Python分析WordPress官网所有插件的开发者信息

对于一维数据的可视化,散点图仅适用于数据量较小的情况;当数据量稍大时,散点图就不适用了。
上图可以看到,该散点图虽然可以清晰地表示数据聚集区域(20附近),但由于该区域内数据点太多,导致点的重合度过大,从而难以分辨该区域与其它区域在聚集度上的差异。为了解决这个问题,可以使用直方图(Histogram)。

所谓直方图,就是将数据值所在范围分成若干个区间,然后在图上描画每个区间中数据点的个数。与散点图相比,直方图可以清晰地展示数据聚集区域,以及各区域之间聚集度的差异。

用Python分析WordPress官网所有插件的开发者信息

TOP 10

电影TOP100,金曲10,还有全球小姐,还有年度最美的女人,最性感的男人,各种颁奖典礼,福布斯……全球大学排名……榜单这种形式是经久不衰的,所以下面就看一下WordPress.org上发布插件最多的前10名作者的排行吧

上面已经获得了所有开发者的统计量并排序好了,所以只要取前10个数据就可以了 author_count[:10]。这种图就是最简单的柱状图了。

用Python分析WordPress官网所有插件的开发者信息

下面就是 wordPress.org 上发布的插件数量前10名的作者的链接

name plugins profile website
Peter Shaw 93 https://profiles.wordpress.org/shawfactor https://shawfactor.com/
Scott Reilly 74 https://profiles.wordpress.org/coffee2code http://coffee2code.com/
Algoritmika Ltd 69 https://profiles.wordpress.org/algoritmika https://wpfactory.com
YITH 61 https://profiles.wordpress.org/yithemes https://yithemes.com/
DeMomentSomTres 54 https://profiles.wordpress.org/marcqueralt http://DeMomentSomTres.com
Gopi Ramasamy 54 https://profiles.wordpress.org/gopiplus http://www.gopiplus.com/work/2010/07/18/youtube-with-fancy-zoom/
Access Keys 53 https://profiles.wordpress.org/access-keys https://access-keys.com
WP OnlineSupport 52 https://profiles.wordpress.org/wponlinesupport https://www.wponlinesupport.com
GamiPress 50 https://profiles.wordpress.org/rubengc https://gamipress.com/
BestWebSoft 48 https://profiles.wordpress.org/bestwebsoft https://bestwebsoft.com/

你哪儿的?关于开发者的地域

这一part有点麻烦,就目前的数据集来说,没有区域这个属性,要想获得话,需要进行二次爬取或二次处理,简单想了一下,有几个思路:

  • 根据 https://profiles.wordpress.org 上开发者自己填写的Location来判断,但是不是所有的人都会填写Location
  • 根据开发者的网站的域名信息来判断,但这个也不一定准确,比如有的会隐藏whois信息,有的在国外注册的也不一定就是该国人
  • 根据开发者的网站的服务器ip地址来判断,同上道理,也不准确
  • nlp(自然语言处理)来判断。。。如果名字是中文的就判断为中国的,其他的还真不一定好判断

所以,就是很蛋疼,就不弄了,其实不用什么分析,用脚趾头想想也肯定是英语国家的开发者更多更活跃。。。这里可以看下WordPress的创始人Matt Mullenweg在2016年WordCamp大会上分享的一个全球开发者数量分布,

可以看出,欧洲美国一片红啊,WordPress的开发者非常活跃,开源的社区和生态很强大,背靠着WordPress能养活很多中小型开发、咨询公司。中国的开发者也有不少,目测广州深圳的居多。Matt还调侃了一下俄罗斯 “What’s up Russia?”,呵呵

用Python分析WordPress官网所有插件的开发者信息

参考链接

一维数据可视化:直方图(Histogram)

数据分析8个流程与常用7个思路

未完待续

不知不觉又写了这么多长。。。好像也分析出个毛线出来,就算作为一个Python数据分析和数据可视化的的入门介绍吧。下一篇继续分析一下插件的下载量、分类等其他的维度

上一篇:『CUDA C编程权威指南』第二章编程题选做


下一篇:《网站情感化设计与内容策略》一10.3 研究和评价