python10⾏代码⽣成词云图⽚(基础词云、形状词云)
⼀、词云简介
词云,也称为⽂本云或标签云。在词云图⽚中,关键词在⽂本中出现的次数越多,则表⽰该词越重要,其在词云中所占⾯积区域也越⼤,出现次数越少,所占⾯积越⼩。词云可任意更换背景为⽩⾊的图形以改变词云形状。
⼆、WordCloud原理简介
wordcloud的原理⽐较好理解,⼤致为:
1. ⾸先对⽂本数据进⾏分词,使⽤process_text()⽅法
2. 接着计算每个词在⽂本中的出现频率,⽣成⼀个字典。词频⽤于确定⼀个词的重要性,即词云⽂件中词语的显⽰⼤⼩。
3. 然后根据词频的数值按⽐例⽣成⼀个图⽚的布局,类IntegralOccupancyMap 是该词云的数据可视化⽅式的核⼼。⽣成词的颜⾊、位
置、⽅向等。
4. 最后将词按对应的词频在词云画布上⽣成图⽚,核⼼⽅法是generate_from_frequencies,不论是generate()还是
generate_from_text()都最终⽤到generate_from_frequencies
5. 完成词云上各词的着⾊,默认是随机着⾊,通过调⽤to_file()完成词云⽂件的保存。
三、WordCloud参数
font_path字体路径string,如font_path=''
mask绘制的词云形状nd-array/None,default=None,如果参数为空,则使⽤⼆维遮罩绘制词云。如果 mask ⾮空,设置的宽⾼值将被忽略,遮罩形状被mask取代。全⽩(#FFFFFF)的部分将不会绘制,其余部分会⽤于绘制词云。
width画布宽度int,default=400
height画布⾼度int,default=200
background_color背景颜⾊default="black",如background_color='white',背景颜⾊为⽩⾊max_words词的最⼤个数number,default=200
stopwords需要过滤掉的词如果为空,则使⽤内置的stopwords
prefer_horizontal 单词⽔平⽅向排
版出现频率
float,default=0.9,则词语垂直⽅向排版出现频率为 0.1
scale 按照⽐例进⾏放
⼤画布
float,default=1,如设置为1.5,则长和宽都是原来画布的1.5倍
min_font_size 显⽰最⼩字体⼤
default=4
max_font_size 显⽰最⼤字体⼤
int/None,default=None
font_step 字体⼤⼩迭代步
int,default=1,若步长⼤于1,会加快运算但是可能导致结果出现较⼤的误差
mode背景string,default="RGB",当参数为"RGBA"并且background_color为None时,背景为透明
relative_scaling 单词频率对其字
体⼤⼩的权重
float,⼀般设置为0.5
color_func颜⾊函数default=None
regexp使⽤正则表达式
分隔输⼊的⽂本
string or None (optional),默认为 r"\w[\w']+"
random_state 每个单词返回⼀个PIL颜⾊
collocations 是否包括⼆元词
bool, default=True
collocations
bool, default=True
colormap 对每个词随机分
配颜⾊
default="viridis",若指定color_func,则忽略该⽅法
normalize_plurals 移除单词末尾
的's'
bool,default=True
四、使⽤步骤
安装相应的第三⽅库:
pip install wordcloud
pip install jieba
pip install matplotlib
因为wordcloud⾥的process_text函数是针对英⽂进⾏分词的,⽆法对中⽂更好地分词,只在各种标点符号中切分中⽂,显然这并不是我们想要的效果,所以我们若要⽣成中⽂的词云,需要先对中⽂⽂本进⾏分词再调⽤相应的函数。 分词操作: 通过jieba分词,⽤空格拼接词语字符串,process_text函数就能返回正确的分词计数的字典。
五、python代码
1、基础词云,参考代码如下:
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
text = '⽤python制作词云,⽣成词云图⽚,只⽤10⾏python代码⽣成词云'
cut_word = " ".join(jieba.cut(text))
wc = WordCloud(font_path = r'/')
plt.imshow(wc)
plt.axis("off") # 不显⽰坐标轴
plt.show()
词云展⽰:
备注:增加停⽤词处理,效果会更好,可参考以下形状词云代码。
2、形状词云,参考代码如下:
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
python新手代码图案如何保存# 读取⽂本
with open("./",encoding="utf-8") as f:
sentence = f.read()
print(sentence)
sentence_cut = jieba.lcut(sentence) # ⽣成分词列表
text = ' '.join(sentence_cut) # 以空格连接字符串
#获取停⽤词去掉不需要显⽰的词
stopwords_path = ''
stopwords = [line.strip() for line in open(stopwords_path,'r',encoding='utf-8').readlines()]
# 读⼊背景图⽚
img = Image.open("./monkey2.jpg") # 打开遮罩图⽚
mask = np.array(img) #将图⽚转换为数组
wc = WordCloud(font_path="",
mask=mask,
width = 1000,
height = 700,
background_color='white',
max_words=200,
stopwords=sentence).generate(text)
# 以下代码显⽰图⽚
plt.imshow(wc, interpolation='bilinear')# ⽤plt显⽰图⽚
plt.axis("off") # 不显⽰坐标轴
plt.show()
# wc.to_file("wordcloud2.png") # 保存为本地图⽚
注意:调⽤generate和generate_from_text两种⽅法⼀样,最终都是会调⽤generate_from_text⽅法。使⽤的形状原图:
词云⽣成结果: