基于 seaborn 的相关性热力图可视化分析

人工智能与算法增长营销云原生可观测

picture.image

作者:沂水寒城,CSDN博客专家,个人研究方向:机器学习、深度学习、NLP、CV

Blog: http://yishuihancheng.blog.csdn.net

seaborn本质上是对matplotlib模块的高级封装,所以要想使用seaborn的功能,首先需要安装好matplotlib的基础环境,现在的安装方式已经极大地简化了,只需要pip安装即可,这里就不再多说明了。

今天主要是想对手里的一个数据集进行简单的分析,分析不同属性特征之间的相关程度,相关性的计算有很多种方法,比如我最常用的就是基于统计学习里面的三大指数来进行计算,主要包括: 皮尔森系数、肯德尔系数和斯皮尔曼系数。 相关性的计算结果可以通过seaborn来进行直观的展示,接下来我们来看一下具体的代码实现,首先是数据加载部分:


        
def Demo(data\_list,savepath='relation.png'):  
    '''  
    数据加载。解析、可视化  
    '''  
    matrix=[]  
    A=[one[2] for one in data_list]  
    B=[one[3] for one in data_list]  
    C=[one[4] for one in data_list]  
    D=[one[5] for one in data_list]  
    E=[one[6] for one in data_list]  
    F=[one[7] for one in data_list]  
    G=[one[8] for one in data_list]  
    matrix=[A,B,C,D,E,F,G]  
    label=['O3','Water','Temp','Humi','See','WS','WD']  
    relationAnalysis(matrix,label,flag='P',savepath=savepath)  

    

接下来是具体的绘图代码实现,如下所示:


        
def relationAnalysis(matrix,label,flag='P',savepath='relation/heatmap\_pearson.png'):  
    '''  
    matrix:不同属性的数据矩阵  
    label:不同因子名称  
    '''  
    all_res=[]  
    for i in range(len(matrix)):  
        one_tmp=[]  
        vector1=matrix[i]  
        for j in range(len(matrix)):  
            vector2=matrix[j]  
            a=pearsonr(vector1,vector2)[0]  
            b=spearmanr(vector1,vector2)[0]  
            c=kendalltau(vector1,vector2)[0]  
            if flag=='P':  
                one_tmp.append(a)  
            elif flag=='S':  
                one_tmp.append(b)  
            elif flag=='K':  
                one_tmp.append(c)  
            else:  
                one_tmp.append((a+b+c)/3)  
        all_res.append(one_tmp)  
    heapMapPlot(all_res,label,savepath=savepath)  

    

接下来是热力图绘制函数:


        
def heapMapPlot(data,key\_list,savepath='relation/heatmap.png'):  
    '''  
    基于相关性系数计算结果来绘制热力图  
    '''  
    colormap=plt.cm.RdBu  
    data=np.array(data)  
    fig,ax=plt.subplots(figsize=(12,12))  
    #不指定颜色带的色系  
    # sns.heatmap(pd.DataFrame(np.round(data,4),columns=key\_list,index=key\_list),annot=True,vmax=1,vmin=0,  
    #             xticklabels=True,yticklabels=True,square=True)  
    #指定颜色带的色系  
    # sns.heatmap(pd.DataFrame(np.round(data,4),columns=key\_list,index=key\_list),annot=True,vmax=1,vmin=0,  
    #             xticklabels=True,yticklabels=True,square=True,cmap="YlGnBu")  
    #指定颜色带的色系  
    # sns.heatmap(pd.DataFrame(np.round(data,4),columns=key\_list,index=key\_list),annot=True,vmax=1,vmin=0,  
    #             xticklabels=True,yticklabels=True,square=True,cmap="RdBu\_r")  
    #指定网格间距  
    # sns.heatmap(pd.DataFrame(np.round(data,4),columns=key\_list,index=key\_list),annot=True,vmax=1,vmin=0,  
    #             xticklabels=True,yticklabels=True,square=True,linewidths=0.3,cmap="RdBu\_r")  
    #指定网格间距+间距颜色  
    sns.heatmap(pd.DataFrame(np.round(data,4),columns=key_list,index=key_list),annot=True,vmax=1,vmin=0,  
                xticklabels=True,yticklabels=True,square=True,linewidths=1,linecolor="green",cmap="RdBu\_r")  
    #sns.heatmap(DataFrame.astype(float),linewidths=0.1,vmax=1.0, square=True, cmap=colormap, linecolor='white', annot=True)  
    plt.title('factorDataAnalysis')  
    plt.savefig(savepath)  

    

上面的代码中,我们给出来了几种不同形式的实现,接下来我们来看一下具体的结果:picture.image

不指定颜色带色系的结果图:

picture.image

指定颜色带色系的结果图:

picture.image

指定网格间距的结果图:

picture.image

指定网格间距+颜色的结果图:

picture.image

当然了,参照官方的API接口还有很多有意思的组合和参数可以去设置和使用,这里给出来了几种比较常用的方式,感兴趣的话可以拿去试试。

赞 赏 作 者

picture.image

Python中文社区作为一个去中心化的全球技术社区,以成为全球20万Python中文开发者的精神部落为愿景,目前覆盖各大主流媒体和协作平台,与阿里、腾讯、百度、微软、亚马逊、开源中国、CSDN等业界知名公司和技术社区建立了广泛的联系,拥有来自十多个国家和地区数万名登记会员,会员来自以工信部、清华大学、北京大学、北京邮电大学、中国人民银行、中科院、中金、华为、BAT、谷歌、微软等为代表的政府机关、科研单位、金融机构以及海内外知名公司,全平台近20万开发者关注。

picture.image

▼点击成为社区注册会员** 喜欢文章,点个**

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
高性能存储虚拟化方案 NVMe over Fabric 在火山引擎的演进
在云计算中,虚拟化存储扮演着重要角色,其中 iSCSI 协议在业界开放、流行多年。近年来,拥有更优性能的 NVMe over Fabrics 协议也得到了发展。本次分享介绍了 NVMe over Fabrics 在云原生和虚拟化方向的演进工作和成果。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论