Python生成词云图-包教包会 | 奇点产品

/ 0评 / 0

日常工作中,我们会遇到很多的数据处理的问题,其中一个可能碰到就是又大量的文本信息,我们需要处理成能形象生动的表现出来,很直观,一目了然。那么我们就会用到--词云,英文名word cloud。

线上也有很多工具,但是有的不是效果差,就是操作难,或者是完全404,打不开。本次就推荐使用python来生成词云图,之前看了其他的,又不是不行,就是代码有问题。下文的代码,只要是基本配置ok,一定可以运行出来。所以小白的同学,也可以不看代码,直接替换其中的文本文件,和图片文件即可。

版本:python3

所需库:PIL,numpy,matploylib,wordcloud

按照路径来分析一下,我们首先需要分析文本文件,生成一个文本集合,然后在根据这些信息生成图像。但是单一的图像很单调,我们需要增加一张背景图像。

直接撸出一套代码,下边的代码没有图像,直接生成一个我们自己定义的图片。主体,代码里边一个是字体文件的目录,如果没有字体的话,中文显示会有问题,所以我这里在文末会有自提的下载链接,下载下来放到目录即可。

# -*- coding: utf-8 -*- 
from wordcloud import WordCloud 
f = open(u'01.csv','r').read() 
wordcloud = WordCloud(background_color="white",width=1000, height=860, margin=2).generate(f) 
# width,height,margin可以设置图片属性
wordcloud = WordCloud(font_path = r'ttf/simkai.ttf').generate(f) 
# 你可以通过font_path参数来设置字体集 #background_color参数为设置背景颜色,默认颜色为黑色 
import matplotlib.pyplot as plt 
plt.imshow(wordcloud) 
plt.axis("off") 
plt.show()

那么我们看一下上边没有背景图像的代码,所显示的结果:

大概的样子已经有了,但是还是不好看,所以我们往里边加入图片的代码:

# -*- coding: utf-8 -*- 
from os import path 
from PIL import Image 
import numpy as np 
import matplotlib.pyplot as plt 
from wordcloud import WordCloud, ImageColorGenerator 
d = path.dirname(__file__) 
# 获取文本信息 
text = open(path.join(d, 'alice.txt')).read() 
# 获取图片 
img = np.array(Image.open(path.join(d, "03.png"))) 
# 你可以通过 mask 参数 来设置词云形状 
wc = WordCloud(background_color="white", max_words=2000, mask=img, max_font_size=80, random_state=42, font_path = r'ttf/simkai.ttf') 
# 形成词云 
wc.generate(text) 
# 从图片获取颜色 
image_colors = ImageColorGenerator(img) 
# show 
# 在只设置mask的情况下,你将会得到一个拥有图片形状的词云 
plt.imshow(wc, interpolation="bilinear") 
plt.axis("off") 
plt.figure() 
# 我们还可以直接在构造函数中直接给颜色 
# 通过这种方式词云将会按照给定的图片颜色布局生成字体颜色策略 
plt.imshow(wc.recolor(color_func=image_colors), interpolation="bilinear") 
plt.axis("off") 
plt.figure() 
plt.imshow(img, cmap=plt.cm.gray, interpolation="bilinear") 
plt.axis("off") 
plt.show()

 

这段代码里边会显示出三个图像,一个是原图,一个是和图像颜色重合的,一个是没有定义的颜色:

通过上述操作步骤,我们就很简单的实现了词语图。

字体下载:链接:pan.baidu.com/s/1geFWWq 密码:vkd1

发表评论

电子邮件地址不会被公开。 必填项已用*标注