❤️ Python数据可视化 stylecloud绘制词云图详解 ❤️
文章目录
一
一
1
- 第三部分介绍如何通过Wordcloud库生成相应的词云图。
- 第四部分详细阐述了使用Pyecharts库中的WordCloud功能模块进行词云展示的方法。
- 第五部分列举了相关的参考文献以供进一步了解。
创作不易得,请尊重作者权益,请勿用于商业目的及其他用途,并将对侵权行为进行法律制裁。
一、词云图
- 词云图是一种以呈现高频关键词为宗旨的视觉化展示工具,在设计上巧妙地结合了文字、色彩与图形元素,在视觉效果上具有强烈的冲击力的同时也能传递有价值的信息。
- 词云主要采用"多维度呈现形式"来突出网络文本中频率较高的"核心词汇"。
- 该图表通过筛选出关键信息并进行重点突出,在不完整信息的情况下仍能帮助读者快速抓住主要内容。
- 本文通过对获取到的数据进行了系统性处理,并运用预处理技术完成了对京东商品评论数据的文字分析工作——包括分词统计和结果展示——最终熟悉了制作基础流程。
二、stylecloud库绘制词云
1. stylecloud简介
就我自己而言,在日常运用Python进行词云制作时,默认会选择wordcloud作为主要工具来进行操作。然而,在需要完成可视化过程中绘制其他图表的情况下,则会更倾向于直接使用pyecharts来辅助完成这些任务。而style cloud(即基于wordcloud进行优化改进的一个Python绘图库)则提供了一系列增强功能组合包,并增添了许多实用功能使得用户能够轻松生成独特的、视觉效果出众的词云图表。

安装
pip install stylecloud -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
stylecloud具有以下特点:
支持生成任意尺寸的图标形状,并可使用Font Awesome 5.11.2库获取这些图标。该系统不仅具备高级调色板功能,并可借助palettable库实现这一功能。针对上述调色板设计了直接使用的渐变效果。系统同时支持读取文本文件以及预生成的CSV文件格式,并且这些文件中包含了单词信息和数字编码。此外该软件还附带命令行操作界面。
2. 蒙版图片
影响词云颜值的问题之一就是蒙版图片的生成。
自制的蒙版图片往往会在细节处理上不尽如人意,在设计过程中可能需要手动进行调整。或者在色彩搭配上存在不足的情况下进行优化工作会耗费大量时间与精力。相比而言,StyleCloud则采用了现成的解决方案。
网址链接:https://fontawesome.com/license/free
位于stylecloud \ static文件夹内的是一个名为fontawesome.min的字体增强包文件,它包含了丰富的图标元素.打开查看其内容时会发现其中包含了大量具体的代码片段.

关于这种 CSS 层叠样式表确实让人感到困惑和难以掌握使用方法。归功于这些中文网站对图标样式进行了分类整理与详细说明。
比如:https://fa5.dashgame.com/#/图标 里面有详细的图标介绍和分类



使用方法如下:

例如,在需要应用苹果商标的情况下,请采用以下配置方式:首先将样式前缀设为fab;然后将名称设置为以fa-为前缀,并包含fab fa-apple;最后在配置中设置参数icon_name其值设为'fab fa-apple'即可完成配置。
3. 配色
配色直接影响词云的美观程度,是一个不容忽视的问题。stylecloud同样采取了较为完善的解决方案,在其设计中巧妙地采用了高级调色板palettable来进行配色方案的构建。
palettable 网站:https://jiffyclub.github.io/palettable/

我们可以通过修改参数 palette=‘配色方案’ 来达到更改自己的词云配色。
4. 绘制词云
# -*- coding: UTF-8 -*-
"""
@File :practice_03.py
@Author :叶庭云
@Date :2020/10/2 21:41
@ :
"""
from stylecloud import gen_stylecloud
import jieba
import re
import random
# 读取数据
with open('datas.txt', encoding='utf-8') as f:
data = f.read()
# 文本预处理 去除一些无用的字符 只提取出中文出来
new_data = re.findall('[\u4e00-\u9fa5]+', data, re.S)
new_data = "/".join(new_data)
# 文本分词
seg_list_exact = jieba.cut(new_data, cut_all=True)
result_list = []
with open('stop_words.txt', encoding='utf-8') as f:
con = f.readlines()
stop_words = set()
for i in con:
i = i.replace("\n", "") # 去掉读取每一行数据的\n
stop_words.add(i)
for word in seg_list_exact:
# 设置停用词并去除单个词
if word not in stop_words and len(word) > 1:
result_list.append(word)
print(result_list)
# 将palettable配色方案 1587类弄到了本地txt里 读取配色方案
with open('palettable配色方案.txt') as f:
choices = f.read().split('\n')[:-1]
print(choices)
# 个人推荐使用的palette配色方案 效果挺好看
# colorbrewer.qualitative.Dark2_7
# cartocolors.qualitative.Bold_5
# colorbrewer.qualitative.Set1_8
gen_stylecloud(
text=' '.join(result_list), # 文本数据
size=600, # 词云图大小
font_path=r'C:\Windows\Fonts\msyh.ttc', # 中文词云 显示需要设置字体
output_name='词云.png', # 输出词云图名称
icon_name='fas fa-grin-beam', # 图标
palette=random.choice(choices) # 随机选取配色方案
)
运行效果如下:

