文章目录
- 最简单的英文词云生成方法
- 关键词重复多次的英文词云生成方法
- 有形状的英文词云生成方法
- 最终效果
我们经常可以见到可视化表示的生动形象的词频图片,这便是词云,比如统计2019年的搜索热词,我们便可以把搜索量前十的词语做成词云图,搜索量越大,图中出现的词频数就越高,如此就可以生成鲜明的可视化词频图了,那么这样的图片如何通过python批量生成呢?
很幸运,python的wordcloud库为我们提供了现成的方法。
最简单的英文词云生成方法
import matplotlib.pyplot as plt
import wordcloud
#此段用于创建一个存储词汇的字典并导入词汇
dic={}
f=open('source.txt','r')
‘for each in s:
dic.update({each.strip():x})
x+=1
#此段用于生成词云
wc=wordcloud.WordCloud()
wc.generate_from_frequencies(dic)
#此段用于显示词云效果并存储
plt.imshow(wc)
plt.axis("off")
plt.show()
wc.to_file('result.jpg')
效果如图所示
关键词重复多次的英文词云生成方法
完成最简单的词云后,我发现每个词语只会出现一次,于是在查阅资料后,我发现了repeat
函数并作出以下修改。
wc.wordcloud.WordCloud(
max_words=1000, #词云中的最大词汇量
repeat=True #开启词汇重复
)
效果如图所示:
有形状的英文词云生成方法
接下来就是解决词云形状的问题,即把词云变成风车形。此处用到PIL,munpy
库和wordcloud
库中的mask
函数。
修改/添加如下:
mask = np.array(Image.open('logo.jpg'))
wc.wordcloud.WordCloud(
mask=mask, #生成遮罩层
background_color='white', #选择背景色
max_words=1000,
repeat=True
)
mask
函数使词云中字符的颜色与所提供图片对应位置的颜色相同,从而生成对应的紫、红、绿、蓝字符。为方便演示,此处作出如下修改:
wc.wordcloud.WordCloud(
......
background_color='black', #把背景设为黑色以便于演示
......
)
效果如图所示:
可以看到原logo图的四色风叶位置生成了对应的四色字符,而logo图的白色背景位置也生成了对应的白色字符。
那么,要怎么去掉白色字符呢?答案很简单,只要让词云的背景色设置为白色,这些白色字符就会融入背景,看不出来了。
于是我们恢复之前的修改:
wc.wordcloud.WordCloud(
......
background_color='white', #把背景改回白色
......
)
最终效果
最终效果如图所示:
还有一些细节部分,如词云图高度宽度的设置、字体的设置,此处就不一一细说,下面是完整的代码:
import wordcloud
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
dic={}
str=''
x=0
f=open('source.txt')
s=f.readlines()
for each in s:
dic.update({each.strip():x})
x+=1
mask = np.array(Image.open('logo.jpg'))
wc = wordcloud.WordCloud(
height=2000,
width=2000,
collocations=False,
font_path='C:/Windows/Fonts/simhei.ttf',
mask=mask,
max_words=1000,
max_font_size=400,
background_color='white',
repeat=True
)
wc.generate_from_frequencies(dic)
image_colors = wordcloud.ImageColorGenerator(mask)
wc.recolor(color_func=image_colors)
plt.imshow(wc)
plt.axis('off')
plt.show()
wc.to_file('result.jpg')