当前位置:   article > 正文

python科研作图系列-01热力图相关性分析_python相关性分析及显著性检验

python相关性分析及显著性检验

参考

数据样本和分析结果

本学渣补充数学知识点:
1 Pearson Correlation(皮尔逊相关系数),详见

这里我自己先创建一个表格,
在这里插入图片描述

重点关注A和B,因为我输入的时候是线性相关的,
CDE 三个栏完全随机,
F 和 G 有一定相关性,但是不如A和B那么明显,
H,I,J 也是乱输入的完全随机。

给出两个代码结果,分别是
给出显著性和不给出显著性的运行结果:
运行一下看看:
不给出显著性的结果:
在这里插入图片描述
给出显著性的结果:
在这里插入图片描述
两个图对比发现图二多了一些星星
代表相关性等级,F和G 的相关性没有A和B高,这和我之前预想的结果一样。

代码的讲解

下面用到的基础知识和函数参数补充:

  • pandas——相关系数函数corr(),可选参数(不加默认第一个)代表不同的相关性系数。
    本例代码中用法按默认来的, df_coor=df.corr()返回值是一个相关系数的矩阵
    API详见
  • 相关系数的数学公式补充
  • plt.figure()参数 说明
  • 注意 重点: plt.gca() 获取当前坐标轴,目的是为了便于下一步的移动,效果如下图,感觉秀婷学姐的图可以用这个函数画,具体怎么移动的代码,详见知乎大佬,我下个代码专门琢磨一下帮秀婷学姐搞一搞
    在这里插入图片描述
  • np.zeros_like(),返回一个和传入的矩阵 形状一样,但是值全为0的矩阵,详见
  • np.triu_indices_from(mask):返回方阵的上三角矩阵的索引,API详见具体用法
  • np.flipud() 用于翻转列表,将矩阵进行上下翻转,详见
  • np.rot90()将矩阵img逆时针旋转90°
  • sns.heatmap()这里的参数除了data以外,其他的都有默认值,所以首先会用基础的,知道怎么传递data是第一步。详见
  • 补充一个sns.heatmap()函数用到的参数mask:用于突出显示某些数据,详见
  • ax1.tick_params()参数,both 是指对横轴和纵轴都操作,后面的参数是长度,其余参数详见

mask那一坨代码完成了两件事:
1 去重
2 去掉一半的矩阵,如果不去掉的效果类似这样
在这里插入图片描述
或者这样
在这里插入图片描述
去掉一半显得更加简洁明了

附代码和运行结果

代码:


import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import pearsonr
import matplotlib as mpl

def cm2inch(x,y):
    return x/2.54,y/2.54

size1 = 10.5
#这块设置字体的,人家设置的本来已经很漂亮了,暂时不关注
mpl.rcParams.update(
{
'text.usetex': False,
'font.family': 'stixgeneral',
'mathtext.fontset': 'stix',
"font.family":'serif',
"font.size": size1,
"font.serif": ['Times New Roman'],
}
)
fontdict = {'weight': 'bold','size':size1,'family':'SimHei'}

#这个地方,放你的Excel文件路径
fp = r'E:\data\test.xlsx'
#这个地方放你的表格里面sheet名称,默认是‘sheet1’,一般不用修改
df = pd.read_excel(fp,sheet_name='Sheet1',header = 0)
#这个函数可选参数为你要使用的相关系数,返回一个含有相关系数的矩阵
df_coor=df.corr()
#指定画图的尺寸,详见博客
fig = plt.figure(figsize=(cm2inch(16,12)))
#plt.gca( )中完成,gca就是get current axes的意思
#先获取当前轴,便于下一步移动,作出你想要的效果。
ax1 = plt.gca()

#构造mask,去除重复数据显示
#返回一个类似形状的元素全为0的矩阵,详见博客
mask = np.zeros_like(df_coor)
print('step1')
print(mask)
#把这个全0元素矩阵的上三角部分赋值为1(也就是true)
mask[np.triu_indices_from(mask)] = True
#用一个mask2 来接收  这个 上三角元素都为1的矩阵
print('step2')
print(mask)
mask2 = mask
# 从这开始 我也看不懂了 每一步都知道啥意思,但是连起来就不知道了
#但是不影响,每次运行完 我加一个print语句输出这个mask是啥,这样就清晰了
mask = (np.flipud(mask)-1)*(-1)
print('step3')
print(mask)
mask = np.rot90(mask,k = -1)
print('step4-------')
print(mask)

im1 = sns.heatmap(df_coor,annot=True,cmap="RdBu"
, mask=mask#构造mask,去除重复数据显示
,vmax=1,vmin=-1
, fmt='.2f',ax = ax1)

ax1.tick_params(axis = 'both', length=0)
#此处填写保存文件的路径
plt.savefig(r'E:\data\r_demo.png',dpi=600)
plt.show()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

运行结果:

step1
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
step2
[[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [0. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
 [0. 0. 1. 1. 1. 1. 1. 1. 1. 1.]
 [0. 0. 0. 1. 1. 1. 1. 1. 1. 1.]
 [0. 0. 0. 0. 1. 1. 1. 1. 1. 1.]
 [0. 0. 0. 0. 0. 1. 1. 1. 1. 1.]
 [0. 0. 0. 0. 0. 0. 1. 1. 1. 1.]
 [0. 0. 0. 0. 0. 0. 0. 1. 1. 1.]
 [0. 0. 0. 0. 0. 0. 0. 0. 1. 1.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]]
step3
[[ 1.  1.  1.  1.  1.  1.  1.  1.  1. -0.]
 [ 1.  1.  1.  1.  1.  1.  1.  1. -0. -0.]
 [ 1.  1.  1.  1.  1.  1.  1. -0. -0. -0.]
 [ 1.  1.  1.  1.  1.  1. -0. -0. -0. -0.]
 [ 1.  1.  1.  1.  1. -0. -0. -0. -0. -0.]
 [ 1.  1.  1.  1. -0. -0. -0. -0. -0. -0.]
 [ 1.  1.  1. -0. -0. -0. -0. -0. -0. -0.]
 [ 1.  1. -0. -0. -0. -0. -0. -0. -0. -0.]
 [ 1. -0. -0. -0. -0. -0. -0. -0. -0. -0.]
 [-0. -0. -0. -0. -0. -0. -0. -0. -0. -0.]]
step4-------
[[-0.  1.  1.  1.  1.  1.  1.  1.  1.  1.]
 [-0. -0.  1.  1.  1.  1.  1.  1.  1.  1.]
 [-0. -0. -0.  1.  1.  1.  1.  1.  1.  1.]
 [-0. -0. -0. -0.  1.  1.  1.  1.  1.  1.]
 [-0. -0. -0. -0. -0.  1.  1.  1.  1.  1.]
 [-0. -0. -0. -0. -0. -0.  1.  1.  1.  1.]
 [-0. -0. -0. -0. -0. -0. -0.  1.  1.  1.]
 [-0. -0. -0. -0. -0. -0. -0. -0.  1.  1.]
 [-0. -0. -0. -0. -0. -0. -0. -0. -0.  1.]
 [-0. -0. -0. -0. -0. -0. -0. -0. -0. -0.]]

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/675381
推荐阅读
相关标签
  

闽ICP备14008679号