gen_stylecloud() 主要参数如下:
- text:用于输入文本(建议在函数调用时直接传递)
- file_path:指定输入文本文件或CSV格式文件的路径
- icon_name:使用类似fas fa-grin-beam等风格的图标名称(默认值为fas fa-flag)
- palette:控制调色方案,默认采用cartocolors.qualitative.Bold_5方案
- output_name:指定生成输出文件的名字(默认为stylecloud.png)
- gradient:设置渐变方向(若值非None,则stylecloud将应用方向性渐变,默认为None)
- size:设定输出图像分辨率(由于stylecloud默认生成方形图片,则单整数表示长宽,默认值为512)
- font_path:指定使用的字体文件路径(默认采用Staatliches字体)
- random_state:控制随机状态
- background_color:设置背景颜色,默认为白色
- max_font_size:设定最大字体大小(默认值为200)
- max_words:限制最多包含的单词数量(默认值设为2000)
- stopwords:布尔型开关指示是否启用停用词过滤,默认开启英文停用词表功能
- custom_stopwords:可传入自定义停用词列表与前述停用词配合使用
三、wordcloud库绘制词云
该词云工具具有高质量的专业化特性。
在命令行界面中可通过pip安装该模块。
pip install wordcloud -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
wordcloud库把词云当作一个WordCloud对象
Wordcloud.WordCloud()可表示与之相关的文本的词云图;通过设定相关参数(如词语频率)来生成相应的词云图;在生成过程中可自定义其外观特征包括形状、大小和颜色等特性
配置对象参数

代码实现:
# -*- coding: UTF-8 -*-
"""
@File :practice_03.py
@Author :叶庭云
@Date :2020/10/2 21:41
@ :
"""
import jieba
import collections
import re
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 958条评论数据
with open('data.txt') as f:
data = f.read()
# 文本预处理 去除一些无用的字符 只提取出中文出来
new_data = re.findall('[\u4e00-\u9fa5]+', data, re.S)
new_data = " ".join(new_data)
# 文本分词
seg_list_exact = jieba.cut(new_data, cut_all=True)
result_list = []
with open('stop_words.txt', encoding='utf-8') as f:
con = f.readlines()
stop_words = set()
for i in con:
i = i.replace("\n", "") # 去掉读取每一行数据的\n
stop_words.add(i)
for word in seg_list_exact:
# 设置停用词并去除单个词
if word not in stop_words and len(word) > 1:
result_list.append(word)
print(result_list)
# 筛选后统计
word_counts = collections.Counter(result_list)
# 获取前100最高频的词
word_counts_top100 = word_counts.most_common(100)
print(word_counts_top100)
# 绘制词云
my_cloud = WordCloud(
background_color='white', # 设置背景颜色 默认是black
width=900, height=600,
max_words=100, # 词云显示的最大词语数量
font_path='simhei.ttf', # 设置字体 显示中文
max_font_size=99, # 设置字体最大值
min_font_size=16, # 设置子图最小值
random_state=50 # 设置随机生成状态,即多少种配色方案
).generate_from_frequencies(word_counts)
# 显示生成的词云图片
plt.imshow(my_cloud, interpolation='bilinear')
# 显示设置词云图中无坐标轴
plt.axis('off')
plt.show()
词云图:

