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

作者:叶庭云

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

/ 01 / 词云图

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

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

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

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

/ 02 / stylecloud库绘制词云

01 stylecloud简介

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

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

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

安装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 文件包含了大量的图标,打开查看里面的内容,发现其中包含很多图标的代码。

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

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

使用方法如下:

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

03 配色

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

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

我们可以通过修改参数 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    # 设置配色方案
)

运行效果如下:

/ 03 / 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 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()

词云图:

/ 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")

词云图:

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

恋习Python

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

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

  1. python怎么设置文字云_超燃的文字云效果,用Python就能轻松get!

    原标题:超燃的文字云效果,用Python就能轻松get! 本文转载自公众号:数据森麟(ID:shujusenlin) 作者:叶庭云 链接:https://blog.csdn.net/fyfugoyfa ...

  2. wps流程图怎么不能添加文字_怎样使用WPS文字快速制作美观的流程图

    WPS 文字快速制作美观的流程图 来源:互联网 作者:佚名 时间: 10-09 16:40:46 [大 中 小] 点评 :流程图简明易懂,在工作中应用很广,经常出现在文档中,下面我们就来探讨一下怎么样 ...

  3. java图片加气泡文字_图片加气泡文字

    现在微信聊天少不了表情图片,这越有个性.独特的就越受大众喜爱,每每看到好看的图片时,大家也会忍不住收藏起来用.那你有没有想过自己P图呢?学一下PS图片创作一些独一无二的搞笑表情图,放在微信上秀秀吧,也 ...

  4. html怎么在图片上加文字_怎么把图片文字转换成word文档

    我们在和别人交流的时候,有时候为了方便对方查看和理解,我们会使用文字图片进行交流,这是一种非常方便交流的形式.那如果我们想要将图片里的文字转换成Word文档应该怎么操作? 如果我们想要将图片识别为Wo ...

  5. 微信小程序识别图片并提取文字_分享一个 OCR 文字识别,高效图片转文字的微信小程序...

    从白描 App 上线那天起,就一直有人问有没有小程序,我们一直的回答就是:不好意思,暂时没有计划.那从今天开始,就应该回答:去微信里搜索「白描取字扫描」小程序来免费使用吧! 为什么不叫「白描」?当然想 ...

  6. 讯飞语音转文字_录音实时转文字就是如此简单 讯飞智能录音笔SR701评测

    对于职场人来讲,信息的记录和整理是件即基础又核心的能力.录音笔无疑是一个全面的及信息记录工具,同时也是被更多职场人士忽略的办公设备,因为每次记录过后,都需要逐句的将录音内容转换成文字进行整理归档,这无 ...

  7. cad图纸问号怎么转换文字_打开CAD图纸文字全部显示问号,这是为什么?怎么解决...

    最近又多了一些询问CAD界面乱糟糟, CAD文字显示问号的小伙伴,这是为什么?怎么进行解决?造成原因是什么呢? 其实就是因为字体乱码了,造成这一情况的原因无非就是两种,字体缺失,文件版本不兼容,如何解 ...

  8. python是哪个人创造的文字_最早的文字是谁发明的

    展开全部 仓颉发明的. 原因如下: 1.由史料记载可知,在2500多年前的春秋战国时期,仓颉造字说已经e68a8462616964757a686964616f31333366303764是当时社会的一 ...

  9. python调用百度语音实时转为文字_百度语音转文字 (Python)

    感受好久没写中文技术文章了.说实话,学东西都是基于英文,或者 别人从英文翻译成中文 咱们再捡二手货学习.因此用中文写技术文章怎么都感受是在骗人,怎么都以为很别扭.编程 可是这一次的主角是百度.框架 虽 ...

最新文章

  1. ICML 2019全纪录:论文解读、workshop讨论、核心知识都在这里了
  2. SAP LSMW批导数据的几个注意点
  3. 刷题≠学好数学,近百位名校名师告诉你,数学是怎么学好的?
  4. composer中文阿里云镜像地址
  5. 无法加载一个或多个请求的类型。有关更多信息,请检索 LoaderExceptions 属性
  6. INFO:AdminStudio Debug
  7. 如何在vs2020编译c语言程序,如何在使用WIN10 Visual Studio 2015 编译FlightGear源码(2020.1.1版本)(示例代码)...
  8. c语言指针向前移动i个位置,C语言指针
  9. 【你们项目组有几个测试,你负责什么,迭代了几个版本,迭代周期,写了多少测试用例?】
  10. php字符串去掉指定字符串,php怎么去除指定字符串
  11. 哈希算法(哈希函数)基本
  12. 操作系统第2章作业题答案
  13. 2022年中南大学计算机考研复试内容是什么
  14. html中斜体样式怎么写,html i 斜体标签
  15. 【云栖大会】马云口中创造未来的年轻人,把数据+环保玩出了新花样
  16. 学习-Java字符串之String类常用方法之字符串长度
  17. 身份证号码有效性验证
  18. 如何将flash源文件在flash MX里整体缩放或移动!
  19. android录音波浪动画_Android自定义View实现波浪动画
  20. UG后处理—进给速度R模式输出研究

热门文章

  1. 的优缺点_浅谈桉木家具的优缺点
  2. php strchr 截断,PHP strchr() 函数
  3. Java 答疑:JDK 11(Java 11)之后没有 JRE 目录,环境用户变量配置的解决方法
  4. 普通用户无法执行java,CentOS tomcat普通用户执行配置安装
  5. 蓝牙耳机声音一顿一顿的_线控耳机党阵地转移成功,OPPO这款TWS耳机体验满分...
  6. g标签 怎么设置svg_SVG g元素
  7. python爬电影_使用Python多线程爬虫爬取电影天堂资源
  8. 百度云盘云知梦php_教你搭建私有云盘,简单快速,完全傻瓜式!不限速,永久有效!...
  9. oracle的exp和imp,oracle exp和imp
  10. LDAP----manage-account