Python小应用系列之数据可视化之用Python制作词云图

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」。


文章作者: &娴敲棋子&
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 &娴敲棋子& !
评论
 上一篇
Python排错集之WordCloud模块的正确“打开方式” Python排错集之WordCloud模块的正确“打开方式”
要想正常使用WordCloud模块,有好多坑需要规避,本篇就来告诉大家WordCloud模块的正确“打开方式”。
下一篇 
Python小应用系列之装第三方库遇Error:C++ 14.0 is required. Python小应用系列之装第三方库遇Error:C++ 14.0 is required.
本文可以解决在安装第三方库时遇到的C++错误,无论所需的C++版本是什么,解决方案是通用的。
  目录