自己动手做词云
By 青衣极客 Blue Geek In 2020-01-21
很多场合使用词云的方式展示大数据信息,给人的第一印象就是很有科技感的样子。没有类似经验的朋友或许还以为这是什么高科技,其实制作起来却很简单,前提是只要稍懂一点python语言。当然使用其他的工具也可以制作,这里介绍一个简单易用的python模块wordcloud,直接可以生成中英文词云图片,让你的报告突然变得高大上。
1. 英文词云
英语文章中的单词已经天然地使用空格分隔开了,可以直接进行词云的制作。这里以《傲慢与偏见》的文本为例来制作其词云图像。首先从文本文件中读取所有的小说单词,然后就可以创建wordcloud模块中的WordCloud对象,并指定背景和图像大小。最后调用该对象的generate方法就可以产生词云图像了。这样说起来是不是很简单,大家可以运行以下下面的例程试试看。
import matplotlib
%matplotlib notebook
import matplotlib.pyplot as plt
from wordcloud import WordCloud
with open('../data/bg65/Pride-and-Prejudice-Jane-Austen.txt', 'r') as fid:
text = fid.read()
wc = WordCloud(background_color='white', width=1024, height=1024, margin=4)
wc = wc.generate(text)
plt.imshow(wc)
plt.axis('off')
wc.to_file('../output/bg65/wc_en.png')
<IPython.core.display.Javascript object>
<wordcloud.wordcloud.WordCloud at 0x11d3f5f10>
我还没看过这本小说,不过看了一下简介,女主角伊丽莎白和男主角达西的名字正好就在这词云图上。看来词云果然是名不虚传,对于从统计尺度上抓取最主要的信息是一个很不错的工具。
2. 中文词云
大家是不是觉得中文词云生成起来跟英文词云的一样简单呢?其实还是稍有一点差别的,原因就在于中文词语直接没有明显的分割标志符。所以我们需要先借助分词工具将文本中的词语且分开,然后才能使用wordcloud。直接使用wordcloud还是不行,因为中文并没有内置的默认字体,所以需要下载一个中文的字体SimSun.ttf。这两个辅助的工具准备好以后就可以制作中文版的词云了。这里以《红楼梦》的文本为例来创建词云图像。以下给出中文词云生成的示例,大家可以运行试试,获取中文词云图像就在咫尺。
import jieba
# jieba分词
with open('../data/bg65/红楼梦.txt', 'r') as fid:
text = fid.read()
text = ' '.join(jieba.cut(text))
# 生成词云
cnwc = WordCloud(
background_color='white', width=1024, height=1024,
margin=4, font_path='../data/bg65/SimSun.ttf')
cnwc = cnwc.generate(text)
plt.figure()
plt.imshow(cnwc)
plt.axis('off')
cnwc.to_file('../output/bg65/wc_cn.png')
1501702
<IPython.core.display.Javascript object>
<wordcloud.wordcloud.WordCloud at 0x12d3ba950>
从以上生成的小说词云图看出,小说的主角宝玉、凤姐、贾母、王夫人、黛玉和宝钗都清晰可见。不知道小说迷有没有考虑到这个特殊的维度来观察这部小说,不过这样一看倒是别有一番滋味。
使用python的wordcloud模块可以轻松生成文本的词云图像,不仅在展示信息时提供了一种更加具有神秘科技的美感,而且可以从一个不一样的维度观察、分析和解读我们感兴趣的东西。说到这里,不得不感谢wordcloud这个模块的开发者,免费为我们提供了一个如此简单好用的工具。

COMMENT
博客评论区功能由Github Issue提供,提交Issue时请以本文标题为话题。
"BG65-自己动手做词云"