简简单单wordcloud

你是否也在别人的PPT,报告中见过这样的图片:

查看源图像

查看源图像

感觉很高大上,很牛逼,而苦恼于不清楚怎么去制作,没关系,万能的Python帮你解决。

一.什么是词云

“词云”是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

词云”是数据可视化的一种形式。给出一段文本的关键词,根据关键词的出现频率而生成的一幅图像,人们只要扫一眼就能够明白文章主旨。

二.wordcloud模块带你玩转词云

(一)wordcloud简介与下载

wordcloud是优秀的词云展示第三方库,以词语为基本单位,通过图形可视化的方式,更加直观和艺术的展示文本。

下载的话正常使用pip install wordcloud下载即可,用pip安装不了的见这篇文章:https://zhuanlan.zhihu.com/p/33507393

(二)wordcloud入门

首先从wordcloud库调用WordCloud方法:

1
from wordcloud import WordCloud

使用WordCloud方法创建一个wordcloud对象:

1
wd=WordCloud()

我们让鼠标停留在WordCloud方法上即可详细查看其内容,WordCloud方法需要的参数如下图:

image-20221022002846635

下面我们介绍几个常用的参数:

1.height参数:生成词云图片的高度,默认为200;

2.width参数:生成词云图片的宽度,默认为400,可以和height参数一起使用

1
width=400,height=400/1.618

将图片长宽比设置为黄金分割比;

3.background_color参数:背景颜色,这个想必不用我过多介绍,就是生成的词云图片的背景颜色,默认为黑色,我们可以设置background_color="white",将颜色设为白色;

4.repeat参数:表示单词是否可以重复出现,默认为False

设置前

1
2
3
4
5
6
7
from wordcloud import WordCloud

wd=WordCloud(background_color="white")

wd.generate("hello world python java windows")

wd.to_file("1.png")

image-20221022075036132

设置后

1
2
3
4
5
6
7
from wordcloud import WordCloud

wd=WordCloud(background_color="white",repeat=True)

wd.generate("hello world python java windows")

wd.to_file("1.png")

image-20221022075155099

但我们发现,如果直接这样设置的话生成的字云有一点太密了,这时候就需要下一个参数max_words;

5.max_words参数:词云的最大单词数,默认为200;

6.max_font_size参数:单词的最大字号,还一个min_font_size,是最小字号,默认为4;

7.font_path参数:尝试运行一下这段代码:

1
2
3
4
5
6
7
from wordcloud import WordCloud

wd=WordCloud(background_color="white",repeat=True)

wd.generate("唱 跳 Rap 篮球 蔡徐坤")

wd.to_file("1.png")

发现会得到这样的结果:

image-20221022101147647

发现所有的汉字都变成了方框,这是因为他默认的字体是英文的,不能识别汉字,这时候,我们就需要用font_path参数吧中文字体引进来了。

你电脑里下载好的字体在这里:

image-20221022104312657

选择一个中文字体即可:

1
2
3
4
5
6
7
from wordcloud import WordCloud

wd=WordCloud(font_path="C:\\Windows\\Fonts\\simsun.ttc",background_color="white",repeat=True)

wd.generate("唱 跳 Rap 篮球 蔡徐坤")

wd.to_file("1.png")

image-20221022104644533

8.colormap参数:词云单词的颜色,可以上https://matplotlib.org/stable/tutorials/colors/colormaps.html选择,如我设置colormap为winter:

image-20221022121327227

1
wd=WordCloud(font_path="C:\\Windows\\Fonts\\simsun.ttc",background_color="white",repeat=True,colormap='winter')

结果为:

image-20221022121353015

除此之外,还有各种各样的colormap可以选择

除此之外,也可以自制配色:

这种方法需要从图片中提取配色,例如我想用这张图片的配色:

image-20221022232842173

1
2
3
4
5
6
7
from wordcloud import ImageColorGenerator
from PIL import Image
import numpy as np

colors=np.array(Image.open("780.jpg"))

color_map=ImageColorGenerator(colors)

我们通过将图片转化为array数组来获取它的RGB三通道值,再用wordcloud自带的ImageColorGenerator函数将其转为配色,注意这时候就不能再用colormap参数了,这时候得使用color_func参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
from PIL import Image
import numpy as np

colors=np.array(Image.open("780.jpg"))

color_map=ImageColorGenerator(colors)

wd=WordCloud(font_path="C:\\Windows\\Fonts\\simsun.ttc",background_color="white",repeat=True,color_func=color_map)

wd.generate("唱 跳 Rap 篮球 蔡徐坤")

wd.to_file("1.png")

结果图:

image-20221022233659654

快用这种方法用你喜欢的配色来制作词云吧!!

9,mask参数:给词云生成轮廓用的参数,不需要做成轮廓的背景应为白色,如这是博主利用PS做的一张图片:

image-20221022235831471

将图片转化为array数组的形式,传给mask参数:

1
2
3
4
5
6
7
8
9
10
11
12
from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
from PIL import Image
import numpy as np

mask=np.array(Image.open("cxk.png"))

wd=WordCloud(font_path="C:\\Windows\\Fonts\\simsun.ttc",background_color="white",repeat=True,mask=mask,max_words=150)

wd.generate("唱 跳 Rap 篮球 蔡徐坤")

wd.to_file("1.png")

得到的结果图如下:

image-20221023000022538

运行过程可能会有点慢,这是很正常的,注意如果要自定义配色和定义边框的话,两张图片的大小需要一致;

10.counter_width参数:我们注意到之前生成的图虽然有了边框,但只有一个大致的形状,想要把边框用直线画出来,就需要设置这个参数我们设置contour_width=3,得到的结果为:

image-20221023001619859

图片有了黑色的线条做边框,此外还可以用counter_color参数设置边框的颜色;

11.mode参数:mode参数默认为RGB通道,如果我们想设置词云背景为透明,需要将mode设置为RGBA,background_color设置为None,生成结果为背景透明图片:

image-20221023003740205

这个黑色我也不知道为什么,注意wordcloud有个bug至今未修复,就是设置了透明背景就不能设置counter_width和color,因为通道个数不匹配。

此外wordcloud还有两个重要的函数generate和to_file,generate是以字符串为参数把字符串变成词云,而to_file函数顾名思义就是将生成的词云保存到本地,参数是一个字符串,表示到处结果的路径。

以上就是如何利用wordcloud模块制作词云的教程了,一般来说生成词云的单词并不会直接给出,需要我们从一大段文本中自己提取关键词,这时候就需要Python的另一个文本处理模块jieba了,本次的内容就到处结束了,希望大家积极评论,Thanks♪(・ω・)ノ

End~~ 撒花ฅ>ω<*ฅ花撒