【数据可视化】使用Python进行词云绘制
使用Python绘制词云
1、制作效果:
绘制词云效果图:
词云图中文本原文,复制文本保存到txt中:
https://36kr.com/p/5309006 (《最前线丨瑞幸董事长陆正耀朋友圈致歉:十分自责,将承担应有责任》)
2、制作步骤:
2.1 需预先准备的包:
import wordcloud #导入词云库
import numpy as np
import matplotlib.pyplot as plt
import PIL
import jieba
import re
提前在PyCharm中下载好。其中,下载PIL一直报错
经排查发现是由于版本问题,目前PIL的官方最新版本为1.1.7,支持的版本为python 2.5, 2.6, 2.7,并不支持python3,因此我们用pillow代替,下载并安装pillow即可。
2.2 wordcloud.WordCloud() 函数
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字体)
如果选用默认字体的话,是不能够显示中文字的。为使得能够显示中文,可以自己设置字体。系统字体一般都在C:\Windows\Fonts 目录下。选择自己想要设置的字体,然后右击属性,复制路径然后赋值给font_path即可。
更多参数说明可参考:https://blog.csdn.net/moshanghuali/article/details/84667136
2.3 词云图生成方法
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]) # 对现有的字体颜色进行重新染色。重新染色会比重新生成整个词云快很多
2.4 结果存储&展示
1)存储:to_file(filename) 导出到图像文件
2)plt.show(con) 即可。 ##con为使用词云图生成方法后,生成的词云图。
最终代码:
import wordcloud #导入词云库
import numpyas np
import matplotlib.pyplotas plt
import PIL
import jieba
import re
#导入文本
with open(r'E:\hill2020\Python相关\text1.txt',encoding='utf8')as f:
text1 = f.readlines()
#导入图片
image1 = PIL.Image.open(r'C:\Users\addqlee\Pictures\鹿.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))#此处分词之间要有空格隔开,联想到英文书写方式,每个单词之间都有一个空格。
wc = WC.generate(conten)
plt.imshow(wc)
#保存结果到png
wc.to_file('wolfcodeTarget.png')