相信大家都会用wordcloud画词云吧,不但可以自定义形状,还可以根据图片制定配色,做出一张非常漂亮的静态词云图。但是如果想做动态的词云,还是用pyecharts的WordCloud更方便。本文两种方式都介绍一下,小伙伴们可以根据需求自行选择。
(前情提要)我爬了拉勾网搜索“设计”职位的招聘信息,Python爬虫获取拉勾网招聘信息详见。并用pyecharts画了地图Geo,Map,条形图以及饼图。详见拉勾网“设计”职位数据分析之用pyecharts画地图Geo,Map,拉勾网“设计”职位数据分析之用pyecharts画条形图Bar,拉勾网“设计”职位数据分析之用pyecharts画饼图(南丁格尔图玫瑰图)Pie
import imageio
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
%matplotlib inline
from wordcloud import WordCloud, ImageColorGenerator
import jieba
import jieba.analyse
这里一定要强调一下,用matplotlib画图不显示中文的话,一定要加上这句plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
试了很多方式都不成功,还是显示方块块,加上这句瞬间治愈!墙裂安利脸!
df = pd.read_excel('lagou_sj0309_155511.xlsx')
#将职位需求合并成一个长字符串
needs=[]
for i in df['need']:
needs.append(i)
set_need=str(needs)
#用jieba分词,将岗位需求切割成词语
cut = jieba.lcut(set_need)
need_cut=' '.join(cut)
#设置停止词,删除跟岗位需求无关的词
stopwords = ['nan','具备','岗位职责','任职','相关','公司','进行','工作','根据','提供','作品','以上学历','优先','计算','经验','学历','上学','熟练','使用','以上',
'熟悉','能力','负责','完成','能够','要求','项目','制作','具有','良好','行业','专业','设计','团队','岗位','优秀','我们','关注'
,'n1','n2','n3','n4','n5','xao','xa0','产品','软件','n6','视频','创意','游戏','需求','视觉','大专','本科','各种','以及','n7','了解','职位','结果'
]
#读取背景图片
mk = imageio.imread('alice_color.png')
wordcloud = WordCloud(background_color='white',
#设置字体为中文字体!!!
font_path="/Library/Fonts/Songti.ttc",
#设置清晰度
scale=15,mask=mk,stopwords=stopwords).generate(need_cut)
image_colors = ImageColorGenerator(mk)
#将图片颜色应用到词云中
wc_color = wordcloud.recolor(color_func=image_colors)
wc_color.to_file('ciyun.png')
plt.imshow(wc_color)
真的很漂亮吧哈哈哈哈,这里强调一下,一定一定要在WordCloud()里加上这句话font_path="/Library/Fonts/Songti.ttc"
设置字体为中文字体!!!下面再来用pyecharts画一个词云
needs=[]
for i in df['need']:
needs.append(i)
set_need=str(needs).replace('n1',"").replace('n2',"").replace('n3',"").replace('n4',"").replace('n5',"").replace('n6',"").replace('n7',"").replace('n',"")
cut = jieba.lcut(set_need)
need_cut=' '.join(cut)
#设置停止词,删除跟岗位需求无关的词
stopwords = ['nan','具备','岗位职责','任职','相关','公司','进行','工作','根据','提供','作品','以上学历','优先','计算','经验','学历','上学','熟练','使用','以上',
'熟悉','能力','负责','完成','能够','要求','项目','制作','具有','良好','行业','专业','设计','团队','岗位','优秀','我们','关注'
,'xa0','产品','软件','n6','视频','创意','游戏','需求','视觉','大专','本科','各种','以及','n7','了解','职位','结果'
]
jieba_need = jieba.analyse.extract_tags(set_need, topK=80, withWeight=True)
jieba_result=[]
for i in jieba_need:
if i[0] not in stopwords:
jieba_result.append(i)
c = (
WordCloud(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))
.add("", jieba_result, word_size_range=[20, 100],shape=SymbolType.RECT)
.set_global_opts(title_opts=opts.TitleOpts(title="岗位需求"))
)
c.render('岗位需求.html')
生成的HTML可以动,很抓眼球,但是配色不太好看,官方文档说支持自定义背景,但是我没有成功,大家可以去官网参考一下,或者在评论区指点一二就更完美啦