介绍四种绘制词云图的方法
公众号后台回复“图书“,了解更多号主新书内容
作者:叶庭云,https://blog.csdn.net/fyfugoyfa
一、词云图
词云图是一种用来展现高频关键词的可视化表达,通过文字、色彩、图形的搭配,产生有冲击力地视觉效果,而且能够传达有价值的信息。
词云就是通过形成“关键词云层”或“关键词渲染”,对网络文本中出现频率较高的“关键词”的视觉上的突出。
词云图过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。
本文通过对已获取的京东商品评论数据进行预处理、文本分词、词频统计、词云展示,熟悉制作词云的基本方法。
二、stylecloud库绘制词云
1. stylecloud简介
对自己而言,平时用 python 制作词云主要使用wordcloud,如果在可视化的过程还要用 pyecharts 绘制其他图,那么词云也干脆就用pyecharts制作了。stylecloud也是一个 python 绘制词云的包,是一位数据科学家 Max Woolf 基于 wordcloud 优化改良而成。并添加了一些更有用的功能,从而让使用者更易创作出独特并且颜值颇高的词云。
安装
pip install stylecloud -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
stylecloud具有以下特点:
为词云提供(任意大小)的图标形状(通过 Font Awesome 5.11.2 获得)
支持高级调色板(通过 palettable 实现)
为上述调色板提供直接梯度
支持读取文本文件,或预生成的 CSV 文件(包含单词和数字)
提供命令行接口
2. 蒙版图片
影响词云颜值的问题之一就是蒙版图片的生成。
自己制作的蒙版图片要么分辨率不统一,要么需要调整对比度,比较麻烦,stylecloud是直接使用 Font Awesome 这个现成的方案。
网址链接:https://fontawesome.com/license/free
在stylecloud \ static的文件夹下,有一个 fontawesome.min 的 css 文件包含了大量的图标,打开查看里面的内容,发现其中包含很多图标的代码。
这种 css 层叠样式表,咱也看不懂、也不知道咋用呀,多亏有中文网站分门别类罗列了图标的样子和名字。
比如:https://fa5.dashgame.com/#/%E5%9B%BE%E6%A0%87 里面有详细的图标介绍和分类
使用方法如下:
比如要使用苹果商标的蒙版图片,样式前缀 fab,以 fa-为前缀的名称 fa-apple,设置icon_name参数,icon_name='fab fa-apple'即可。
3. 配色
配色是影响词云颜值的又一大问题。stylecloud同样找到了比较好的方案,配色方案使用高级调色板 palettable 来实现。
palettable 网站:https://jiffyclub.github.io/palettable/
我们可以通过修改参数 palette='配色方案' 来达到更改自己的词云配色。
4. 绘制词云
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_stylecloud
import jieba
import re
import 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", "") # 去掉读取每一行数据的\nstop_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_8gen_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 # 设置配色方案)
运行效果如下:
三、wordcloud库绘制词云
wordcloud是优秀的词云展示第三方库 可以在命令行通过pip安装
pip install wordcloud -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
wordcloud库把词云当作一个WordCloud对象
wordcloud.WordCloud( ) 代表一个文本对应的词云
可以根据文本中词语出现的频率等参数绘制词云
绘制词云的形状,尺寸和颜色都可以设定
配置对象参数代码实现:
# -*- coding: UTF-8 -*-
"""
@Author :叶庭云
@CSDN :https://yetingyun.blog.csdn.net/
"""
import jieba
import collections
import re
from wordcloud import WordCloud
import 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", "") # 去掉读取每一行数据的\nstop_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', # 设置背景颜色 默认是blackwidth=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()
词云图:
四、pyecharts库的WordCloud绘制词云
pyecharts是基于echarts的python库,能够绘制多种交互式图表,和其他可视化库不一样,pyecharts支持链式调用。
也就是说添加图表元素、修改图表配置,只需要简单的调用组件即可。
# class pyecharts.charts.WordCloud
class WordCloud(# 初始化配置项,参考 `global_options.InitOpts`init_opts: opts.InitOpts = opts.InitOpts()
)
# func pyecharts.charts.WordCloud.add
def 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/74mask_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 jieba
import collections
import re
from pyecharts.charts import WordCloud
from pyecharts.globals import SymbolType
from pyecharts import options as opts
from pyecharts.globals import ThemeType, CurrentConfigCurrentConfig.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", "") # 去掉读取每一行数据的\nstop_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")
词云图:
用pyecharts绘制的词云图渲染在网页上,具有交互效果,还有很多的配置参数可以设置让词云图看起来更美观。
◆ ◆ ◆ ◆ ◆
麟哥新书已经在京东上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前京东正在举行100-40活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。管理员二维码:猜你喜欢● 卧槽!原来爬取B站弹幕这么简单● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗
介绍四种绘制词云图的方法相关推荐
- 对中国四大名著--红楼梦 使用jieba进行分词处理 排除去停词 统计完整词频并按降序排列 前20词绘制词云图
文章目录 前言 一.jieba是什么? 支持四种分词模式: 支持繁体分词 支持自定义词典 MIT 授权协议 二.直接上代码了 总结 前言 今天用jieba和词云库做个作业,顺便记录一下,作业要求: 1 ...
- python绘制词云图转换图_(数据科学学习手札71)利用Python绘制词云图
1 简介 词云图是文本挖掘中用来表征词频的数据可视化图像,通过它可以很直观地展现文本数据中地高频词: 图1 词云图示例 在Python中有很多可视化框架可以用来制作词云图,如pyecharts,但这些 ...
- echarts词云图形状_用Python 3.8绘制词云图就这么20行代码
艾莎为了寻找父母遇难的真相,以及自己魔力的来源,她与安娜.克斯托夫.驯鹿斯特与雪宝一行远走阿伦戴尔王国,去北方寻找这两个问题的答案,途中发生了一些冒险故事-- 电影<冰雪奇缘2>无论是美轮 ...
- 【更新】四种WinRAR永久去广告方法
四种WinRAR永久去广告方法 Winrar官网下载地址 我的电脑是64位的 就以64位版本进行介绍 方法一: 用Spy++查看广告窗口类名 打开x64dbg附加winrar.exe,运行至winra ...
- R语言如何绘制词云图(17)
1.什么是词云图? "词云"由美国西北大学新闻学副教授.新媒体专业主任里奇·戈登(Rich Gordon)于2006年最先使用.戈登做过编辑.记者,曾担任迈阿密先驱报新媒体版的主任 ...
- 实战|Python轻松实现绘制词云图(附详细源码)
项目背景虽然现在已经有很多现成的制作词云图的工具了,但一般存在以下几个问题:问题一:工具太多,眼花缭乱,质量参差不齐,选择困难症: 问题二:大多词云工具或多或少有一些限制,自定义的空间有限:问题三:有 ...
- 根据词频、背景图绘制词云图
根据词频.背景图绘制词云图 记录一下绘制词云图的过程 首先说明一下,绘制词云图完整的过程应如下: 获取一段文本,也就是要根据这个文本来绘制词云图 制作停用词词典,简单来说,停用词就是分词的规则,例如, ...
- Python爬取《哆啦A梦-伴我同行2》影评,手把手带你绘制词云图!
本文简介 <哆啦A梦:伴我同行2>是纪念<哆啦A梦>50周年的作品之一,于2021年5月28日在中国内地上映. 哆啦A梦系列,是陪伴我,乃至陪伴了几代人成长的故事.50年来,藤 ...
- 数据时代,为大家介绍四种非常好用的 app 数据分析 工具
我们都知道苹果手机的 iOS 系统是一个相对安卓系统来说比较封闭的体系,特别是APP STORE就更是如此了,对外开放的接口非常有限,于是如何作用一些外部 app数据分析 工具来评估自家的APP运营质 ...
最新文章
- mysql中3张表如何关联查询_mysql三张表关联查询
- 没有学不会的C++:用户自定义的隐式类型转换
- 一文读懂:GoogleNet的Inception从v1到v4的演变
- 交互式python shell
- Python由于目标计算机积极拒绝,无法连接。错误解决
- linux kill命令信号,Linux kill 命令详解
- Docker启动容器时出现错误
- Cracking the Coding Interview 6.5
- JAVA运行时异常及常见的5中RuntimeExecption
- JavaScript学习(六十八)—表单校验案例
- requirejs 学习笔记 0
- matlab如何拟合方程,如何用MATLAB拟合曲线来求参数?
- 月活8.89亿背后:微信工程师细数兼容测试经验
- AutoCAD 2007打开慢
- FPGA工程师面试试题集锦41~50
- 无损压缩算法专题——无损压缩算法介绍
- 数字孪生可视化管理平台的意义
- 【数字IC基础知识1之数字芯片设计流程
- [No0000C7]windows 10桌面切换快捷键,win10
- 【设计】死区时间控制
热门文章
- IEEE 文献下载,文献下载,知网下载
- 糖果(2019第十届蓝桥杯省赛C++A组I题) 解题报告(状压dp) Apare_xzc
- 交互设计:依据用户体验要素知识点,进行APP的分析和改良设计。
- django-DIL模板自定义过滤器,自定义标签,自定义包含标签
- windows无法完成更新正在撤销更改
- win10系统 开启蓝牙服务器,win10系统蓝牙在哪开启?
- Linux下CMake工程中gtestgmock的安装与使用
- 25个常用的防火墙规则
- 13 个优秀的 Vue 开源项目及合集推荐
- CSS里的 no-repeat 是什么意思