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

       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)

     上面的代码中,我们给出来了几种不同形式的实现,接下来我们来看一下具体的结果:
不指定颜色带色系的结果图:

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

指定网格间距的结果图:

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

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

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Together_CZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值