简介
Spearman 相关性分析法是一种针对两个变量之间非线性关系的相关性计算方法,同时,它不对数据的分布进行假设。该方法的基本思想是将两个(也可以多个)变量的值进行排序,并计算它们之间的等级相关性(Spearman 相关系数)。Spearman 相关系数的范围在 -1 到 1 之间,取值为 -1 表示完全负相关,取值为 1 表示完全正相关,取值为 0 则表示两个变量之间没有相关性。
基础使用方法
代码示例
import pandas as pdimport seaborn as sns# 构造数据data = { 'x': [1, 3, 5, 7, 9], 'y': [10, 8, 6, 4, 2]}df = pd.DataFrame(data)# Spearman 相关性分析corr = df.corr(method='spearman')print(corr)# 绘制相关系数热力图sns.heatmap(corr, annot=True, cmap="YlGnBu")
参数说明
method
: 相关性分析方法,这里需要指定为 spearman
。
函数返回值
sns.heatmap(corr, annot=True, cmap="YlGnBu")
会绘制出相关系数热力图,其中:
corr
: 相关系数,即 Spearman 相关系数。annot
: 是否在每个方格中显示数值。cmap
: 颜色映射表。
引入多个变量
- Spearman 相关性分析法通常用于分析两个变量之间的关系,但也可以通过计算多组变量之间的 Spearman 相关系数来分析它们之间的相互关系。对于多个变量之间的相关性分析,可以使用 pandas 中的
corr
函数计算这些变量之间的 Spearman 相关系数矩阵。然后,可以使用 seaborn 中的heatmap
函数绘制相关系数矩阵的热力图。
import pandas as pdimport seaborn as sns# 构造数据data = { 'x1': [1, 3, 5, 7, 9], 'x2': [10, 8, 6, 4, 2], 'x3': [9, -7, 5.4, -3, 1], 'x4': [2, 4, 6, 8, 10]}df = pd.DataFrame(data)# Spearman 相关性分析corr = df.corr(method='spearman')print(corr)# 绘制相关系数热力图sns.heatmap(corr, annot=True, cmap="YlGnBu")
在上面的示例代码中,我们构造了一个包含了 4 个变量的数据集,包括 ‘x1’、‘x2’、‘x3’ 和 ‘x4’,然后使用 Spearman 相关性分析法计算了这些变量之间的 Spearman 相关系数矩阵,并绘制了相关系数的热力图。
生成热力图的保存
- 要将生成的 Python 热力图保存为文件,需要使用 Matplotlib 库的
savefig()
函数:
import pandas as pdimport seaborn as snsimport matplotlib.pyplot as plt# 构造数据(可以使用你的数据)data = { 'x1': [1, 3, 5, 7, 9], 'x2': [10, 8, 6, 4, 2], 'x3': [9, -7, 5.4, -3, 1], 'x4': [2, 4, 6, 8, 10]}df = pd.DataFrame(data)# Spearman 相关性分析corr = df.corr(method='spearman')print(corr)# 绘制相关系数热力图sns.heatmap(corr, annot=True, cmap="YlGnBu")# 保存热力图plt.savefig('heatmap.png', dpi=300, bbox_inches='tight')
在这个示例代码中,使用了 Matplotlib 的 savefig()
函数来保存热力图。这个函数的第一个参数是文件的名称和路径。在这个示例中,我们指定了 "heatmap.png"
作为文件名,并将热力图保存在当前工作目录下。dpi
参数设定每英寸像素点数(dots per inch),默认为 100,一般可以设定为 300,以获得更高的分辨率。bbox_inches='tight'
参数用来紧缩图像区域,以避免被裁剪,可以根据需要进行调整。
从excel读取数据
从 Excel 表中获取各个变量的数据,可以使用 Python 中的 Pandas 库。Pandas 可以读取 Excel 表中的数据,并将其转换为 Pandas DataFrame 对象,以便进行数据分析和可视化。
示例代码:
import pandas as pdimport seaborn as sns# 读取 Excel 表中的数据df = pd.read_excel('data.xlsx')# Spearman 相关性分析corr = df.corr(method='spearman')print(corr)# 绘制相关系数热力图sns.heatmap(corr, annot=True, cmap="YlGnBu")
其中,read_excel()
函数用于读取 Excel 文件,其参数指定 Excel 文件的名称和路径。默认情况下,它读取文件中的第一个工作表,并将其转换为 Pandas DataFrame 对象。如果 Excel 文件中有多个工作表,可以使用 sheet_name
参数将指定的工作表读取为 DataFrame 对象。
假设你的 Excel 文件中每一列数据代表一个变量,可以使用以下代码将 Excel 表中的每列数据分离成新的 DataFrame 对象:
# 将列分离成新的 DataFrame 对象var_dict = {}for column in df: var_dict[column] = df[column]# 输出各个变量的数据for key, value in var_dict.items(): print(key, value.tolist())
df[column]
返回一个 Pandas Series 对象,其中包含 Excel 表中某一列的数据。将其存储在一个 Python 的字典对象 var_dict
中,可以使用 tolist()
函数将其转换为 Python 列表以输出各个变量的数据。
然后,可以使用上面的示例代码,在所述的每一列中提取来自幻灯片的各个变量数据,并使用 Spearman 相关性分析法计算它们之间的关系,最后生成相关系数热力图。
来源地址:https://blog.csdn.net/weixin_67016521/article/details/129863814