pyecharts添加文字_超燃的文字云效果,用Python就能轻松get!

8d8701113b8c02e94a0f30f7f975b524.gif

本文转载自公众号:数据森麟(ID:shujusenlin)

作者:叶庭云

链接:https://blog.csdn.net/fyfugoyfa

/ 01 / 词云图

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

词云就是通过形成“关键词云层”或“关键词渲染”,对网络文本中出现频率较高的“关键词”的视觉上的突出。

词云图过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

本文通过对已获取的京东商品评论数据进行预处理、文本分词、词频统计、词云展示,熟悉制作词云的基本方法。

/ 02 / stylecloud库绘制词云

01 stylecloud简介

对自己而言,平时用 python 制作词云主要使用wordcloud,如果在可视化的过程还要用 pyecharts 绘制其他图,那么词云也干脆就用pyecharts制作了。

stylecloud也是一个 python 绘制词云的包,是一位数据科学家 Max Woolf 基于 wordcloud 优化改良而成。

并添加了一些更有用的功能,从而让使用者更易创作出独特并且颜值颇高的词云。

9a87e25fda5ea8f560cc76695b62b35f.png

安装stylecloud库。

pip install stylecloud -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

stylecloud具有以下特点:

  • 为词云提供(任意大小)的图标形状(通过 Font Awesome 5.11.2 获得)

  • 支持高级调色板(通过 palettable 实现)

  • 为上述调色板提供直接梯度

  • 支持读取文本文件,或预生成的 CSV 文件(包含单词和数字)

  • 提供命令行接口

02 蒙版图片

影响词云颜值的问题之一就是蒙版图片的生成。

自己制作的蒙版图片要么分辨率不统一,要么需要调整对比度,比较麻烦,stylecloud是直接使用 Font Awesome 这个现成的方案。

网址链接:https://fontawesome.com/license/free

在stylecloud \ static的文件夹下,有一个 fontawesome.min 的 css 文件包含了大量的图标,打开查看里面的内容,发现其中包含很多图标的代码。

ce827afeb7bf5a4e614f2ca1a3b263a9.png

这种 css 层叠样式表,咱也看不懂、也不知道咋用呀,多亏有中文网站分门别类罗列了图标的样子和名字。

https://fa5.dashgame.com/#/%E5%9B%BE%E6%A0%87 里面有详细的图标介绍和分类。

adf30e8bec3f8b61dc6927d675bd2013.gif

使用方法如下:

2f779ea18810f62c359bfef6252466ab.png

比如要使用苹果商标的蒙版图片,样式前缀 fab,以 fa-为前缀的名称 fa-apple,设置icon_name参数,icon_name='fab fa-apple'即可。

03 配色

配色是影响词云颜值的又一大问题。stylecloud同样找到了比较好的方案,配色方案使用高级调色板 palettable 来实现。

palettable 网站:https://jiffyclub.github.io/palettable/

825c5fa7a0b319ab6ccf7dbb6bc27860.gif

我们可以通过修改参数 palette='配色方案' 来达到更改自己的词云配色。

04 绘制词云

gen_stylecloud() 主要参数如下:

text:输入文本,最好在直接调用函数时使用。
file_path:输入文本/CSV 的文件路径
icon_name:stylecloud 形状的图标名称(如 fas fa-grin-beam),[default: fas fa-flag]
palette:控制调色方案,stylecloud的调色方案调用了palettable,这是一个非常实用的模块,其内部收集了数量惊人的大量的经典调色方案,默认为 cartocolors.qualitative.Bold_5
output_name:stylecloud 的输出文本名。[default: stylecloud.png]
gradient:梯度方向,(其默认值是 None,如果它的值不是 None,则 stylecloud 使用了方向性梯度)[default: None]
size:控制输出图像文件的分辨率(因为stylecloud默认输出方形图片,所以size传入的单个整数代表长和宽),默认为512
font_path:stylecloud 所用字体 .ttf 文件的路径。[default: uses included Staatliches font]
random_state:控制单词和颜色的随机状态
background_color:字符串,控制词云图底色,可传入颜色名称或16进制色彩,默认为 white
max_font_size:stylecloud 中的最大字号 [default: 200]
max_words:stylecloud 可包含的最大单词数 [default: 2000]
stopwords:bool型,控制是否开启去停用词功能,默认为True,调用自带的英文停用词表
custom_stopwords:传入自定义的停用词List,配合stopwords共同使用

代码如下。

