【Python绘图小课堂】词云韦恩图(下篇-Excel结果输出及词云图绘制)

在上篇【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

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值