python词云 wordcloud库详细使用教程

这篇具有很好参考价值的文章主要介绍了python词云 wordcloud库详细使用教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

“词云”这个概念由美国西北大学新闻学副教授、新媒体专业主任里奇·戈登(Rich Gordon)于提出,词云是一种可视化描绘单词或词语出现在文本数据中频率的方式,它主要是由随机分布在词云图的单词或词语构成,出现频率较高的单词或词语则会以较大的形式呈现出来,而频率越低的单词或词语则会以较小的形式呈现。词云主要提供了一种观察社交媒体网站上的热门话题或搜索关键字的一种方式,它可以对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。
例如:(图片来自于网络)
python词云 wordcloud库详细使用教程

你也想做出这么具有视觉震撼效果的词云吗?借助python的wordcloud库便可实现。
wordcloud库不是python内置库,需要安装。windows+R,打开cmd,然后在命令行输入:

pip install wordcloud

等待安装完成即可。
关于wordcloud库最详细的使用教程,可参考:
wordcloud官方文档
本文是在作者参考官网后,然后结合自己的示例整理出。源代码和相关资料下载资源(0积分下载):
https://download.csdn.net/download/weixin_55697913/87697233

使用wordcloud生成词云的步骤

  1. 读取文件,分词整理
    可能会用到字符串相关函数、jieba库等。

  2. 配置对象参数,加载词云文本
    创建一个WordCloud对象,使用.generate()方法加载文本。

  3. 计算词频,输出词云文件
    使用to_file()方法输出到文件。或者利用其他库(如pyplot)展示图像。

生成词云时,wordcloud 默认会以空格标点为分隔符对目标文本进行分词处理。
对于中文文本,分词处理需要由用户来完成,jieba库是常见的中文分词库。
一般步骤是先将文本分词处理,然后以空格拼接,再调用wordcloud库函数。
处理中文时还需要指定中文字体,见本文末尾传入中文字体路径解决乱码问题。

API参考

最重要的一个API:

class wordcloud.WordCloud(font_path=None, width=400, height=200,
 margin=2, ranks_only=None, prefer_horizontal=0.9, mask=None, 
 scale=1, color_func=None, max_words=200, min_font_size=4, 
 stopwords=None, random_state=None, background_color='black', 
 max_font_size=None, font_step=1, mode='RGB', 
 relative_scaling='auto', regexp=None, collocations=True, 
 colormap=None, normalize_plurals=True, contour_width=0, 
 contour_color='black', repeat=False, include_numbers=False, 
 min_word_length=0, collocation_threshold=30)

重要参数详解:

  • font_path:字体路径。使用中文很可能产生乱码,需要下载专门的中文字体,然后将路径传入。
  • width, height:画布的大小。
  • mask:蒙版(熟悉ps的小伙伴应该很清楚),可以传入一个图像当做蒙版,这时width,height会被忽略。蒙版的纯白色部分将没有文字,其他颜色部分将有文字。
  • min_font_size:词云最小字体的大小。max_font_size同理。
  • max_words:最大词语的数量。
  • stopwords:set of strings or None,出现在停用词里的词将不会出现在词云中。如果None,则使用默认的stopwords。如果使用.generate_from_frequencies方法,则会被忽略。
  • background_color:背景颜色,可以直接用white、black等字符串。
  • repeat:bool, default=False。是否可以重复单词。
  • color_func:callable, default=None。可以传入一个函数或者后面提到的ImageColorGenerator,用于给词云上色。

方法:

方法 用法
generate(text) 根据给定的text产生词云,text一般是用空格或者标点符号分割的单词
generate_from_text(text) 跟generate(text)完全等效
generate_from_frequencies(frequencies[, …]) 根据词频建立词云,词频越大字体越大。参数frequencies是一个字典,从单词到频率的映射
fit_words(frequencies) 跟generate_from_frequencies完全等效
to_file(filename) 将产生的词云保存至文件
class wordcloud.ImageColorGenerator(image, default_color=None)

参数:

  • image:nd-array, shape (height, width, 3)

作用:
基于一张图片建立的ImageColorGenerator,可以当做WordCloud类的color_func参数,用于给词云上色。传入一张RGB图片即可,是一个numpy格式的图片。词云上的每个词的染色,是这张图片上对应的矩形区域的颜色平均值。

