使用pyecharts绘制词云图

一、什么是词云图?

词云图是一种用来展现高频关键词的可视化表达,通过文字、色彩、图形的搭配,产生有冲击力地视觉效果,而且能够传达有价值的信息。

制作词云图的网站有很多,简单方便,适合小批量操作。

BI软件如Tableau、PowerBI也可以做,当然相比较web网站复杂一点。

在编程方面,JavaScript是制作词云图的第一选择,像D3、echarts都非常优秀。

python也有不少可视化库能制作词云图,这次我们尝试使用pyecharts。

先上效果图:

动图封面

动图封面

二、pyecharts介绍

pyecharts是基于echarts的python库,能够绘制多种交互式图表。

这次使用的pyecharts版本是1.7.1,python版本是3.6。

pyecharts提供了多种个性化配置方案,可以按需选择。

# 系列名称,用于 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,

和其他可视化库不一样,pyecharts支持链式调用。

也就是说添加图表元素、修改图表配置,只需要简单的调用组件即可。

下面来个示例:

# 导入WordCloud及配置模块
from pyecharts import options as opts
from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType# 添加词频数据
words = [("Sam S Club", 10000),("Macys", 6181),("Amy Schumer", 4386),("Jurassic World", 4055),("Charter Communications", 2467),("Chick Fil A", 2244),("Planet Fitness", 1868),("Pitch Perfect", 1484),("Express", 1112),("Home", 865),("Johnny Depp", 847),("Lena Dunham", 582),("Lewis Hamilton", 555),("KXAN", 550),("Mary Ellen Mark", 462),("Farrah Abraham", 366),("Rita Ora", 360),("Serena Williams", 282),("NCAA baseball tournament", 273),("Point Break", 265),
]# WordCloud模块,链式调用配置,最终生成html文件
c = (WordCloud().add("", words, word_size_range=[20, 100], shape=SymbolType.DIAMOND).set_global_opts(title_opts=opts.TitleOpts(title="WordCloud-shape-diamond")).render("wordcloud_diamond.html")
)

生成词云图:

动图封面

三、商品评论词云图

为了更好地展示pyecharts的词云可视化效果,我找了淘宝商品评论数据集,更贴近应用场景。

代码的流程主要是:数据加载、分词处理、词频统计、词云展示

1、数据加载

数据集共有10 个商品类别(书籍、平板、手机、水果、洗发水、热水器、蒙牛、衣服、计算机、酒店)。

共 6 万多条评论数据,正、负向评论各约 3 万条。

我们要用的就是字段review评论数据,代码分模块实现不同功能。

首先导入相关库:

import pandas as pd
import jieba
from collections import Counter
import pyecharts.options as opts
from pyecharts.charts import WordCloud

接着加载数据,提取文本:

def get_text(goods,evaluation):if evaluation == '好评':evaluation = 1else:evaluation = 0path = 'comments.csv'with open(path,encoding='utf-8') as f:data = pd.read_csv(f)# 商品种类types = data['cat'].unique()# 获取文本text = data[(data['cat']==goods)&(data['label']==evaluation)]['review'].values.tolist()text = str(text)[1:-1]print(types)return text

2、分词处理

因为评论数据是一段段完整的话,所以要进行词云展示的话肯定得先分词。

这里用的分词库是jieba,而且添加了停用词库,目的是去除符号、副词等无意义词汇。

def split_word(text):word_list = list(jieba.cut(text))# 去掉一些无意义的词和符号,我这里自己整理了停用词库with open('停用词库.txt') as f:meaningless_word = f.read().splitlines()# print(meaningless_word)result = []# 筛选词语for i in word_list:if i not in meaningless_word:result.append(i.replace(' ', ''))return result

3、词频统计

分完词后,需要对词进行频数统计,这里用到collection模块的Counter方法。

然后筛选出词频数排名前1000的词汇,你也可以自行调整。

def word_counter(words):# 词频统计,使用Count计数方法words_counter = Counter(words)# 将Counter类型转换为列表words_list = words_counter.most_common(2000)return words_list

4、词云展示

最后一步使用wordcloud模块对整理好的数据进行可视化展示。

