在上篇【Python绘图小课堂】词云韦恩图(上篇-分词) 我们介绍了分词、词频统计,为我们的韦恩图绘制做好了准备。在这一篇,就来讲讲在Python中将结果输出为Excel文件,并绘制我们的词云韦恩图。
Excel结果输出
#Excel输出
path = '.\词频excel文件\词频统计.xlsx'
with pd.ExcelWriter(path) as writer:
comment_all.to_excel(writer,sheet_name = '全部评论词频统计')
comment_high.to_excel(writer,sheet_name = '好评词频统计')
comment_low.to_excel(writer,sheet_name = '中差评词频统计')
comment_inner.to_excel(writer,sheet_name = '好评与中差评交集')
comment_high_diff_low.to_excel(writer,sheet_name = '好评区别于中差评的关键词')
comment_low_diff_high.to_excel(writer,sheet_name = '中差评区别于好评的关键词')
writer.save()
writer.close()
在Python中要实现Excel结果输出,只需要使用 to_excel() 函数即可,如果想要把多个表格输出为一个.xlsx文件的多个sheet,那么就按照上面代码的方式实现,输出效果如下图:
词云韦恩图绘制
首先,我们需要准备好词云的背景图片,也就是找到一张完整的韦恩图。如果想要自行设定颜色、布局,可以打开word,插入形状:
然后,将上面的图形复制一份,调整好位置:
填充为喜欢的颜色:
右击-保存为图像,然后使用 画图 工具打开保存的图片,使用喷枪工具,将其余部分填充为白色,最后得到三张图片:
需要注意的是,上面三张图片大小必须一致,如果不一致,可以后续使用cv2.resize()对三部分词云图进行调整。
下面,我们来绘制词云图。我们的词云图绘制跟传统词云图绘制方法一样,但由于我们后续要“组装”为词云韦恩图,因此我们需要将词云图的输出结果保存起来,具体代码如下:
def world_cloud(img_path,abstract_diff_true_dict,save_path):
"""
绘制并保存词云图
:params img_path:词云背景图片路径
:save_path:词云结果保存路径
"""
img = Image.open(img_path) #打开图片
img_array = np.array(img) #将图片装换为数组
font = r'C:/Windows/Fonts/simfang.ttf'
# 提取背景图片颜色
img_colors = ImageColorGenerator(img_array)
wc = WordCloud(
background_color='black',
width=500,
height=320,
mask=img_array, #设置背景图片
# min_font_size=6,
# max_font_size=200, # 设置字体最大值
max_words=100, # 设置最大显示字数
font_path=font
,
margin = 10,
stopwords=stopwords
)
wc = wc.generate_from_frequencies(abstract_diff_true_dict)
wc.recolor(color_func=img_colors)#设置字体颜色为背景颜色
#避免中文乱码
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10,8),dpi=300)
plt.imshow(wc)
plt.axis('off')#隐藏坐标轴
plt.savefig(save_path, dpi = 300, bbox_inches = 'tight',transparent=True) #保存图片
plt.show() #显示图片
然后,读取我们的背景图像,开始绘制:
def cv_imread(file_path): #解决文件路径存在中文时,读取错误问题
cv_img = cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
return cv_img
path = '.\词云\ '#词云保存路径
comment_high_diff_low_dict= dict(pd.Series(comment_high_diff_low['count'].values, index=comment_high_diff_low['word'].values))
world_cloud('维恩left.png',comment_high_diff_low_dict,path+'true.png') #正确分类专利
comment_low_diff_high_dict= dict(pd.Series(comment_low_diff_high['count'].values, index=comment_low_diff_high['word'].values))
world_cloud('维恩right.png',comment_low_diff_high_dict,path+'false.png') #误分类专利
comment_inner_dict= dict(pd.Series(comment_inner['count'].values, index=comment_inner['word'].values))
world_cloud('维恩inner.png',comment_inner_dict,path+'inner.png') #交集
然后,组装起来:
true_pic = cv_imread(".\词云\ true.png")
false_pic = cv_imread(".\词云\ false.png")
inner_pic = cv_imread(".\词云\ inner.png")
inner_pic = cv2.resize(inner_pic,(1000,700))
false_pic = cv2.resize(false_pic,(1000,700))
true_pic = cv2.resize(true_pic,(1000,700))
plt.axis('off')
new_pic = true_pic+inner_pic+false_pic
plt.imshow(new_pic)
save_path = ".\词云\豆瓣短评词云图.png"
plt.savefig(save_path, dpi = 300, bbox_inches = 'tight',transparent=True) #保存图片
好了,我们的词云图就绘制成功了!
数据文件: https://download.csdn.net/download/qq_36516414/86509771。