机器学习论文的统计
这是一篇统计IEEE上关于机器学习论文的文章。
我是一个机器学习的新手,一开始我找不到应该读哪些论文,于是我想,干嘛不用python统计一下哪些论文最重要呢?
于是有了这篇文章。
第一步,是获得数据。这一次我选择了IEEE Xplore作为数据来源。这是它的网站界面:
让我们做一个简单的搜索,看看它的网站有什么变化:
我们发现搜索结果看起来是有结构的,很好!让我们再来看看它的HTML结构:
我们发现每一个搜索结果都被包裹在一个div里面,这个div的类是List-results-items。我们还可以看一眼div里面的结构,发现我们关心的几个数据:标题,年份, 作者,引用次数,期刊, 摘要。
我打算写一个python的爬虫,先把网页的源代码扒下来,然后再对源代码进行解析,最后通过不同的HTML Tag取得我们想要的数据。
我一开始尝试使用urllib2进行访问,但获取到的源代码里并没有我想要的东西,于是我意识到这是一个动态网页,我们需要用一些动态网页的包进行访问。什么是动态网页呢? 简单的说,就是部分(或全部)内容是由Javascript生成的。这也解释了为什么一开始用urllib2进行访问不成功的原因,因为urllib2的请求并没有执行JS的能力,所以我们要的论文信息就不会被捕捉到。
讲了这么多,实际有一个叫做selenium的包就能做动态网页的请求。简单地说,selenium是一个为自动化网站测试而开发的程序,它几乎可以在各个方面模拟一个浏览器的行为。Selenium还有一个python的封包,正是我想要的。
安装selenium很简单, 用pip的话:
|
|
用conda的话:
|
|
安装好了之后,打开你最喜欢的python编辑器
下面是一段简单的selenium 代码, 打开一个Firefox浏览器的实例:
|
|
一个新的Firefox浏览器应该会弹出来。
之后,我拟定了四个主题:’Machine Learning’, ‘Deep Learning’, ‘Data Mining’, ‘Neural Network’。我准备扒下IEEE Xplore里面关于这四个主题的所有paper信息。
下面是我的准备工作:
|
|
上面的数字,比如'page_count': 508
, 是在每一页100份论文的前提下,IEEE XPlore的最大页数。
准备工作完成,我们可以开始抓取source了。
|
|
事实证明,动态网页的抓取非常耗时,这里4个topic分别花了我:
主题 | 页数 | 时间 |
---|---|---|
Machine Learning | 508 | 7.29 hr |
Deep Learning | 29 | 0.58 hr |
Data Mining | 847 | 10.72 hr |
Neural Network | 1221 | 9.74 hr |
也就是两天。
不过,拿到的数据量还是非常可喜的,各个主题的源代码加在一起有1.33G左右。
下面,就是分析的工作。我从源代码中发现的数据规律可以在这里应用:
|
|
这样就得到了4个内容很整齐,去掉无关信息的csv文件。
长这样:
值得一提的是,超过1.33G的源代码信息,经过我们的处理之后,每个csv文件只有20MB左右大小。
不由得感叹一句,大数据虽大,但是可能有用的数据其实就那么一点。
接下来,就是分析这些数据里隐藏的信息了。
我有6个目标:
- 列出被引用最多的文章
- 列出被引用最多的作者
- 列出写最多文章的作者
- 列出被引用最多的出版商
- 标题里的词频分析
- 摘要里的词频分析
为了快速地进行分析运算,我打算使用pandas包作为运算工具,matplotlib作为最后的画图工具,下面是我的准备工作:
|
|
画出最多引用的论文
|
|
图:
画出最多引用的作者
|
|
结果如下:
列出写最多产的作者
因为代码和最多引用作者大同小异,所以在下面就不列出来了,有兴趣的朋友可以在文末找到链接。
结果是这样:
有意思的一点是,在Machine Learning领域,前100多产的作者里面,有71位都是华人,但是在前100被引用次数最多的作者里面,只有27位是华人。
列出被引用最多的出版商
标题里的词频分析
我想知道在这二十几万篇论文标题里面出现次数最多的词语是什么。词频很好计算,用我们刚刚的DataFrame,改一下过滤条件,再排个序,就可以做到。
为了把频率以直观的方式表现出来,我选择用 词云 的形式。
Python里有一个专门做词云的包WordCloud, 简单易用。想要知道更多关于使用WordCloud的信息,可以参见我上一篇博客
|
|
|
|
|
|
下面是结果:
Machine Learning:
Data Mining:
Deep Learning:
Neural Networks:
谢绝转载