def word_cloud(data):(WordCloud().add(series_name="热点分析",# 添加数据data_pair=data,# 字间隙word_gap = 5,# 调整字大小范围word_size_range=[15, 80],shape="cursive",# 选择背景图,也可以不加该参数,使用默认背景mask_image='购物车.jpg').set_global_opts(title_opts=opts.TitleOpts(title="热点分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23)),tooltip_opts=opts.TooltipOpts(is_show=True),)# 输出为html格式.render("basic.html"))

上面代码里的背景图可以自己选择,最好是大轮廓的图,因为细节展示不出来。

几个处理函数都写好了,下面来执行结果:

def main(goods,evaluation):text = get_text(goods,evaluation)words = split_word(text)data = word_counter(words)word_cloud(data)if __name__ == '__main__':# 商品种类:书籍、平板、手机、水果、洗发水、热水器、衣服、计算机、酒店# 评论种类:好评、差评main('手机','好评')

提醒一下,main函数的两个参数,分别是商品类型和评价类型,你可以自定义组合,然后就会生成该组合的词云图。

用购物车背景图展示手机+好评组合的词云图:

动图封面

用淘宝背景图展示计算机+好评组合的背景图:

用浴缸背景图展示酒店+差评组合的背景图:

用书本背景图展示书籍+好评组合的背景图:

四、结论

这里的展示仅仅为了教大家如何去使用pyecharts制作词云,真正的商业用途上需要更加清晰简洁的表达,在设计层面也要更多的考量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/58458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一、ARMv8寄存器之通用、状态、特殊寄存器

ARMV8核心寄存器数量是非常大的,为了更好的学习,可以划分为以下几大类: 通用寄存器。这类寄存器主要是用来暂存数据和参与运算。通过load\store指令操作。状态寄存器。AArch64体系结构使用PSTATE寄存器表示当前处理器状态。特殊寄存器。有专门…

云渲染突破酒店3D动画渲染速度与成本瓶颈!

3D动画已经成为众多行业,尤其是酒店业,用于营销和展示其独特卖点的重要工具。通过生动的3D动画,酒店能够突出其特色和优势,从而吸引更多潜在客户。然而,在3D动画制作过程中,渲染环节往往是一个耗时且技术要…

Mybatis-Plus中 updateById 无法将已有值的字段更新为 null

在 MyBatis-Plus 中,使用updateById,null字段并不会更新,其实是和更新的策略有关,当然,也有插入策略。 1、调整全局策略(会对所有的字段都忽略判断,如果一些字段不想要修改,但是传值…

HTML入门教程23:HTML脚本

一、嵌入JavaScript的方式 在HTML中嵌入JavaScript脚本有三种主要方式&#xff1a; 内联脚本&#xff1a;直接在HTML文档的<script>标签中编写JavaScript代码。外部脚本&#xff1a;将JavaScript代码保存在独立的.js文件中&#xff0c;并在HTML文档中通过<script>…

LabVIEW偏振调制激光高精度测距系统

在航空航天、汽车制造、桥梁建筑等先进制造领域&#xff0c;许多大型零件的装配精度要求越来越高&#xff0c;传统的测距方法在面对大尺寸、高精度测量时&#xff0c;难以满足工业应用的要求。绝对测距技术在大尺度测量上往往会因受环境影响大、测距精度低而无法满足需求。基于…

微信小程序如何实现地图轨迹回放?

要在Uni-app中实现微信小程序的地图轨迹回放功能&#xff0c;你可以按照以下步骤进行操作&#xff1a; 在Uni-app项目中引入地图组件&#xff1a;在页面中使用uni-app提供的map组件&#xff0c;可以使用uni.createMapContext方法获取地图上下文对象&#xff0c;以便后续操作地图…

WPF+MVVM案例实战(六)- 自定义分页控件实现

文章目录 1、项目准备2、功能实现1、分页控件 DataPager 实现2、分页控件数据模型与查询行为3、数据界面实现 3、运行效果4、源代码获取 1、项目准备 打开项目 Wpf_Examples&#xff0c;新建 PageBarWindow.xaml 界面、PageBarViewModel.cs ,在用户控件库 UserControlLib中创建…

WPF+MVVM案例实战(十一)- 环形进度条实现

文章目录 1、运行效果2、功能实现1、文件创建与代码实现2、角度转换器实现3、命名空间引用3、源代码下载1、运行效果 2、功能实现 1、文件创建与代码实现 打开 Wpf_Examples 项目,在Views 文件夹下创建 CircularProgressBar.xaml 窗体文件。 CircularProgressBar.xaml 代码实…

CSS常见适配布局方式

在网页设计中&#xff0c;布局是确保内容按预期显示的关键部分。CSS 提供了多种布局方式&#xff0c;每种方式都有其特定的用途和优势。以下是您提到的五种布局方式的详细解释&#xff1a; 1. 流式布局&#xff08;百分比布局&#xff09; 概述&#xff1a; 流式布局&#xf…

系统架构图设计(行业领域架构)

物联网 感知层&#xff1a;主要功能是感知和收集信息。感知层通过各种传感器、RFID标签等设备来识别物体、采集信息&#xff0c;并对这些信息进行初步处理。这一层的作用是实现对物理世界的感知和初步处理&#xff0c;为上层提供数据基础网络层&#xff1a;网络层负责处理和传输…

sublime Text中设置编码为GBK

要在sublime Text中设置编码为GBK&#xff0c;请按照以下步骤操作 1.打开Sublime Text编辑器, 2.点击菜单栏中的“Preferences”(首选项)选项&#xff0c;找打Package Control选项。 3.点击Package Control&#xff0c;随后搜索Install Package并点击&#xff0c;如下图 4.再…

【python GUI编码入门-03】掌握Tkinter如何高效绑定键盘和鼠标事件

哈喽,大家好,我是木头左! 本文将深入探讨Tkinter中的高级特性之一——如何高效地绑定键盘和鼠标事件,以提升你的应用程序的用户体验和交互性。 一、基础回顾:什么是事件绑定? 在开始深入之前,让先简单回顾一下什么是事件绑定。在GUI编程中,事件是指用户与应用程序交互…

筛选Excel数据

要筛选Excel数据&#xff0c;可以使用Python中的pandas库来实现。下面是一个简单的例子&#xff1a; import pandas as pd# 读取Excel文件 df pd.read_excel(data.xlsx)# 筛选数据 filtered_data df[df[列名] > 10] # 根据某一列的值进行筛选# 保存筛选后的数据到新的Ex…

为什么数据库连接很消耗资源?

1背景 开发应用程序久了&#xff0c;总想刨根问底&#xff0c;尤其对一些有公共答案的问题。大家都能解释&#xff0c;但是追根究底&#xff0c;都解释不清。凡是都有为什么&#xff0c;而且用数字说明问题是最直观的。 本文主要想探究一下连接数据库的细节&#xff0c;尤其是…

目标检测:YOLOv11(Ultralytics)环境配置,适合0基础纯小白,超详细

目录 1.前言 2. 查看电脑状况 3. 安装所需软件 3.1 Anaconda3安装 3.2 Pycharm安装 4. 安装环境 4.1 安装cuda及cudnn 4.1.1 下载及安装cuda 4.1.2 cudnn安装 4.2 创建虚拟环境 4.3 安装GPU版本 4.3.1 安装pytorch&#xff08;GPU版&#xff09; 4.3.2 安装ultral…

PostgreSQL 约束

PostgreSQL 约束 介绍 PostgreSQL 是一种功能强大的开源对象关系数据库系统&#xff0c;它提供了多种约束来确保数据的完整性和一致性。约束是数据库规则&#xff0c;用于限制表中数据的类型和操作。在 PostgreSQL 中&#xff0c;约束可以分为几种类型&#xff0c;包括主键约…

telnet远程登陆服务能否用来传输文件(附安装xinetd教程)

通过 telnet 登录到远程服务器之后&#xff0c;你无法直接使用 telnet 发送文件。telnet 协议本身是一个文本协议&#xff0c;主要用于远程登录&#xff0c;不支持文件传输功能。要发送文件&#xff0c;你需要使用其他工具&#xff0c;如 scp 或 sftp。 使用 scp 发送文件 sc…

链表(数据结构)

一. 单链表 1.1 概念与结构 再上一篇中我们讲到顺序表&#xff0c;但是顺序表也是有很多的问题&#xff0c;像申请的空间过多过少或者增容该才能不浪费空间&#xff0c;今天我们就来认识一个新的知识&#xff0c;叫做链表&#xff0c;链表也是线性表的一种&#xff0c;链表是…

(done) 什么 RPC 协议? remote procedure call 远程调用协议

来源&#xff1a;https://www.bilibili.com/video/BV1Qv4y127B4/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 可以理解为&#xff0c;调用远程服务器上的一个方法/函数/服务的方式&#xff0c;同时隐藏网络细节 一个 python3 …

Docker本地安装Minio对象存储

Docker本地安装Minio对象存储 1. 什么是 MinIO&#xff1f; MinIO 是一个开源的对象存储服务器。这意味着它允许你在互联网上存储大量数据&#xff0c;比如文件、图片、视频等&#xff0c;而不需要依赖传统的文件系统。MinIO 的特点在于它非常灵活、易于使用&#xff0c;同时…