Python小应用系列之数据可视化之用Python制作词云图
0 引言
词云图,也称文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文章的主旨。
1 环境
操作系统:Windows
Python版本:3.7.2
2 模块准备
本文涉及到的Python第三方模块,共计四个:分词模块jieba,文字云模块wordcloud,画图模块matplotlib,用来处理背景图片的模块scipy。这些模块均可通过pip方式进行安装:
pip install jieba
pip install wordcloud
pip install matplotlib
pip install scipy
注:在安装wordcloud时,可能会遇到报错,解决方案见:《装Python第三方库遇Error:C++ 14.0 is required.》
模块的导入:
# 分词模块
import jieba
# 画图模块
import matplotlib.pyplot as plt
# 文字云模块
from wordcloud import WordCloud
# 这是一个处理图像的函数,用于读取并处理背景图片
from scipy.misc import imread
3 实现思路
准备好一份自己需要分析的文本材料,这里选用的是19年两会新鲜出炉的政府工作报告。我们首先得通过jieba模块对文本材料进行分词处理,然后对处理后的材料使用wordcloud文字云模块生成相应的词云图片即可。
当然了你可以选择一个背景图片,并以此为基础生成特定的云图,这时就用到了上面提到的另外两个模块scipy和matplotlib。
好了,思路有了,那就开始实践吧~
4 小试牛刀
小试牛刀章节教你仅用9行代码,来生成一个词云图,先欣赏下最终的效果图。
4.1 效果图
4.2 代码实现
制作云图的思路,上文已作说明,这些就不再赘述了,直接看代码,代码中已添加详细注释说明。
import jieba
import wordcloud
# 读取词源文件
with open("govreport.txt", 'rb') as f:
t = f.read()
# 进行分词
ls = jieba.lcut(t)
# 把分词用空格连起来
txt = ' ' .join(ls)
# 设置词云参数
w = wordcloud.WordCloud(
# 设置字体
font_path = 'SIMYOU.TTF',
# 设置输出的图片宽高像素值
width = 1000, height = 700,
# 设置输出的图片背景色
background_color = 'white')
# 生成词云
w.generate(txt)
# 将图片保存到本地
w.to_file('2019GovReport.png')
除去注释、导入模块占用的两行,剩下仅7行的代码,你来说说Python强大不?
小试牛刀不够牛?上面做出的云图不够完美?那就继续看下去,这里来实现一个定制图案的云图。
5 中试牛刀
我们这里有一张祖国地图,是否可以定制生成一个祖国版图样式的词云图呢?
答案是肯定的,只因为Python太强大,实现思路直接看代码。
5.1 代码实现
# 分词模块
import jieba
# 画图模块
import matplotlib.pyplot as plt
# 文字云模块
from wordcloud import WordCloud
# 这是一个处理图像的函数,读取背景图片
from scipy.misc import imread
# 词源的文本文件
wf = 'govreport.txt'
# 读取文件内容
word_content = open(wf,'r',encoding='utf-8').read().replace('\n','')
# 设置背景图片
img_file = 'China.jpg'
# 解析背景图片
mask_img = imread(img_file)
# 进行分词
word_cut = jieba.cut(word_content)
# 把分词用空格连起来
word_cut_join = " ".join(word_cut)
# 设置词云参数
wc = WordCloud(
# 设置字体
font_path='SIMYOU.TTF',
# 允许最大词汇量
max_words = 2000,
# 设置最大号字体大小
max_font_size = 90,
# 设置使用的背景图片,这个参数不为空时,width和height会被忽略
mask = mask_img,
# 设置输出的图片背景色
background_color = 'white')
# 生成词云
wc.generate(word_cut_join)
# 用于显示图片,需配合plt.show()一起使用
plt.imshow(wc)
# 去掉坐标轴
plt.axis('off')
# 将图片保存到本地
plt.savefig('2019GovReport.jpg')
plt.show()
5.2 效果图
6 总结
是不是又被强大的Python给震撼了?如引言所述,通过生成词云图,对文章中出现频率较高的“关键词”予以视觉化的展现,帮助读者快速领略文章的主旨,既方便又高效!
不过呢,不要高兴地太早,这里给大家暗暗地埋了几颗雷,词云图功能强大实用自不必说,但是若想正常的用起来,除了上面提到的在安装wordcloud模块时会遇到麻烦之外,还有更多的麻烦在等着大家。请关注后续Python排错集的系列文章。
本文所涉及的完整代码详见HGzhao/PythonApps
备注:本篇首发于知识星球「人人都是Pythonista」。