数据可视化之利用Python制作词云图
制作词云图
-
- 一.词云图介绍
- 二.wordcloud方法
- 二. stylecloud方法
一.词云图介绍
从视觉效果上讲,词云图是一种展示 文本数据的方式。它类似于一种彩色图形,在这种图形中词汇像一只飘浮在空中的雲一样排列起来。相较于其他用于表现数值型数据的传统图表形式而言,在这种情况下我们可以清晰地看出大量的文字信息是如何被呈现出来的。在这个过程中每一个词语的重要程度可以通过字体大小或者颜色来进行区分因此这种视觉化的方式可以帮助我们快速了解某一特定语料中各个词语出现频率的情况(即所谓的关键词分布)。通过不同的颜色和大小组合能够进一步体现出不同层次上的重要程度差异从而为读者提供更为直观的信息传达效果。
在多个领域中(如电影、视频、微博等),词云图被广泛应用进行评论分析与文本分析;此外还包括书籍、报告、商品信息以及疫情舆论等多种类型的数据分析工作。通过采用词云图工具进行数据可视化处理后,在呈现效果上具有显著的优势。




本文旨在详细讲解两类生成词云图的方法,即 wordcloud 和 stylecloud 。请确保已安装相关代码库。
pip install wordcloud
pip install wordcloud
AI写代码
二.wordcloud方法
Wordcloud被认为是最流行的词云生成工具之一。它易于使用且操作便捷,在掌握各个参数的操作方法之前掌握其基本功能至关重要。确实如此!看来参数数量的确不少呢(。•̀ᴗ-)✧

不过也无需担心,并非所有参数都需要自行配置,请根据个人需求进行定制化设置。以下是《少年中国说》作为文本的代码示例:
import matplotlib.pyplot as plt #数据可视化
import jieba #词语切割
import wordcloud #分词
from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS #词云,颜色生成器,停止词
import numpy as np #科学计算
from PIL import Image #处理图片
def ciyun():
with open('少年中国说.txt','r',encoding='gbk') as f: #打开新的文本转码为gbk
textfile= f.read() #读取文本内容
wordlist = jieba.lcut(textfile)#切割词语
space_list = ' '.join(wordlist) #空格链接词语
#print(space_list)
backgroud = np.array(Image.open('test1.jpg'))
wc = WordCloud(width=1400, height=2200,
background_color='white',
mode='RGB',
mask=backgroud, #添加蒙版,生成指定形状的词云,并且词云图的颜色可从蒙版里提取
max_words=500,
stopwords=STOPWORDS.add('老年人'),#内置的屏蔽词,并添加自己设置的词语
font_path='C:\Windows\Fonts\STZHONGS.ttf',
max_font_size=150,
relative_scaling=0.6, #设置字体大小与词频的关联程度为0.4
random_state=50,
scale=2
).generate(space_list)
image_color = ImageColorGenerator(backgroud)#设置生成词云的颜色,如去掉这两行则字体为默认颜色
wc.recolor(color_func=image_color)
plt.imshow(wc) #显示词云
plt.axis('off') #关闭x,y轴
plt.show()#显示
wc.to_file('test1_ciyun.jpg') #保存词云图
def main():
ciyun()
if __name__ == '__main__':
main()
AI写代码
需要注意的是,在制作中文词云图的过程中,
第一条是需明确对应字体文件名等信息。
在C盘上存在一些中文字体文件名。
具体操作方法是将字体文件复制至桌面上即可查看对应的英文名称。
第二条是关于禁用词或停用词(stopwords)的具体设定。
分 word 时应剔除助 体格 介 体格 连 体格 语气 体格 及标点符号等若干没有实际意义 的 体格 ,这些 常用 的停用 体格 可以通过网络渠道 自行 获取 。此外还需自行构建一个专门的禁用词汇表 ,用于剔除那些在文本中无实际意义 的 体格 。例如小笨聪建议采用以下方法:
分 word 时应剔除助 体格 介 体格 连 体格 连接符 及标点符号等若干没有实际意义 的 单字词汇 ,这些 常用 的停用 单字 可以通过网络渠道 自行 获取 。此外还需自行构建一个专门的禁用词汇表 ,用于剔除那些在文本中无实际意义 的 单字词汇 。例如小笨聪建议采用以下方法:
def read_stopword(fpath):
# 读取中文停用词表
with open(fpath, 'r', encoding='utf-8') as file:
stopword = file.readlines()
return [word.replace('\n', '') for word in stopword]
#加载多个停用词表
path = 'E:\WeChatPublicNumber\python\词云图\stopwords'
# 前两个停用词表是网上下载的,第三个是自己设置的
name_list = ['中文停用词.txt', '哈工大停用词.txt', 'stopword.txt']
stop_word = []
for fname in name_list:
stop_word += read_stopword(os.path.join(path, fname))
stop_word = set(stop_word)
AI写代码
那么我们看一下词云图效果:

总体而言略显平淡,在制作带有蒙版背景的词云图时,需要特别强调蒙版的选择。建议尽量选择主体部分及其周边区域具有明显区分度的图片,并采用明亮且富有层次感的颜色方案以达到较为美观的效果。
二. stylecloud方法
Stylecloud 是一个 Python 库,在广泛使用的 wordcloud 库的基础上增添了一些实用的功能,从而生成具有独特风格的词云图。以下是其主要特点:
- 采用高级调色板技术
- 基于Font Awesome 5.11.2的技术支持词云生成不同大小的图标形状
- 采用直接梯度技术,并支持从文本文件或CSV文件中读取数据
- 提供命令行接口
styleword 生成词云主要依赖gen_stylecloud() 方法,其诸多特性包含在方法参数中。

仍然以《少年中国说》为文本内容进行代码示例:
import jieba
import stylecloud
def ciyun():
with open('少年中国说.txt','r',encoding='gbk') as f:
word_list = jieba.cut(f.read())
result = " ".join(word_list) #分词用空格隔开
stylecloud.gen_stylecloud(
text=result, # 上面分词的结果作为文本传给text参数
size=512,
font_path='msyh.ttc', # 字体设置
palette='cartocolors.qualitative.Pastel_7', # 调色方案选取,从palettable里选择
gradient='horizontal', # 渐变色方向选了垂直方向
icon_name='fab fa-weixin', # 蒙版选取,从Font Awesome里选
output_name='test_ciyun.png') # 输出词云图
def main():
ciyun()
if __name__ == '__main__':
main()
AI写代码


观察效果如何?相较于WordCloud相比更具视觉吸引力。主要归因于StyleCloud中两个关键参数的选择:一是蒙版选用 icon_name;二是调色方案源自 palette*。其中蒙板采用了Font Awesome 5中的图标集合,并且包含成千上万种不同风格的图标。其配色方案源自palettable库的选择
使用字体 awesome 的平台:https://fa5.dashgame.com/#/图标;调色板工具平台:https://jiffyclub.github.io/palettable/
当然除了之前提到的方法之外 生成方式不只两种 其中一种途径是借助 Pyecharts 工具来实现 还有许多无需编程即可快速生成词云图的网站 具体采用哪种方案取决于个人偏好 请记住使用词云图的根本目的是为了更好地展示你的数据
这就是借助 Python 制作或生成词云图的相关内容,
微信公众号'学编程的金融客'回复后端‘词云图’即可下载或获取源代码和图片。
欢迎关注微信公众号:学编程的金融客,作者:小笨聪