分词简介

分词,简单来说就是将一段长句子分成一个个的词语。要生成词云肯定是需要以词语为单位的,所以我们需要提前完成分词操作。

英文分词

对于英文句子,其本身就有空格和标点符号,所以很多情况下我们直接传入句子即可。例如:

import wordcloud

sentence='Long ago, there was a big cat in the house. He caught many mice while they were stealing food.'
wc=wordcloud.WordCloud()
wc.generate(sentence)
wc.to_file('img1.jpg')

效果展示:
python词云 wordcloud库详细使用教程

中文分词,jieba

对于中文句子,词与词之间没有分隔符,分词需要我们自己完成。jieba库是一个优秀的中文分词库,如果没有安装,请:

pip install jieba

在jieba中最常用的函数就是jieba.lcut()函数,我们传入一个句子,返回分词后的词语列表。几个最常用的函数是:

方法 用法
jieba.lcut(s) 精确模式,词与词之间没有重合,返回一个列表类型
jieba.lcut(s, cut_all=True) 全模式,得到所有可能的词,返回一个列表类型
jieba.lcut_for_search(s) 搜索引擎模式,返回一个列表类型

例如:

import jieba

list0=jieba.lcut('真正的勇士,敢于直面惨淡的人生,敢于正视淋漓的鲜血这是怎样的哀痛者和幸福者?')
print(list0)
sentence="中华人民共和国"
list1=jieba.lcut(sentence)
list2=jieba.lcut(sentence, cut_all=True)
list3=jieba.lcut_for_search(sentence)
print(list1)
print(list2)
print(list3)
输出:
['真正', '的', '勇士', ',', '敢于', '直面', '惨淡', '的', '人生', ',', '敢于', '正视', '淋漓', 
'的', '鲜血', '这是', '怎样', '的', '哀痛', '者', '和', '幸福', '者', '?']
['中华人民共和国']
['中华', '中华人民', '中华人民共和国', '华人', '人民', '人民共和国', '共和', '共和国']
['中华', '华人', '人民', '共和', '共和国', '中华人民共和国'

分词完成后,一般是利用空格连接分词之后的词语,然后传入wordcloud对象:

list1=jieba.lcut('真正的勇士,敢于直面惨淡的人生,敢于正视淋漓的鲜血这是怎样的哀痛者和幸福者?')
sentence=" ".join(list1)
# 注意,需要传入中文字体路径,不然很可能出现乱码。
wc=wordcloud.WordCloud(font_path='C:\Windows\Fonts\simhei.ttf')
wc.generate(sentence)
wc.to_file('img1.jpg')

python词云 wordcloud库详细使用教程
需要特别注意传入中文很可能产生乱码,最好传入中文字体路径,详情见本文末尾传入中文字体路径解决乱码问题。

matplotlib库简介

maplotlib是一个优秀的python绘图库,经常用在科学绘图中。二维图、三维图、折线图、柱状图、饼状图、热力图……它都能绘制。最常用到的是其子库matplotlib.pyplot
如果未安装,请:

pip install matplotlib

我们可以利用matplotlib库将生成的词云方便地展示出来。但是这一步不是必须的,因为wordcloud就自带了保存至文件的方法to_file。但是涉及到多子图绘制等,就必须用到它了。
一般来说我们之间调用plt.imshow函数,将生成的wordcloud对象传入,然后调用plt.show函数将图展示出来即可,例如:

import matplotlib.pyplot as plt
import wordcloud
import jieba

list1=jieba.lcut('真正的勇士,敢于直面惨淡的人生,敢于正视淋漓的鲜血这是怎样的哀痛者和幸福者?')
sentence=" ".join(list1)
# 注意,需要传入中文字体路径,不然很可能出现乱码。
wc=wordcloud.WordCloud(font_path='C:\Windows\Fonts\simhei.ttf')
wc.generate(sentence)
# wc.to_file('img1.jpg')
plt.imshow(wc) # 传入wordcloud对象
plt.axis('off') # 关闭坐标轴
plt.show() # 将图片展示出来

效果:
python词云 wordcloud库详细使用教程
需要说明的是,可以直接将生成的词云利用to_file方法保存至文件,并不一定需要使用到matplotlib库,仅仅是个人习惯而已。

实例

本文会用到wordcloud库,除此之外,还会用到jiebamatplotlib
jieba库是一个优秀的中文分词库,matplotlib是一个常用的Python 2D绘图库,其子库matplotlib.pyplot提供了多种绘图方法,这两个库不是python内置的库,需要自行安装:

pip install matplotlib
pip install jieba

jieba库中,常用的是jieba.lcut()函数,传入一个中文字符串,返回分词后的单词列表。

关于jieba库和matplotlib库的使用不是本文的重点内容,大家可自行在网上查阅相关资料。

下文的实例将会用到下面的库:

import matplotlib.pyplot as plt
import wordcloud
import jieba

从一段文本建立词云

从一段文本建立词云时,默认单词是以空格或者标点分开的。使用generategenerate_from_text这两种方法,完全等价。

'''从一段文本建立词云'''
text='''面对世界经济复苏乏力、局部冲突和动荡频发、全球性问题加剧的外部环境,
面对我国经济发展进入新常态等一系列深刻变化,我们坚持稳中求进工作总基调,迎难而上,开拓进取,
取得了改革开放和社会主义现代化建设的历史性成就。'''
# 宋体
words=jieba.lcut(text) # 使用jieba库进行中文分词
text=' '.join(words) # wordcloud 默认会以空格或标点为分隔符对目标文本进行分词处理
wd=wordcloud.WordCloud(font_path='C:\Windows\Fonts\simsun.ttc')
wd.generate(text) # 生成词云
plt.imshow(wd)
plt.axis("off") # 关闭坐标轴
plt.show() # 将图展示出来

结果:
python词云 wordcloud库详细使用教程

根据蒙版建立词云

这部分根据可口可乐的广告建立词云(cocacola快给我打钱)
先用ps自己画一个蒙版(准确来说是抠图)
python词云 wordcloud库详细使用教程

然后网上辛苦搜集了广告语:
python词云 wordcloud库详细使用教程

'''从蒙版建立词云'''
str1=''
with open('./data/cocacola.txt','r',encoding='utf-8') as f:
   for line in f:
       str1+=line[4:] # 去掉前面四个数字年份
words=set(jieba.lcut(str1)) # 重复词太多,用set除去重复词
text=' '.join(words)
mask=plt.imread('./imgs/可口可乐.jpg')
# 黑体
stopwords=[]
wc=wordcloud.WordCloud(font_path='C:\Windows\Fonts\simhei.ttf',mask=mask,background_color='white')
wc.generate(text)
wc.to_file('./imgs/from_mask.jpg')

结果:
python词云 wordcloud库详细使用教程

从词频建立词云

还是可口可乐广告。使用generate_from_frequencies或者fit_words方法,完全等价。

generate_from_frequencies(frequencies: Any,max_font_size: Any | None = None) -> WordCloud

frequencies:dict from string to float,从单词到频率的映射。

'''从频率建立词云'''
str1=''
with open('./data/cocacola.txt','r',encoding='utf-8') as f:
    for line in f:
        str1+=line[4:] # 去掉前面四个数字年份
words=jieba.lcut(str1) 

# 统计词频
fre={}
stopwords=['你','的','和','是','了','会','才','\n','---','!','—','----','只']
for word in words:
    if word not in stopwords: # 除去停用词
        fre[word]=fre.get(word,0)+1
    
# 可选用停用词。发现fre中有大量无关的词汇,
# 如'你','的','和','是','了','会','才','\n','---','!','—','----','只'
# 但是需要注意,如果使用generate_from_frequencies,会忽略stopwords,所以要在传入的字典中去掉停用词
mask=plt.imread('./imgs/可口可乐.jpg')
wc=wordcloud.WordCloud(font_path='C:\Windows\Fonts\simhei.ttf',mask=mask,
                       background_color='white',stopwords=stopwords) # 这里传入stopwords其实没用,得去掉fre中的停用词
wc.generate_from_frequencies(fre)
wc.to_file('./imgs/from_frequency.jpg')
'''或者这样做'''
# wc.fit_words(fre)
# wc.to_file('./imgs/from_fit_words.jpg')
'''或者不用统计,直接来'''
# text=' '.join(words)
# wc.generate(text)
#wc.to_file('./imgs/from_gene.jpg')

结果:
python词云 wordcloud库详细使用教程
可见统计词频后,除了一些关键词,其他词的大小明显变小了。
注意,上图中除了可口可乐,其他字都变得很小,是因为可口可乐出现的次数太多了,而此前词语出现的次数只有它的零头:

list1=[(k,v) for k,v in fre.items()]
list1=sorted(list1, key=lambda x: x[1], reverse=True)
print(list1)
输出:
[('可口可乐', 35), (',', 23), ('可乐', 7), ('带来', 6), ('口渴', 5), (' ', 5), 
('就是', 4), ('一杯', 4), ('真正', 4), ('生活', 4), ('在', 3), ('哪里', 3), ('就', 3), 
('有', 3), ...]

可见'可口可乐'出现得实在太多了,挤掉了其他字的空间,并且第二名居然是个中文逗号
为了让图更加“好看一些”,我们可以去掉'可口可乐'和中文逗号

del fre[',']
del fre['可口可乐']
wc=wordcloud.WordCloud(font_path='C:\Windows\Fonts\simhei.ttf',mask=mask,
                       background_color='white') # 这里传入stopwords其实没用,得去掉fre中的停用词
wc.fit_words(fre)
plt.axis('off')
plt.imshow(wc)

python词云 wordcloud库详细使用教程
这样词云终于正常了。
要想做出好看的词云,数据预处理非常重要!!!我们需要去掉标点符号、空白、停用词等可能会影响词云的无关元素。

从图片颜色建立词云

如果又想词云保存某种形状,同时还附带上图片的颜色,可以从图片颜色建立词云。
例如,用一张王者荣耀李元芳的图片建立词云:(图片来自于网络)
python词云 wordcloud库详细使用教程

'''根据图片颜色建立词云'''
image=plt.imread('./imgs/李元芳.jpg')
# 构造ImageColorGenerator
color_generator=wordcloud.ImageColorGenerator(image)
text='李元芳'
# 注意需要指定repeat=True,因为只有一个词
wc=wordcloud.WordCloud(font_path='C:\Windows\Fonts\simhei.ttf',
                       mask=image,background_color='white',repeat=True)
wc.generate(text)
fig, axes = plt.subplots(1, 3)
axes[0].imshow(wc)
# 或者在构建wc时就传入color_func
# wc=wordcloud.WordCloud(font_path='C:\Windows\Fonts\simhei.ttf',mask=image,background_color='white',color_func=color_generator,repeat=True)
axes[1].imshow(wc.recolor(color_func=color_generator))
axes[2].imshow(image)
for ax in axes:
    ax.set_axis_off()
plt.savefig('./imgs/李元芳词云.jpg')
plt.show()

效果:

python词云 wordcloud库详细使用教程

传入中文字体路径解决乱码问题

wordcloud在产生中文文本词云时会出现乱码(产生的汉字是方框),如下图:

'''中文字体乱码'''
text='中文 字体 乱码'
wc=wordcloud.WordCloud()
wc.generate(text)
wc.to_file('./imgs/中文字体乱码.jpg')

python词云 wordcloud库详细使用教程

为了解决这个问题,需要传入电脑中安装的中文字体路径,font_path。
以我们常用的windows系统为例,系统中一般已经安装了中文字体,可进入C:\Windows\Fonts文件夹下,查看可用的中文字体。如下图:
python词云 wordcloud库详细使用教程

例如,想要使用黑体,可对黑体右键-属性-安全,复制其路径即可:
python词云 wordcloud库详细使用教程

# 传入中文字体路径解决乱码问题
text='记得 传入 中文 字体 路径'
wc=wordcloud.WordCloud(font_path='C:\Windows\Fonts\simhei.ttf')
wc.generate(text)
wc.to_file('./imgs/记得传入中文字体路径.jpg')

问题成功解决:
python词云 wordcloud库详细使用教程文章来源地址https://www.toymoban.com/news/detail-479649.html

到了这里,关于python词云 wordcloud库详细使用教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 让你的作品更出色——词云Word Cloud的制作方法(基于python,WordCloud,stylecloud)

    词云Word Cloud的制作方法(基于python) 本文目录: 一、词云的简介 二、 实现原理和流程 1、制作词云流程图 2、词云实现原理 三、 实现词云的方式 1、安装词云相关模块库 2、WordCloud库 3、stylecloud库 四、总结 词云,又称文字云,英文名:Word Cloud。是文本数据的视觉表示形式。

    2023年04月09日
    浏览(49)
  • echarts-wordcloud词云

    echarts-wordcloud是基于echarts的一个插件,所以我们要首先安装echarts包,然后再安装echarts-wordcloud的包,这里我的练习项目安装的版本;当然,你可以随意安装你需要的版本; “echarts”: “^5.3.3”, “echarts-wordcloud”: “^2.0.0”, npm install echarts@5.3.3 npm install echarts-wordcloud@2.0.0 基本

    2024年01月22日
    浏览(40)
  • Wordcloud | 风中有朵雨做的‘词云‘哦!~

    今天可算把 key 搞好了,不得不说🏥里手握生杀大权的人,都在自己的能力范围内尽可能的难为你。😂 我等 小大夫 也是很无奈,毕竟 奔波霸 、 霸波奔 是要去抓唐僧的。 🤐 好吧,今天是 词云 ( Wordcloud )教程,大家都说简单,但实际操作起来又有一些难度,一起试试吧

    2024年02月12日
    浏览(35)
  • PostgreSQL详细教程(一)—— 前言

    目录 PostgreSQL简介 PostgreSQL 特征   PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。 PostgreSQL 开发者把它念作 post-gress-Q-L。 PostgreSQL 的 Slogan 是 \\\"世界上最先进的开源关系型数据库\\\"。 PostgreSQL与Oracle一样是使用共享内存的进程结构,而大家都比较

    2024年02月12日
    浏览(47)
  • 【python 的各种模块】(8) 在python使用matplotlib和wordcloud库来画wordcloud词云图

    目录 目标:用python画出,网上流行的wordcloud词云图 1 准备工作 1.1环境准备 1.1.1安装步骤 1.2 资源准备 1.2.1  文本文件内容如下 1.2.2 图片资源 2 代码测试 2.1 第一版代码和效果 2.1.1 代码和效果 2.1.2 一般plt里解决中文乱码问题 2.1.3 wordcloud的中文显示方框解决办法 2.2 修改后的代

    2024年02月03日
    浏览(74)
  • python--wordcloud库的使用

    目录 1.wordcloud库简介 2.wordcloud的基本使用 3.wordcloud使用实例(在图形中生成词云) 1.词云库简介 wordcloud库是python中的一个第三方库,wordcloud直译过来是“词云” 词云:以词语为基本单位,更加直观和艺术的展示文本。 另外词云库需要先自行安装 安装方法: 命令行安装:c

    2024年02月09日
    浏览(47)
  • WordCloud库的安装教程

    1、查看与自己系统所匹配的WordCloud库的版本       在命令行中输入:pip debug --verbose 2、 下载对应版本的WordCloud文件          下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud       下载后将文件保存至Python Interpreter位置中: 3、下载完成后在命令行中执行安装命令  

    2024年02月03日
    浏览(32)
  • 【详细教程】学会使用Python隧道代理

    作为一名专业爬虫程序猿,我深知在进行网络数据采集时,可能会面临网络封锁、隐私泄露等问题。今天,我将与大家分享如何学会使用Python隧道代理,帮助我们自由访问受限网站,同时保护了解探索Python隧道代理! 首先了解,为什么我们需要使用Python隧道代理? 在当今的

    2024年02月13日
    浏览(39)
  • python安装wordcloud包报错:No module named ‘wordcloud‘

    直接在cmd使用pip install wordcloud进行安装后,在jupyter notebook中导入wordcloud包会报错 发现是因为没有安装在anaconda的路径里 解决方法:打开anaconda prompt进行pip install wordcloud,安装完成后可以在jupyter环境中成功导入 去年这时候安过一次wordcloud包,当时好像也有这个问题,没有及时

    2024年02月11日
    浏览(49)
  • Python数据可视化——Python创建词云创建心形词云(MacWindows都可以运行)

    作者:大锤爱编程的博客_CSDN博客-大数据,Go,数据分析领域博主 关注我能学习到大数据、Python数据分析,以及各种自我提升小技巧 摘要:在本博客中,我们将介绍如何使用Python创建形状词云。我们将使用WordCloud库、NumPy、PIL和Matplotlib创建一个简单而有趣的心形词云。通过本文

    2023年04月23日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包