如何用Python做词云?

96
王树义 8b56c3ad ed71 48e0 acab 4324dec38826
3.0 2017.06.01 22:29* 字数 2141

临渊羡鱼,不如退而结网。我们步步为营,从头开始帮助你用Python做出第一张词云图来。欢迎尝试哦!

在大数据时代,你经常可以在媒体或者网站上看到一些非常漂亮的信息图。

例如这个样子。

看过之后你有什么感觉?想不想自己做一张出来?

如果你的答案是肯定的,我们就不要拖延了,现在就开始,做个词云分析图。当然,做为基础的词云图,肯定比不上刚才那两张信息图酷炫。不过不要紧,好的开始是成功的一半。食髓知味,后面你就可以自己升级技能,进入你开挂的成功之路。

网上教你做信息图的教程很多。许多都是利用了专用工具。这些工具好是好,便捷而强大。只是它们功能都太过专一,适用范围有限。今天我们要尝试的,是用通用的编程语言 Python 来做词云。

Python 是一种时下很流行的编程语言。你不仅可以用它做数据分析和可视化,还能用来做网站、爬取数据、做数学题、写脚本替你偷懒……

知道豆瓣吗?它一开始就是用 Python 写的。

在目前的编程语言热度排序里,Python 屈居第四(当然,很多人不同意,所以编程语言的排行榜有许多,你懂的)。但看问题要用发展眼光。随着数据科学的发展,Python 有爆发的趋势。早点儿站上风口,很有益处。

如果你之前没有编程基础,没关系。从零开始,意味着我会教你如何安装Python运行环境,一步步完成词云图。希望你不要限于浏览,而是亲自动手尝试一番。到完成的那一步,你不仅可以做出第一张词云图,而且这还将是你的第一个有用的编程作品。

心动了?那咱们就开始吧。

安装

首先,我们需要安装 Python 运行环境。我专门为你录制了一个视频教程,请点击这个链接查看,并仿照安装。

进行下一步之前,请确保你已经安装好了 Anaconda ,并且已经进入了终端。

请键入以下命令:

pip install wordcloud

如果你用的操作系统是苹果的 macOS ,系统就会提示你先安装 XCode 命令行工具,你按照默认设置一步步进行就可以了。

如果你用的是 Windows,那么为了使用这个词云包,就稍微麻烦一些。好在我为你录制了在 Windows 下用 Python 制作词云的完整视频教程,请点击这个链接查看。

数据

安装了 Python 的运行环境,我们还需要数据。

词云分析的对象,是文本。

理论上讲,文本可以是各种语言的。英文、中文、法文、阿拉伯文……

为了简便,我们这里以英文文本为例。你可以随意到网上找一篇英文文章作为分析对象。我特别喜欢英剧"Yes, minister",所以到维基百科上找到了这部剧的介绍词条。

我把其中的正文文字部分拷贝了下来,存储为一个文本文件,叫做 yes-minister.txt

请你点击这个网址链接,下载压缩包。并且把压缩包解压,将其中的 yes-minister.txt 文件挪动到工作目录 demo 里。

好了,文本数据已经准备好了。开始进入编程的魔幻世界吧!

代码

你会注意到,刚才压缩包里面其实还有一个文件,就是咱们词云绘制的完整代码 ipynb 文件。

不过我建议你还是自己跟着教程做一遍。这样印象更深刻,不是吗?

在命令行下,执行:

jupyter notebook

浏览器会自动开启,并且显示如下界面。

这就是咱们刚才的劳动成果——安装好的运行环境了。我们还没有编写程序,目录下只有一个刚才生成的文本文件。

打开这个文件,浏览一下内容。

回到 Jupyter 笔记本的主页面。我们点击 New 按钮,新建一个笔记本(Notebook)。在 Notebooks 里面,请选择 Python 3 选项。

系统会提示我们输入 Notebook 的名称。程序代码文件的名称,你可以随便起。但是我建议你起一个有意义的名字,将来好方便查找。由于我们要尝试词云,就叫它 wordcloud 好了。

然后就出现了一个空白的笔记本,供我们使用了。我们在网页里唯一的代码文本框里,输入以下3条语句。请务必逐字根据示例代码输入,空格数量都不可以有差别。尤其注意第三行,用4个空格,或者1个 Tab 开始。输入后,按 Shift+Enter 键,就可以执行了。

filename = "yes-minister.txt"
with open(filename) as f:
 mytext = f.read()

没有任何结果啊。

对,因为我们这里没有任何输出动作,程序只是打开了你的 yes-minister.txt 文本文件,把里面的内容都读了出来,存储到了一个叫做mytext 的变量里面。

然后我们尝试显示 mytext 的内容。输入以下语句之后,还是得按 Shift+Enter 键,系统才会实际执行该语句。

mytext

之后的步骤里,也千万不要忘了这一确认执行动作。

显示的结果如下图所示。

嗯,看来 mytext 变量里存储的文本就是我们从网上摘来的文字。到目前为止,一切正常。

然后我们呼唤(import)词云包,利用 mytext 中存储的文本内容来制造词云。

from wordcloud import WordCloud
wordcloud = WordCloud().generate(mytext)

这时程序可能会报警。别担心。警告(warning)不影响程序的正常运行。

此时词云分析已经完成了。你没看错,制作词云的核心步骤只需要这2行语句,而且第一条还只是从扩展包里找外援。但是程序并不会给我们显示任何东西。

说好了的词云呢?折腾了这么半天,却啥也没有,你蒙人吗?!

别激动。输入下面4行语句后,就是见证奇迹发生的时刻了。

%pylab inline
import matplotlib.pyplot as plt
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")

运行结果如图所示:

不用那么兴奋嘛。

你可以在词云图片上单机鼠标右键,用“图片另存为”功能导出。

通过这张词云图,我们可以看到不同单词和词组出现的频率高低差别。高频词的字体明显更大,而且颜色也很醒目。值得说明的是,最显眼的单词 Hacker 并不是指黑客,而是指这部剧的主角之一——哈克首相。

希望你在尝试过程中一切顺利。对自己生成的词云图满意吗?如果你不满意,也不要紧,可以挖掘 wordcloud 软件包的其他高级功能。尝试一下,看自己能不能做出这样的词云图来?

讨论

学完了本方法后,你做出了一张什么样的词云图?除了本文介绍的方法以外,你还知道哪些便捷地制作词云或其他信息图的方式?欢迎留言,分享给大家。我们共同交流讨论。

喜欢请点赞。还可以微信关注和置顶我的公众号“玉树芝兰”(nkwangshuyi)

如果你对数据科学感兴趣,不妨阅读我的系列教程索引贴《如何高效入门数据科学?》,里面还有更多的有趣问题及解法。

玉树芝兰
玉树芝兰
51.0万字 · 117.5万阅读 · 1864人关注