持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
今天闲着没事,突然想研究一下python的词云怎么玩,在此记录一下
首先是安装worldcloud,这里有一个坑点就是,wordcloud可能会和python的版本冲突而无法下载
解决方法是到www.lfd.uci.edu/~gohlke/pyt…,这里是下载wordcloud的地方,记住要下载和自己python版本相同的wordcloud,如果不知道版本号就直接win+R,cmd,python -V查看
把下载好的whl文件放到你想安装的路径下,我这里是在项目下的venv的Scripts安装的
安装是命令是pip install wordcloud-1.8.1-cp39-cp39-win_amd64.whl
安装完成后,就是实现词云了
首先是
需要一张照片和一个文本文件
文本文件放的是要生成的词云内容
照片是作为蒙版背景
第二步是创建py文件
这里我又要骂自己粗心了,要注意文件命名不能是wordcloud不然要报错,这个报错真的很蠢!!
写以下代码
import matplotlib.pyplot as plt #数据可视化
import jieba #词语切割
import wordcloud #分词
from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS #词云,颜色生成器,停止词
import numpy as np #科学计算
from PIL import Image #处理图片
def ciyun():
with open('wordcloud.txt','r',encoding='utf-8') as f: #打开文本进行转码
textfile=f.read() #读取文件内容
wordlist=jieba.lcut(textfile)#切割词语
space_list=' '.join(wordlist)#空格键接词语
background=np.array(Image.open('beauty.jpg'))
wc=WordCloud(width=1400,height=2200,
background_color="white",mode='RGB',mask=background,#添加蒙版,生成指定形状的词云,并且词云图的颜色可以从蒙版中提取
max_words=500,stopwords=STOPWORDS.add('老年人'),#这里设置的是屏蔽词,并添加自己设置的词语
font_path='C:\Windows\Fonts\STZHONGS.ttf', #这里设置是为了能生成汉字,没加这句就不能显示中文
max_font_size=150,relative_scaling=0.6,random_state=50,#设置字体大小和词频的关联程度为0.4
scale=2).generate(space_list)
image_color=ImageColorGenerator(background)#设置生成词云的颜色,如去掉这两行则字体为默认颜色
wc.recolor(color_func=image_color)
plt.imshow(wc) #显示词云
plt.axis('off')#关闭x,y轴
plt.show()#显示
wc.to_file('test.jpg')#保存词云图
def main():
ciyun()
if __name__ =='__main__':
main()
写完后运行:
stylecolud是基于wordcloud的python包并且添加了一些有趣的功能
import jieba
import stylecloud
def ciyun():
with open('wordcloud.txt','r',encoding='utf-8')as f:
word_list=jieba.cut(f.read())
result=" ".join(word_list) #分词用空格隔开
stylecloud.gen_stylecloud(
text=result, #上面分词的结果作为文本传给text参数
size=512,
font_path='msyh.ttc',#设置字体
palette='cartocolors.qualitative.Pastel_7', # 调色方案选取,从palettable里选择
gradient='horizontal',#渐变色方向选了垂直方向
icon_name='fab fa-weixin',#蒙版选取,从Font Awesome里选
output_name='test_ciyun.png'#输出词云图
)
def main():
ciyun()
if __name__ == '__main__':
main()
运行结果;