# -*- coding: UTF-8 -*-"""
@Author  :叶庭云
@CSDN    :https://yetingyun.blog.csdn.net/
"""from stylecloud import gen_stylecloudimport jiebaimport reimport 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)# 个人推荐使用的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=cartocolors.qualitative.Bold_5    # 设置配色方案
)

运行效果如下:

e06af51a237c62f03bbe4a13cc913396.png

/ 03 / wordcloud库绘制词云

wordcloud是优秀的词云展示第三方库 可以在命令行通过pip安装。

pip install wordcloud -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

wordcloud库把词云当作一个WordCloud对象。

  • wordcloud.WordCloud( ) 代表一个文本对应的词云

  • 可以根据文本中词语出现的频率等参数绘制词云

  • 绘制词云的形状,尺寸和颜色都可以设定

配置对象参数。

13ec362cc53e934772bdef83818f489c.png

代码实现:

# -*- coding: UTF-8 -*-"""
@Author  :叶庭云
@CSDN    :https://yetingyun.blog.csdn.net/
"""import jiebaimport collectionsimport refrom wordcloud import WordCloudimport 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()

词云图:

1b499bca64bfce6c04dcf4159d6f759c.png

/ 04 / pyecharts库的WordCloud绘制词云

pyecharts是基于echarts的python库,能够绘制多种交互式图表,和其他可视化库不一样,pyecharts支持链式调用。

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

# class pyecharts.charts.WordCloudclass WordCloud(
    # 初始化配置项,参考 `global_options.InitOpts`
    init_opts: opts.InitOpts = opts.InitOpts()
)

# func pyecharts.charts.WordCloud.adddef 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 -*-"""
@Author  :叶庭云
@CSDN    :https://yetingyun.blog.csdn.net/
"""import jiebaimport collectionsimport refrom pyecharts.charts import WordCloudfrom pyecharts.globals import SymbolTypefrom pyecharts import options as optsfrom 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")

词云图:

70bbd8e5b9558f67970aad2c756b53f8.gif

用pyecharts绘制的词云图渲染在网页上,具有交互效果,还有很多的配置参数可以设置让词云图看起来更美观。

恋习Python

49235f0b079d2a45e2b97ac3f020f53e.png

关注恋习Python,Python都好练好文章,我在看❤️

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

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

相关文章

mysql 创建视图 主键_MySQL数据库基础操作命令,本文助你更上一层楼!

今天介绍的是关于Mysql数据库一些操作的基础命令用户与权限创建用户mysql>create user test identified by BaC321#; 修改密码5.5版本及以前的命令mysql>set password for testpassowrd(!1A2#3); 5.6及以上命令mysql>update mysql.user set authentication_stringpass…

mysql 聚合函数 怎么用在条件里_MySql 中聚合函数增加条件表达式的方法

Mysql 与聚合函数在一起时候where条件和having条件的过滤时机where 在聚合之前过滤当一个查询包含了聚合函数及where条件&#xff0c;像这样的情况select max(cid) from t where t.id<999这时候会先进行过滤&#xff0c;然后再聚合。先过滤出ID《999的记录&#xff0c;再查找…

drbd(三):drbd的状态说明

1.几种获取状态信息的方法 drbd有很多获取信息的方式。在drbd84和之前的版本&#xff0c;大多都使用cat /proc/drbd来获取信息&#xff0c;多数情况下&#xff0c;这个文件展示的信息对于管理和维护drbd来说已经足够。 例如以下是drbd84上两个volume的节点状态信息&#xff1a;…

python QTreeWidgetItem下面有几个子tree_python-nlp ch1笔记:nlp的基础应用、高级应用、python优势、nltk环境搭建...

本帖是对(印度)Jalaj Thanaki作品《python自然语言处理》的翻译、缩减及改编~nlp的基础应用NLP是AI的子分支&#xff0c;其相关概念可以用于以下专家系统中&#xff1a;语音识别系统问答系统机器翻译文本摘要情感分析基于模板的聊天机器人文本分类主题分割nlp的高级应用理解自然…

C#使用ListView更新数据出现闪烁解决办法

C#使用ListView更新数据出现闪烁解决办法 在使用vs自动控件ListView控件时候&#xff0c;更新里面的部分代码时候出现闪烁的情况 如图&#xff1a; 解决以后&#xff1a; 解决办法使用双缓冲&#xff1a;添加新类继承ListView 对其重写 1 public class DoubleBufferListView : …

python语音识别的第三方库_python标准库+内置函数+第三方库: 7.音频处理

python标准库内置函数第三方库 欲善其事&#xff0c;必先利其器 这其器必是python的标准库内置函数&#xff0c;话说许多第三方库&#xff0c; 也是对标准库的使用&#xff0c;进行封装&#xff0c;使得使用起来更方便。 这些库以使用场景来分类: 7、音频处理 音频处理主要适用…

python 多线程并行 矩阵乘法_python实现简单的并行矩阵乘法

python实现简单的并行矩阵乘法python实现简单的并行矩阵乘法本文采用的矩阵乘法方式是利用一个矩阵的行和二个矩阵的列相乘时不会互相影响。假设A(m,n)表示矩阵的m行&#xff0c;n列。那么C(m,m)A(m,n) * B(n,m) &#xff1a;计算C矩阵时候分解成&#xff1a;process-1&#xf…

报错 classes 拒绝访问_3种方式“移除”快速访问;为什么移除?你懂的...

Windows 10 在文件资源管理器中引入了"快速访问"这个功能&#xff0c;每当打开文件资源管理器窗口时&#xff0c;您都会看到常用文件夹和最近访问的文件的列表&#xff0c;这个功能虽然方便了日常使用&#xff0c;可能会提高工作效率&#xff0c;但是如果是公司的电脑…

java set是重复_java算法题,set内出现重复元素

题目将数字 1…9 填入一个33 的九宫格中&#xff0c;使得格子中每一横行和的值全部相等&#xff0c;每一竖列和的值全部相等。请你计算有多少种填数字的方案。这个是计蒜客上面的一个模拟题&#xff0c;我采用暴力。public class _3 {/** 将数字 1…9 填入一个33 的九宫格中&am…

python中把输出结果写到一个文件中_Python3.6笔记之将程序运行结果输出到文件的方法...

Python3.6笔记之将程序运行结果输出到文件的方法 更新时间&#xff1a;2018年04月22日 14:27:32 投稿&#xff1a;jingxian 下面小编就为大家分享一篇Python3.6笔记之将程序运行结果输出到文件的方法&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助。一起跟随小…

ReadWriteLock读写文件

概述 ReadWriteLock是一个接口&#xff0c;在它里面只定义了两个方法&#xff1a;一个读的锁和一个写的锁。 读的锁&#xff1a;A线程获取了读的锁&#xff0c;那么B线程也可以获取读的锁。 写的锁&#xff1a;A线程获取了写的锁&#xff0c;那么B线程不能获取读也不能获取写…

Java中的Runnable、Callable、Future、FutureTask的区别与示例

原文地址&#xff1a;http://blog.csdn.net/bboyfeiyu/article/details/24851847 --------------------------------------------------------- Java中存在Runnable、Callable、Future、FutureTask这几个与线程相关的类或者接口&#xff0c;在Java中也是比较重要的几个概念&am…

sql count为空时显示0_C0010负坐标显示为正数+红色0值参考线

小伙伴们早上好啊&#xff01;今天继续为大家分享柱形图的美化技巧。希望大家认真阅读Excel文件和教程&#xff0c;有的图表看起来简单&#xff0c;实际上在细节处理上用了很多技巧&#xff0c;大家要多多体会。C0010-负坐标显示为正数红色0值参考线效果图图表概述本图可以用来…

配置IISExpress允许外部访问

配置IISExpress允许外部访问 1.找到IISExpress的配置文件&#xff0c;位于 <文档>/IISExpress/config文件夹下&#xff0c;打开applicationhost.config&#xff0c;找到如下代码&#xff1a;<site name"WebSite1" id"1" serverAutoStart"tru…

mac预装的php路径,Mac使用系统自带php和Apache

最美的语言本文将介绍在Mac环境下如何使用系统本身所带有的Apache(阿帕奇服务器)通过预装的PHP版本来运行PHP的相关代码&#xff0c;相对来讲在OS X系统下相对好配置一些&#xff0c;因为Apache和PHP都预装好了&#xff0c;如果是Windows环境我们需要自己安装ApachePHPMysql(通…

IP编址,IP地址介绍与子网划分方法

网络层位于数据链路层与传输层之间。网络层中包含了许多协议&#xff0c;其中最为重要的协议就是IP协议。网络层提供了IP路由功能。理解IP路由除了要熟悉IP协议的工作机制之外&#xff0c;还必须理解IP编址以及如何合理地使用IP地址来设计网络。 上层协议类型 以太网帧中的Typ…

3- OpenCV+TensorFlow 入门人工智能图像处理-TensorFlow入门

tensorflow基础入门 思考一个问题: 如何刚好学习TensorFlow 类比为一门开发语言&#xff0c;学会语法&#xff0c;api的调用&#xff0c; 原理性掌握。语言的要素: 基础数据类型 运算符 流程 字典 数组 import tensorflow as tf# 常量&#xff0c;指定数据类型 data1 tf.const…

r 函数返回多个值_第四讲 R描述性统计分析

在“R与生物统计专题”中&#xff0c;我们会从介绍R的基本知识展开到生物统计原理及其在R中的实现。以从浅入深&#xff0c;层层递进的形式在投必得医学公众号更新。在上一讲中&#xff0c;我们介绍了第三讲 R编程基础-矩阵和数据框 (戳这里即可跳转)。到现在为止&#xff0c;大…

百度腾讯中兴华为全部入局Linux Foundation深度学习基金会

2019独角兽企业重金招聘Python工程师标准>>> 虽然名字叫做Linux Foundation&#xff0c;但是这家基金会关注的领域并不局限在Linux操作系统领域。事实上&#xff0c;Linux Foundation基金会还为很多其他开源基金和项目提供支持&#xff0c;比如Cloud Foundry、Autom…

python读取mysql数据库_Python操作MySQL数据库9个实用实例

在Windows平台上安装mysql模块用于Python开发 用python连接mysql的时候&#xff0c;需要用的安装版本&#xff0c;源码版本容易有错误提示。下边是打包了32与64版本。 MySQL-python-1.2.3.win32-py2.7.exe MySQL-python-1.2.3.win-amd64-py2.7.exe 实例 1、取得 MYSQL 的版本 #…