关于wordcloud库的安装问题在上一篇的博客中已经介绍了,这篇主要和大家分享我学习使用wordcloud库的一些经历。
tips:需要注意的是使用wordcloud库是依赖numpy库和PIL库的,因此需要提前安装好这两个库。
证据如下:打开wordcloud.py
参考资料如下:https://amueller.github.io/word_cloud/generated/wordcloud.WordCloud.html
wordcloud模块中有三个函数分别是:
wordcloud.WordCloud()
wordcloud.ImageColorGenerator( )
wordcloud.random_color_func( )
wordcloud.WordCloud() #用于生成或者绘制词云的对象
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)
参数介绍:
font_path : 字体路径(需要设置什么样的字体,就将字体路径以字符串的形式传入。默认为wordcloud库下的DroidSansMono.ttf 字体)tips:如果选用默认字体的话,是不能够显示中文字的。为使得能够显示中文,可以自己设置字体。系统字体一般都在C:\Windows\Fonts 目录下。之前别人博客中提到的设置为STFANGSO.TTF就是华文仿宋。选择自己想要设置的字体,然后右击属性,复制路径然后赋值给font_path即可。
width:画布宽度。(学过matplotlib的同学肯定就知道了,默认为400像素)
height:画布高度(默认为200)
margin:每个单词间的间隔 (默认为2)
prefer_horizontal :词语水平方向排版出现的频率(默认为0.9,注意水平排版和垂直排版概率之和为1,因此默认垂直方向排版为0.1)
mask:nd-array or None (default=None), 简单理解为绘制模板。当mask不为0时,那么之前依据height和width设置的画布则作废,此时“画布”形状大小由mask决定。
scale:float (default=1). 计算和绘图之间的比例(就是放大画布的尺寸,也可以叫比例尺)。对于大型词云图,使用比例尺比设置画布尺寸 来得更加快速,但是单词匹配不是很好。
max_words:number (default=200) 最大显示单词字数。
max_font_size:int or None (default=None) 最大单词的字体大小,如果没有设置的话,直接使用画布的大小。
stopwords:set of strings or None 被淘汰不用于显示的词语,默认使用内置的stopwords。
background_color:color value (default=”black”) 词云图像的背景色,默认为黑色。
mode:string (default=”RGB”) 当mode=“RGBA”且background_color=“None”时,将生成透明的背景。
relative_scaling:float (default=’auto’) 词频大小对字体大小的影响度。如果设置为1的话,如果一个单词出现两次那么其字体大小为原来 的两倍。
color_func:callable, default=None 生成新颜色的函数,如果为空,则使用self.color_func。注意的是如果你想要使得字体颜色为统一的颜色,使用如下:
color_func=lambda *args, **kwargs: "white" #所有字体为白色
# 或者通过设置RGB来解决.
color_func=lambda *args, **kwargs: (255,0,0) #所有字体颜色为红色
regexp:string or None (optional) 使用正则表达式分割输入的字符。没有指定的话就使用r"\w[\w']+"。
collocations:bool, default=True 是否包括两个词的搭配(双宾语)
colormap:string or matplotlib colormap, default=”viridis”。颜色映射方法,每个单词对应什么颜色,就是根据这个colormap的。如果设置 color_func ,则设置的这个作废。
repeat: bool, default=False 是否需要重复单词以使得总单词数量达到max_words。
class wordcloud.ImageColorGenerator(image, default_color=None)
依据彩色颜色生成颜色。单词将使用彩色图像中包围矩形的平均颜色进行着色。
生成的对象用法:1、可以传入给wordcloud.WordCloud()构造函数中的color_func参数。
2、可以传入给recolor函数中的color_func参数。
参数介绍:
image :用于生成单词颜色的图像。
wordcloud.random_color_func(word=None, font_size=None, position=None, orientation=None, font_path=None, random_state=None)
默认着色方法。选取一个随机色调,值80%和亮度50%。
具体功能效果,还请大家自己去尝试,静待反馈。
1、fit_words
(frequencies) # 根据词频生成词云图
2、generate
(text) # 根据文本生成词云图
3、generate_from_frequencies
(frequencies[, …]) # 根据词频生成词云图
4、generate_from_text
(text) # 根据文本生成词云图
5、process_text
(text) # 将长文本拆分成单词,消除词尾。
6、recolor
([random_state, color_func, colormap]) # 对现有的字体颜色进行重新染色。重新染色会比重新生成整个词云快很多
3.1 存储
1、to_file
(filename) 导出到图像文件,filename为输出路径 如r ' E:\master\picture.png '
2、通过matplotlib库。(利用plt.imshow(con) 读取生成的词云图,然后 plt.savefig(filename)。 tips:当你使用ipython 或者 python等一步一输出的交互式IDLE时,你会发现保存的图片是空白,不要困扰,这是正常的。解决办法之一就是,你使用文件式IDLE,比如:Spyder,或者jupyter notebook,编写程序后执行。
3.2 词云图展示
1、可以在导出文件后,根据路径找到后直接打开(蠢方法)。
(不嫌麻烦的话,导入PIL库,使用PIL.Image.open(图片路径)即可)
2、使用plt.show(con) 即可。 ##con为使用词云图生成方法后,生成的词云图。
import wordcloud #导入词云库
import numpy as np
import matplotlib.pyplot as plt
import PIL
import jieba
import re
with open(r'E:\master\txt1.txt',encoding='utf8') as f:
text1 = f.readlines()
#导入图片
image1 = PIL.Image.open(r'E:\master\picture.jpg')
MASK = np.array(image1)
WC = wordcloud.WordCloud(font_path = 'C:\\Windows\\Fonts\\STFANGSO.TTF',max_words=2000,mask = MASK,height= 400,width=400,background_color='white',repeat=False,mode='RGBA') #设置词云图对象属性
st1 = re.sub('[,。、“”‘ ’]','',str(text1)) #使用正则表达式将符号替换掉。
conten = ' '.join(jieba.lcut(st1)) #此处分词之间要有空格隔开,联想到英文书写方式,每个单词之间都有一个空格。
con = WC.generate(conten)
plt.imshow(con)
plt.axis("off")
原来图片:
输出图片: