查看全课大纲(第 37 / 45 节)
- 1.课程简介
- 2.环境搭建
- 3.预备知识
- 4.pyecharts初体验
- 5.数据可视化概述
- 6.数据可视化的目标和作用
- 7.数据可视化工具对比分析
- 8.数据可视化基本流程
- 9.数据可视化设计原则
- 10.pyecharts简介
- 11.官方图表样例
- 12.常用图表的基本结构
- 13.数据格式
- 14.图表的分类
- 15.柱状图与条形图
- 16.其他对比图表
- 17.常用配置项(一)
- 18.常用配置项(二)
- 19.折线图 面积图
- 20.K线图
- 21.其他时间图表
- 22.常用配置项
- 23.散点图 气泡图
- 24.热力图
- 25.其他相关性图表
- 26.饼图
- 27.矩形树图
- 28.其他成分比例图表
- 29.箱型图与直方图
- 30.3D柱状图与折线图
- 31.其他统计图表
- 32.地图 Map
- 33.地理坐标系Geo
- 34.3D 地图
- 35.网络关系图
- 36.主题河流图
- 37.词云图
- 38.组合图表组件
- 39.仪表盘相关图表
- 40.项目介绍
- 41.数据准备
- 42.子图制作(一)
- 43.子图制作(二)
- 44.数据大屏制作
- 45.项目总结
词云图
词云图:文本数据的视觉摘要
小象实战讲义 · ECharts 数据可视化
在数据分析中,我们常常会遇到非结构化的文本数据,例如用户评论、新闻文章、产品标签等。如何快速、直观地洞察这些文本中的核心主题和关键词?词云图提供了一种高效的视觉解决方案。本节我们将学习如何使用 pyecharts 创建词云图,将文本数据转化为直观的视觉摘要,并通过字体大小和颜色来体现关键词的重要性。
💡 核心导读
- 理解词云图:词云图是一种文本数据的视觉表示,通过词汇组成的彩色图形展示大量文本中的关键词及其重要性。
- 核心原理:关键词的重要性通常由其出现的频率体现,并通过字体大小或颜色进行视觉映射。
- 数据处理:对于原始文本,创建词云图前通常需要经过分词、去除停用词等自然语言处理(NLP)步骤。
- 配置要点:在 pyecharts 中,词云图的关键配置包括数据格式、字体大小范围以及自定义形状等。
- 应用场景:常用于网站标签统计、舆情分析、报告摘要等场景,快速呈现文本焦点。
什么是词云图?
词云图,也称为文字云,是一种文本数据的视觉表示形式。它由一系列词汇组成,这些词汇被排列成类似云朵的彩色图形,用于直观地展示大量文本数据中的关键信息。
其核心在于通过视觉属性(主要是字体大小,其次是颜色)来编码每个词汇的“重要性”。在大多数应用场景下,词汇的重要性由其在该段文本中出现的频率决定:出现次数越多,词汇越重要,在词云图中显示的字体就越大、越醒目。
一个典型的应用场景是分析网站文章的标签。假设一个博客平台有成千上万篇文章,每篇文章都被打上了若干标签(如“Python”、“数据分析”、“可视化”)。通过统计所有标签的出现次数并生成词云图,我们可以一目了然地看出哪些主题是平台上的热门讨论焦点。
然而,直接将原始文本中的词汇出现次数等同于“重要性”有时会产生误导。例如,在一篇中文文章中,“的”、“了”、“是”等虚词(停用词)会高频出现,但它们对理解文章主题并无实质贡献。因此,在从原始文本生成词云图之前,往往需要先进行文本预处理。
从文本到词云:数据处理流程
如果我们的起点是一篇完整的文章或一段评论,而非已经统计好的关键词频率数据,那么生成词云图通常需要经过以下步骤,这涉及到自然语言处理(NLP)的基础知识:
- 分词:这是中文处理特有的关键步骤。与英文单词天然由空格分隔不同,中文句子是连续的字符流。分词就是将连续的汉字序列,按照一定的规范,重新组合成有意义的词语序列的过程。例如,“文本数据的视觉表示” 需要被分割为
[“文本”, “数据”, “的”, “视觉”, “表示”]。这个过程通常借助分词工具(如jieba)完成。 - 去除停用词:停用词是指在各种文本中都非常常见,但对文本内容贡献极小的词汇,如中文的“的”、“了”、“在”,英文的“the”, “a”, “is”。去除它们可以避免这些词在词云图中占据显眼位置,从而让真正有意义的关键词凸显出来。
- 词频统计:对处理后的词语列表进行计数,得到每个词语及其出现次数的映射关系。
经过以上步骤,我们就得到了一个结构化的数据:{“关键词1”: 出现次数1, “关键词2”: 出现次数2, …},这正是绘制词云图所需的基础。
使用 pyecharts 绘制词云图
在 pyecharts 中,词云图由 WordCloud 类实现。其数据格式要求是一个列表,列表中的每个元素是一个元组 (word, value),其中 word 是关键词字符串,value 是一个数值,代表该词的重要性(如出现次数)。
下面我们使用一组模拟的“热点分析”数据来创建一个基础的词云图。这组数据模拟了不同民生话题的关注度(数值)。
from pyecharts.charts import WordCloud
from pyecharts import options as opts
# 准备数据:列表内为 (关键词, 重要性数值) 元组
data = [
("生活资源", 999),
("供热管理", 888),
("供气质量", 777),
("生活用水管理", 688),
("一次供水问题", 588),
("交通运输", 516),
("职业教育", 21), # 这是一个重要性较低的例子
("市场外溢", 11), # 这是另一个重要性较低的例子
]
# 创建词云图
wordcloud = (
WordCloud()
.add(
series_name="热点分析", # 系列名称
data_pair=data, # 数据
word_size_range=[6, 66] # 词汇字体大小范围 [最小值, 最大值]
)
.set_global_opts(
title_opts=opts.TitleOpts(title="民生热点分析词云图"),
tooltip_opts=opts.TooltipOpts(is_show=True), # 启用提示框
)
)
# 生成HTML文件(本地查看)
wordcloud.render("basic_wordcloud.html")
# 打印图表类型和基础信息摘要
print(f"图表类型: {type(wordcloud).__name__}")
print(f"数据条目数: {len(data)}")
print(f"关键词示例(前3个): {[item[0] for item in data[:3]]}")
print(f"数值范围: {min([item[1] for item in data])} - {max([item[1] for item in data])}")图表类型: WordCloud
数据条目数: 8
关键词示例(前3个): ['生活资源', '供热管理', '供气质量']
数值范围: 11 - 999运行以上代码会生成一个 HTML 文件。在生成的词云图中,“生活资源”(数值999)将以最大的字体(66px)显示,而“市场外溢”(数值11)将以最小的字体(6px)显示。将鼠标悬停在任意词汇上,提示框会显示该词汇及其具体的数值。
关键配置解析:word_size_range word_size_range=[6, 66] 这个参数至关重要。它定义了词云中字体大小的映射范围。pyecharts 会自动将数据中的最小 value 映射到字体大小的最小值(6px),将最大 value 映射到最大值(66px),中间值则按比例线性映射。通过调整这个范围,你可以控制词云视觉对比的强弱。例如,设置为 [12, 24] 会让所有词汇的大小差异看起来不那么明显。
词云图的高级配置
除了基础的大小映射,pyecharts 的词云图还支持多种自定义配置,以满足不同的视觉设计需求。
- 形状与遮罩:词云可以填充在指定的几何形状(如圆形、矩形)甚至自定义的图片轮廓内。这需要通过
shape参数或mask_image参数来实现。 - 视觉样式:可以调整词汇的旋转步长(
rotate_step)、词汇之间的间隔(word_gap)、以及文字的样式(颜色、阴影等)。 - 颜色映射:词汇的颜色可以通过
visualmap配置项与数值进行关联,或者通过textstyle_opts设置统一的颜色。
下面的示例展示了如何调整词汇的旋转角度和间隔,并添加一个简单的视觉映射(颜色根据数值变化)。
from pyecharts.charts import WordCloud
from pyecharts import options as opts
data = [
("生活资源", 999),
("供热管理", 888),
("供气质量", 777),
("生活用水管理", 688),
("一次供水问题", 588),
("交通运输", 516),
("职业教育", 21),
("市场外溢", 11),
]
# 高级配置示例:调整旋转、间隔和颜色
advanced_wordcloud = (
WordCloud()
.add(
series_name="热点分析",
data_pair=data,
word_size_range=[15, 80],
shape="circle", # 词云轮廓形状,可选 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star'
rotate_step=45, # 词汇旋转步长,此处为45度,意味着词汇可能旋转0, 45, 90度等
word_gap=10, # 词汇间隔,值越大,词与词之间越疏朗
)
.set_global_opts(
title_opts=opts.TitleOpts(title="高级配置词云图"),
tooltip_opts=opts.TooltipOpts(is_show=True),
# 添加视觉映射组件,将数值映射到颜色
visualmap_opts=opts.VisualMapOpts(
is_show=False, # 不显示视觉映射的控制器条
min_=min([d[1] for d in data]),
max_=max([d[1] for d in data]),
range_color=["#d7e3fc", "#3a5dc9"], # 颜色范围,从浅蓝到深蓝
)
)
)
advanced_wordcloud.render("advanced_wordcloud.html")
print("高级词云图配置完成。")
print("形状: circle")
print("旋转步长: 45")高级词云图配置完成。
形状: circle
旋转步长: 45📝 动手练一练
- 调整视觉对比:将第一个基础示例中的
word_size_range从[6, 66]改为[20, 40],重新运行并观察生成的词云图。描述一下视觉上发生了什么变化?这种设置更适合什么样的数据或展示场景?
点击查看参考答案
变化描述:字体大小的范围被压缩了。原本“生活资源”(999)和“市场外溢”(11)的字体大小相差60px(66-6),现在只相差20px(40-20)。这导致词汇之间的大小对比变得不那么强烈,所有词汇看起来尺寸更接近。
适用场景:当数据中最大值和最小值的差异巨大,但你不想让这种差异在视觉上过于夸张时;或者当你想让词云图整体看起来更紧凑、均衡时,可以使用较小的字体大小范围。它弱化了极端值的视觉冲击,更强调中游词汇的存在感。
- 模拟文本处理流程:假设你有一段文本
text = “数据分析是数据科学的核心,数据分析离不开好的可视化工具,比如ECharts。”请编写一段伪代码或简要步骤,描述如何将这段文本处理成可用于WordCloud的data_pair格式列表。
点击查看参考答案
处理步骤:
- 分词:使用分词库(如
jieba.lcut)对文本进行分词。结果可能为:[‘数据’, ‘分析’, ‘是’, ‘数据’, ‘科学’, ‘的’, ‘核心’, ‘,’, ‘数据’, ‘分析’, ‘离不开’, ‘好’, ‘的’, ‘可视化’, ‘工具’, ‘,’, ‘比如’, ‘ECharts’, ‘。’] - 清洗与去除停用词:
- 去除标点符号(如
,、。)。 - 去除中文停用词(如
是、的、了)。假设去除后得到:[‘数据’, ‘分析’, ‘数据’, ‘科学’, ‘核心’, ‘数据’, ‘分析’, ‘离不开’, ‘好’, ‘可视化’, ‘工具’, ‘比如’, ‘ECharts’]
- 去除标点符号(如
- 词频统计:遍历清洗后的词列表,统计每个词的出现次数。
数据: 3分析: 2科学: 1核心: 1离不开: 1好: 1可视化: 1工具: 1比如: 1ECharts: 1
- 格式转换:将词频统计字典转换为
(word, value)元组列表。data_pair = [("数据", 3), ("分析", 2), ("科学", 1), ("核心", 1), ("可视化", 1), ("ECharts", 1)] # 仅示例部分
这个 `data_pair` 就可以直接用于 `WordCloud().add()` 方法。
</details>
## 本章小结
在本章中,我们探索了两种非结构化数据的可视化方法:主题河流图和词云图。词云图作为文本数据的视觉摘要工具,能够快速传达大量文本中的核心主题与关键词重要性。理解其背后从原始文本到可视化结果的数据处理流程(分词、去停用词、统计)至关重要,这确保了词云图反映的是有意义的洞察,而非无意义的噪音。
### 📋 行动清单
- [ ] **掌握核心配置**:在 pyecharts 中成功运行一个基础词云图,理解 `data_pair` 数据格式和 `word_size_range` 参数的作用。
- [ ] **理解数据处理**:能够清晰描述从一段中文原始文本生成词云图所需的关键 NLP 预处理步骤(分词、去停用词)。
- [ ] **尝试高级定制**:修改示例代码,尝试为词云图更换一种形状(如 `shape=‘diamond’`)或调整词汇的旋转角度,观察视觉效果的变化。
—— 小象教研组