• sns.heatmap() 热地图,包括传统的,下三角,重点(挖空)相关性性图


    sns.heatmap() 热地图

    我一般使用来画特征相关系数的图

    seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None, robust=False, annot=None, fmt='.2g', 
    annotkws=None, linewidths=0, linecolor='white', cbar=True, cbarkws=None, cbar_ax=None, square=False,
    ax=None, xticklabels=True, yticklabels=True, mask=None, **kwargs)

    参数太多就不一一解释了,我就用配置好的,以后都套着用,

    注意,计算相关系数时,只计算数据型的的特征,object不能计算

    import numpy as np
    import pandas as pd 
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    # 读取数据文件
    telcom=pd.read_csv('F:\python\电信用户数据\WA_Fn-UseC_-Telco-Customer-Churn.csv')
    
    # 提取特征
    charges=telcom.iloc[:,1:20]
    # 对特征进行编码
    """
    离散特征的编码分为两种情况:
    1、离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就使用one-hot编码
    2、离散特征的取值有大小的意义,比如size:[X,XL,XXL],那么就使用数值的映射{X:1,XL:2,XXL:3}
    """
    corrDf = charges.apply(lambda x: pd.factorize(x)[0])
    corrDf .head()
    
    corrDf.info()
    
    
    # 构造相关性矩阵
    corr = corrDf.corr()
    corr
    
    # 使用热地图显示相关系数
    '''
    heatmap    使用热地图展示系数矩阵情况
    linewidths 热力图矩阵之间的间隔大小
    annot      设定是否显示每个色块的系数值
    '''
    plt.figure(figsize=(20,16))
    ax = sns.heatmap(corr, xticklabels=corr.columns, yticklabels=corr.columns, 
                     linewidths=0.2, cmap="YlGnBu",annot=True)
    plt.title("Correlation between variables")

    当然描述相关系数时还可以画条形图,特别是描述各特征和y值的相关程度时,还要注意,corr只对数据型数据进行计算

    # 使用one-hot编码
    tel_dummies = pd.get_dummies(telcom.iloc[:,1:21])
    tel_dummies.head()
    
    tel_dummies.info()
    
    
    
    # 电信用户是否流失与各变量之间的相关性
    plt.figure(figsize=(15,8))
    tel_dummies.corr()['Churn'].sort_values(ascending = False).plot(kind='bar')
    plt.title("Correlations between Churn and variables")

    只画下三角的地热图

    fig = plt.figure(figsize = [15,10])
    mask = np.zeros_like(finalTrain.corr(), dtype=np.bool)
    mask[np.triu_indices_from(mask)] = True
    sns.heatmap(finalTrain.corr(), cmap=sns.diverging_palette(150, 275, s=80, l=55, n=9), mask = mask, annot=True, center = 0)
    plt.title("Correlation Matrix (HeatMap)", fontsize = 15)

     20210407补充重点相关性图

    下三角矩阵好像变得更加简洁了,可还是有些多有些乱,虽然我们可以依据颜色的深浅来判别特征之间的强弱相关性,但还是不太方便。我们能不能找出我们所希望看到的那块呢?比如:

    • 我们只想找到强相关的特征来可视化,其余的全部过滤掉。

    其实是可以的,在seaborn数据包的heatmap函数中,还有一个mask函数,可以帮助我们筛选出我们希望看到的部分,例如我们只想看相关性大于0.5的部分

    import numpy as np
    import pandas as pd
    import seaborn as sns
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    from sklearn.datasets import load_iris
    
    iris=load_iris()
    iris.data
    iris.target
    iris.feature_names
    df=pd.DataFrame(iris.data,columns=iris.feature_names)
    iris.target_names
    df['taget']= iris.target
    
    # Calculate pairwise-correlation
    matrix = df.corr()
    cmap = sns.diverging_palette(250, 15, s=75, l=40, n=9, center="light", as_cmap=True)
    # mask掉上三角 & 小于某个阈值的值
    mask1 = np.triu(np.ones_like(matrix, dtype=bool))
    mask2 = np.abs(matrix) <= 0.5
    mask  = mask1 | mask2
    
    plt.figure(figsize=(12, 8)) 
    sns.heatmap(matrix,  mask=mask, center=0, annot=True,fmt='.2f', square=True, cmap=cmap) 

     

     

     

  • 相关阅读:
    webStorage和cookie相比存在的优势
    session、localStorage和cookie之间的区别
    了解常见的状态码
    什么情况下会碰到跨域问题?有哪些方法可以解决
    什么是跨域?跨域请求资源的方式有哪些?
    垃圾回收机制
    400,500错误
    Junit添加完maven依赖无法使用@Test
    Maven资源过滤问题处理
    javascript的一些注意点
  • 原文地址:https://www.cnblogs.com/cgmcoding/p/13356408.html
Copyright © 2020-2023  润新知