百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

教你绘制酷炫词云图,轻松展示淘宝商品信息

toyiye 2024-06-21 12:20 8 浏览 0 评论

一、什么是词云图?

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



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

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制作词云,真正的商业用途上需要更加清晰简洁的表达,在设计层面也要更多的考量。

获取代码、数据集,关注公众号:pydatas,请在后台回复:词云

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码