使用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 = 1
else:
evaluation = 0
path = '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制作词云,真正的商业用途上需要更加清晰简洁的表达,在设计层面也要更多的考量。
使用pyecharts绘制词云图-淘宝商品评论展示的更多相关文章
- Python pyecharts绘制词云图
一.pyecharts绘制词云图WordCloud.add()方法简介 WordCloud.add()方法简介 add(name,attr,value, shape="circle" ...
- python 绘制词云图
1. 先下载并安装nltk包,准备一张简单的图片存入代码所在文件目录,搜集英文停用词表 import nltk nltk.download() 2. 绘制词云图 import re import nu ...
- Python爬虫,抓取淘宝商品评论内容!
作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿"德州扒鸡&qu ...
- 小白学Python(12)——pyecharts ,生成词云图 WordCloud
WordCloud(词云图) from pyecharts import options as opts from pyecharts.charts import Page, WordCloud fr ...
- (数据科学学习手札71)在Python中制作个性化词云图
本文对应脚本及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 一.简介 词云图是文本挖掘中用来表征词频的数据可视化 ...
- 用Python制作酷炫词云图,原来这么简单!
一.简介词云图是文本挖掘中用来表征词频的数据可视化图像,通过它可以很直观地展现文本数据中地高频词:! 图1 词云图示例 在Python中有很多可视化框架可以用来制作词云图,如pyecharts,但这些 ...
- python爬虫+词云图,爬取网易云音乐评论
又到了清明时节,用python爬取了网易云音乐<清明雨上>的评论,统计词频和绘制词云图,记录过程中遇到一些问题 爬取网易云音乐的评论 一开始是按照常规思路,分析网页ajax的传参情况.看到 ...
- R语言绘图:词云图
使用wordcloud2绘制词云图 library(wordcloud2) findwords<-function(tf){ txt<-scan(tf,"") wl&l ...
- python词云图之WordCloud
1. 导入需要的包package import matplotlib.pyplot as plt from scipy.misc import imread from wordcloud import ...
随机推荐
- JavaScript创建函数的方式
在JavaScript中,创建函数是比较常见的操作,但是JavaScript中怎么创建函数呢,有几种方式可以创建函数呢?在JavaScript一般有三种方式创建对象1.函数声明方式格式:functio ...
- leetcode第38题:报数
这是一道简单题,但是我做了很久,主要难度在读题和理解题上. 思路:给定一个数字,返回这个数字报数数列.我们可以通过从1开始,不断扩展到n的数列.数列的值为前一个数列的count+num,所以我们不断叠 ...
- OpenCV 图像平滑处理
#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" us ...
- JavaScript学习总结(六)数据类型和JSON格式
转自:http://segmentfault.com/a/1190000000668072 什么是JSON JSON:JavaScript 对象表示法(JavaScript Object Notati ...
- springboot ——oracle.jdbc.driver.OracleDriver
网上很多案例讲是oracle的驱动包没有导入进去,我之前尝试下图示方式导入解决该问题: 但是在后期调试的时候,发现会影响后续oracle数据源连接驱动的问题,导致不能查询,因此想,另辟途径,解决这个问 ...
- IDEA 详细使用教程
第一步:安装 略 安装首先需要Java语言的运行环境,这里不做概述. 第二步:破解 这里使用的是2016版的,所以直接在网上搜索秘钥即可 https://blog.csdn.net/ksksjipen ...
- 机器学习 —— 数据预处理
对于学习机器学习算法来说,肯定会涉及到数据的处理,因此一开始,对数据的预处理进行学习 对于数据的预处理,大概有如下几步: 步骤1 -- 导入所需库 导入处理数据所需要的python库,有如下两个库是非 ...
- Android apk签名详解——AS签名、获取签名信息、系统签名、命令行签名
Apk签名,每一个Android开发者都不陌生.它就是对我们的apk加了一个校验参数,防止apk被掉包.一开始做Android开发,就接触到了apk签名:后来在微信开放平台.高德地图等平台注册时,需要 ...
- TCP与三次握手
TCP是在不可靠的网络层上提供可靠的传输服务.如何理解?假设你拥有一个快递公司,但是快递小哥不是很靠谱, 送货偶尔会出问题,所以你经常收到投诉电话,处理一些复杂的问题.比如有些快递压舱了,有些丢失了, ...
- LiteOS内核教程01-IoT-Studio介绍及安装
1. 物联网一站式开发工具 -- IoT Studio IoT Studio 是支持 LiteOS 嵌入式系统软件开发的工具,提供了代码编辑.编译.烧录 及调试等一站式开发体验,支持 C.C++.汇编 ...