四、pyecharts库的WordCloud绘制词云
PyECharts是以ECharts为基础开发的一个Python第三方库,并且它能够支持生成多样化的交互式可视化图形,并且相比其他常见的可视化工具,在功能和使用体验上具有显著的优势。PyECharts允许通过链式方式调用各个组件模块,并且实现了高效的代码结构和可扩展性。
基于此,通过引入图表组件并优化其设置,我们只需简单的配置即可完成相关操作。
# class pyecharts.charts.WordCloud
class WordCloud(
# 初始化配置项,参考 `global_options.InitOpts`
init_opts: opts.InitOpts = opts.InitOpts()
)
# func pyecharts.charts.WordCloud.add
def add(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 系列数据项,[(word1, count1), (word2, count2)]
data_pair: Sequence,
# 词云图轮廓,有 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star' 可选
shape: str = "circle",
# 自定义的图片(目前支持 jpg, jpeg, png, ico 的格式,其他的图片格式待测试)
# 该参数支持:
# 1、 base64 (需要补充 data 头);
# 2、本地文件路径(相对或者绝对路径都可以)
# 注:如果使用了 mask_image 之后第一次渲染会出现空白的情况,再刷新一次就可以了(Echarts 的问题)
# Echarts Issue: https://github.com/ecomfe/echarts-wordcloud/issues/74
mask_image: types.Optional[str] = None,
# 单词间隔
word_gap: Numeric = 20,
# 单词字体大小范围
word_size_range=None,
# 旋转单词角度
rotate_step: Numeric = 45,
# 距离左侧的距离
pos_left: types.Optional[str] = None,
# 距离顶部的距离
pos_top: types.Optional[str] = None,
# 距离右侧的距离
pos_right: types.Optional[str] = None,
# 距离底部的距离
pos_bottom: types.Optional[str] = None,
# 词云图的宽度
width: types.Optional[str] = None,
# 词云图的高度
height: types.Optional[str] = None,
# 允许词云图的数据展示在画布范围之外
is_draw_out_of_bound: bool = False,
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
# 词云图文字的配置
textstyle_opts: types.TextStyle = None,
# 词云图文字阴影的范围
emphasis_shadow_blur: types.Optional[types.Numeric] = None,
# 词云图文字阴影的颜色
emphasis_shadow_color: types.Optional[str] = None,
)
代码实现:
# -*- coding: UTF-8 -*-
"""
@File :practice_03.py
@Author :叶庭云
@Date :2020/10/2 21:41
@ :
"""
import jieba
import collections
import re
from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType
from pyecharts import options as opts
from pyecharts.globals import ThemeType, CurrentConfig
CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'
# 958条评论数据
with open('data.txt') as f:
data = f.read()
# 文本预处理 去除一些无用的字符 只提取出中文出来
new_data = re.findall('[\u4e00-\u9fa5]+', data, re.S) # 只要字符串中的中文
new_data = " ".join(new_data)
# 文本分词--精确模式分词
seg_list_exact = jieba.cut(new_data, cut_all=True)
result_list = []
with open('stop_words.txt', encoding='utf-8') as f:
con = f.readlines()
stop_words = set()
for i in con:
i = i.replace("\n", "") # 去掉读取每一行数据的\n
stop_words.add(i)
for word in seg_list_exact:
# 设置停用词并去除单个词
if word not in stop_words and len(word) > 1:
result_list.append(word)
print(result_list)
# 筛选后统计
word_counts = collections.Counter(result_list)
# 获取前100最高频的词
word_counts_top100 = word_counts.most_common(100)
# 可以打印出来看看统计的词频
print(word_counts_top100)
word1 = WordCloud(init_opts=opts.InitOpts(width='1350px', height='750px', theme=ThemeType.MACARONS))
word1.add('词频', data_pair=word_counts_top100,
word_size_range=[15, 108], textstyle_opts=opts.TextStyleOpts(font_family='cursive'),
shape=SymbolType.DIAMOND)
word1.set_global_opts(title_opts=opts.TitleOpts('商品评论词云图'),
toolbox_opts=opts.ToolboxOpts(is_show=True, orient='vertical'),
tooltip_opts=opts.TooltipOpts(is_show=True, background_color='red', border_color='yellow'))
word1.render("商品评论词云图.html")
词云图:

通过pyecharts库构建的词云图在网页端呈现,该图表不仅支持互动功能,并且提供丰富的配置选项允许用户对词云图进行精细调整以达到美观的效果。
五、参考文章
- stylecloud的GitHub仓库地址:https://github.com/minimaxir/stylecloud
- 科技爸的文章推荐:《教你用StyleCloud打造专业风格的词云图》,原文链接:https://zhuanlan.zhihu.com/p/133254264
- 微信公号阅读入口:访问https://mp.weixin.qq.com/s/B23uDxzLUa_45uDh2R9Vlw即可查看最新内容

作者:叶庭云
:
本文仅限用于学术交流和学习目的,请未经授权禁止任何形式的转载。
如有帮助,请赐予鼓励和支持;如存不足,请恳请大家多多批评指正。
