Python数据可视化 词云图 绘制词云的方法总结

您所在的位置:网站首页 在线词云制作 Python数据可视化 词云图 绘制词云的方法总结

Python数据可视化 词云图 绘制词云的方法总结

2023-03-31 05:34| 来源: 网络整理| 查看: 265

文章目录一、词云图词云图是一种用来展现高频关键词的可视化表达,通过文字、色彩、图形的搭配,产生有冲击力地视觉效果,而且能够传达有价值的信息。词云就是通过形成“关键词云层”或“关键词渲染”,对网络文本中出现频率较高的“关键词”的视觉上的突出。词云图过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。本文通过对已获取的京东商品评论数据进行预处理、文本分词、词频统计、词云展示,熟悉制作词云的基本方法。二、wordcloud库绘制词云

wordcloud是优秀的词云展示第三方库

可以在命令行通过pip安装

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

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

wordcloud.WordCloud( ) 代表一个文本对应的词云可以根据文本中词语出现的频率等参数绘制词云绘制词云的形状,尺寸和颜色都可以设定

配置对象参数

代码实现:

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", "") # 去掉读取每一行数据的\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()

词云图:

三、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/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, )

代码实现:

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, 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绘制的词云图渲染在网页上,具有交互效果,还有很多的配置参数可以设置让词云图看起来更美观。

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

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

比如: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. 绘制词云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", "") # 去掉读取每一行数据的\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) # 将palettable配色方案 1587类弄到了本地txt里 读取配色方案 with open('palettable配色方案.txt') as f: choices = f.read().split('\n')[:-1] print(choices) # 个人推荐使用的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=random.choice(choices) # 随机选取配色方案 )

运行效果如下:

gen_stylecloud() 主要参数如下:

text:输入文本,最好在直接调用函数时使用。file_path:输入文本/CSV 的文件路径icon_name:stylecloud 形状的图标名称(如 fas fa-grin-beam),default: fas fa-flagpalette:控制调色方案,stylecloud的调色方案调用了palettable,这是一个非常实用的模块,其内部收集了数量惊人的大量的经典调色方案,默认为 cartocolors.qualitative.Bold_5output_name:stylecloud 的输出文本名。default: stylecloud.pnggradient:梯度方向,(其默认值是 None,如果它的值不是 None,则 stylecloud 使用了方向性梯度)default: Nonesize:控制输出图像文件的分辨率(因为stylecloud默认输出方形图片,所以size传入的单个整数代表长和宽),默认为512font_path:stylecloud 所用字体 .ttf 文件的路径。default: uses included Staatliches fontrandom_state:控制单词和颜色的随机状态background_color:字符串,控制词云图底色,可传入颜色名称或16进制色彩,默认为 whitemax_font_size:stylecloud 中的最大字号 default: 200max_words:stylecloud 可包含的最大单词数 default: 2000stopwords:bool型,控制是否开启去停用词功能,默认为True,调用自带的英文停用词表custom_stopwords:传入自定义的停用词List,配合stopwords共同使用5. 参考文章stylecloud的github: https://github.com/minimaxir/stylecloud科技爸 | 教你用stylecloud做出专业效果的词云图::https://zhuanlan.zhihu.com/p/133254264微信公号文章:https://mp.weixin.qq.com/s/B23uDxzLUa_45uDh2R9Vlw

作者:叶庭云 微信公众号:修炼Python CSDN:https://yetingyun.blog.csdn.net/ 本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。 觉得文章对你有帮助、让你有所收获的话,期待你的点赞呀,不足之处,也可以在评论区多多指正。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3