使用这些基本 REST API 最佳实践构建出色的 API
整合数据分布+拟合线+置信区间+相关系数的皮尔逊相关可视化
背景
在数据分析中,探索特征之间的相关性是非常重要的一步,皮尔逊相关系数、散点图以及线性模型是最常用的三种方法,它们各具优势,通过将这三种方法整合到一个可视化图表中,可以帮助更全面地判断特征之间是否存在线性相关趋势
皮尔逊相关系数
散点图
- 直观呈现两个特征之间的分布趋势,帮助发现是否存在线性模式
- 除了线性关系,散点图还能揭示非线性关系或异常值
线性模型(拟合线及其置信区间)
- 在每个散点图中叠加线性模型的拟合直线及其95%的置信区间,可进一步直观验证特征间的线性关系
- 拟合线清晰展示了两特征之间的趋势方向,置信区间则为关系的可靠性提供统计学支持
- 如果拟合线及其置信区间能很好描述数据分布,说明特征之间的线性关系较强
通过整合皮尔逊相关系数及其显著性水平(p值)、散点图结合线性回归拟合线及置信区间、以及对角线的单变量直方图,用一个矩阵可视化全面展示数据特征间的相关性和分布趋势
代码实现
基础相关性热图绘制
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
import seaborn as sns
warnings.filterwarnings("ignore")
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_excel('2024-12-4-公众号Python机器学习AI.xlsx')
# 计算皮尔逊相关系数矩阵
corr = df.corr()
plt.figure(figsize=(10, 8))
# 使用 Seaborn 绘制热图
sns.heatmap(corr, annot=True, fmt=".2f", cmap="coolwarm", square=True, cbar_kws={"shrink": .8})
plt.title("Correlation Matrix Heatmap")
plt.savefig("Correlation Matrix Heatmap.pdf", format='pdf', bbox_inches='tight', dpi=1200)
plt.show()
这是一个基础的热图绘制,通过计算数据框的皮尔逊相关系数矩阵,利用Seaborn库的heatmap函数可视化各特征间的相关性,热图通过颜色深浅直观展示相关性强弱,是分析特征间关系的简单且常用的方法
如何绘制带拟合线及其置信区间的散点图
基础散点图绘制
plt.figure(figsize=(8, 6))
plt.scatter(df["Variable_1"], df["Variable_2"], alpha=0.7, edgecolor='k')
plt.title("Scatter Plot of Variable_1 vs Variable_2", fontsize=14)
plt.xlabel("Variable_1", fontsize=12)
plt.ylabel("Variable_2", fontsize=12)
plt.grid(alpha=0.3)
plt.savefig("1.pdf", format='pdf', bbox_inches='tight', dpi=1200)
plt.show()
通过plt.scatter() 绘制了一个基础散点图,展示df[“Variable_1”]和df[“Variable_2”]之间的关系,直观反映数据的分布情况。为了进一步分析,可以在此基础上利用statsmodels库拟合线性模型,添加拟合线和置信区间,以可视化两变量之间的线性趋势及其统计可靠性,从而实现更深入的数据洞察
添加拟合线及其置信区间
import statsmodels.api as sm
# 拟合线性模型
X = sm.add_constant(df["Variable_1"]) # 添加常数项以适应截距
model = sm.OLS(df["Variable_2"], X).fit() # 使用最小二乘法拟合
predictions = model.get_prediction(X) # 获取预测结果
confidence_intervals = predictions.conf_int(alpha=0.05) # 获取95%置信区间
# 为拟合线生成 x 和 y 值
x_values = np.linspace(df["Variable_1"].min(), df["Variable_1"].max(), 100)
X_pred = sm.add_constant(x_values)
predicted_means = model.predict(X_pred)
conf_int_pred = model.get_prediction(X_pred).conf_int()
# 绘制散点图和拟合线
plt.figure(figsize=(8, 6))
plt.scatter(df["Variable_1"], df["Variable_2"], alpha=0.7, edgecolor='k', label="Data Points") # 数据点
plt.plot(x_values, predicted_means, color='red', label=f"Fit Line: y = {coefficients[0]:.2f}x + {coefficients[1]:.2f}") # 拟合线
# 绘制置信区间
plt.fill_between(
x_values,
conf_int_pred[:, 0], # 置信区间下界
conf_int_pred[:, 1], # 置信区间上界
color='blue',
alpha=0.2,
label="95% Confidence Interval"
)
plt.title("Scatter Plot of Variable_1 and Variable_2 with Fit Line and Confidence Interval", fontsize=14)
plt.xlabel("Variable_1", fontsize=12)
plt.ylabel("Variable_2", fontsize=12)
plt.grid(alpha=0.3)
plt.legend(fontsize=10, loc='best')
plt.savefig("3.pdf", format='pdf', bbox_inches='tight', dpi=1200)
plt.show()
通过拟合线性模型绘制散点图、拟合线以及95%的置信区间,展示Variable_1和Variable_2之间的线性关系及其统计可靠性
接下来,可以将这逻辑整合到相关系数热图中:上三角保留相关系数热图和显著性标记,下三角绘制散点图并叠加拟合线和置信区间,对角线保留特征的分布直方图,实现全面分析特征间的关系
进阶相关性热图1
构建一个带有多种形式可视化的相关系数可视化,用于全面分析数据特征之间的关系,对角线展示每个特征的直方图和核密度估计 (KDE),直观反映单变量的分布形态;下三角绘制散点图并叠加线性拟合线及95%置信区间,呈现特征间的线性趋势和统计置信度;上三角显示皮尔逊相关系数热图,通过颜色深浅和数字注释量化特征间的相关性强弱。
进阶相关性热图2
增强对特征间线性关系可靠性的统计检验解读,使得相关性分析更具科学性和直观性