本文目录导读:

我来详细介绍Python中实现数据相关性分析的几种常见方法。
基础准备:安装必要的库
pip install pandas numpy matplotlib seaborn scipy
基本相关性分析代码示例
1 导入数据和计算相关系数
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
# 创建示例数据
np.random.seed(42)
data = {
'年龄': np.random.randint(20, 60, 100),
'收入': np.random.randint(3000, 20000, 100),
'工作经验': np.random.randint(1, 30, 100),
'消费支出': np.random.randint(1000, 8000, 100)
}
df = pd.DataFrame(data)
# 显示数据前5行
print("数据前5行:")
print(df.head())
# 计算相关系数矩阵
correlation_matrix = df.corr()
print("\n相关系数矩阵:")
print(correlation_matrix)
2 完整的相关性分析流程
# 1. 数据探索
print("数据基本信息:")
print(df.describe())
print("\n缺失值检查:")
print(df.isnull().sum())
# 2. 计算多种相关系数
print("\n皮尔逊相关系数:")
pearson_corr = df.corr(method='pearson')
print(pearson_corr)
print("\n斯皮尔曼相关系数:")
spearman_corr = df.corr(method='spearman')
print(spearman_corr)
print("\n肯德尔相关系数:")
kendall_corr = df.corr(method='kendall')
print(kendall_corr)
可视化相关性分析
1 热力图
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建热力图
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix,
annot=True, # 显示数值
cmap='coolwarm', # 颜色映射
center=0, # 中心值
square=True, # 正方形
linewidths=1, # 网格线宽度
cbar_kws={"shrink": 0.8}) # 颜色条缩放
'变量相关性热力图', fontsize=16)
plt.tight_layout()
plt.show()
2 散点图矩阵
# 散点图矩阵
sns.pairplot(df, diag_kind='kde')
plt.suptitle('变量间关系散点图矩阵', y=1.02)
plt.show()
3 相关性散点图
# 选择两个变量绘制散点图
plt.figure(figsize=(8, 6))
sns.scatterplot(data=df, x='收入', y='消费支出')'收入与消费支出的关系')
plt.xlabel('收入')
plt.ylabel('消费支出')
plt.grid(True, alpha=0.3)
plt.show()
实际案例:股票数据相关性分析
# 模拟股票数据
import yfinance as yf # 需要安装:pip install yfinance
# 示例:使用随机数据模拟
np.random.seed(42)
dates = pd.date_range('2024-01-01', periods=100, freq='D')
stock_data = pd.DataFrame({
'日期': dates,
'股票A': np.random.randn(100).cumsum() + 100,
'股票B': np.random.randn(100).cumsum() + 100,
'股票C': np.random.randn(100).cumsum() + 100,
'股票D': np.random.randn(100).cumsum() + 100
})
stock_data.set_index('日期', inplace=True)
# 计算收益率
returns = stock_data.pct_change().dropna()
# 收益率相关性分析
print("收益率相关系数:")
return_corr = returns.corr()
print(return_corr)
# 可视化收益率相关性
plt.figure(figsize=(10, 8))
sns.heatmap(return_corr, annot=True, cmap='RdYlGn', center=0,
vmin=-1, vmax=1, square=True)'股票收益率相关性热力图')
plt.tight_layout()
plt.show()
高级相关性分析
1 偏相关性分析
from pingouin import partial_corr # 需要安装:pip install pingouin
# 计算偏相关(控制其他变量)
if 'pingouin' in dir():
# 示例:控制工作经验后,收入和消费支出的偏相关
partial_result = partial_corr(data=df, x='收入', y='消费支出',
covar=['工作经验', '年龄'])
print("偏相关分析结果:")
print(partial_result)
2 时间序列相关性分析
# 时间序列的滚动相关性
rolling_corr = stock_data['股票A'].rolling(window=20).corr(stock_data['股票B'])
plt.figure(figsize=(12, 6))
plt.plot(stock_data.index, stock_data['股票A'], label='股票A', alpha=0.7)
plt.plot(stock_data.index, stock_data['股票B'], label='股票B', alpha=0.7)
plt.plot(stock_data.index, rolling_corr, label='20日滚动相关系数', linewidth=2)'股票价格与滚动相关系数')
plt.xlabel('日期')
plt.ylabel('价格 / 相关系数')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
统计显著性检验
# 对相关系数进行显著性检验
def corr_significance(df):
"""计算相关系数的显著性水平"""
p_values = pd.DataFrame(np.zeros_like(df.corr()),
index=df.columns, columns=df.columns)
for i in df.columns:
for j in df.columns:
if i != j:
corr, p_value = stats.pearsonr(df[i], df[j])
p_values.loc[i, j] = p_value
return p_values
# 计算p值
p_values = corr_significance(df)
print("相关系数P值矩阵:")
print(p_values)
# 标记显著性
print("\n显著相关标记(p < 0.05):")
significant = p_values < 0.05
print(significant)
实用函数封装
def comprehensive_correlation_analysis(df, method='pearson',
threshold=0.5, figsize=(12, 10)):
"""
综合性相关性分析函数
参数:
- df: DataFrame
- method: 相关系数方法 ('pearson', 'spearman', 'kendall')
- threshold: 相关性阈值
- figsize: 图表大小
"""
# 1. 计算相关系数
corr_matrix = df.corr(method=method)
# 2. 找出强相关对
strong_corr = []
for i in range(len(corr_matrix.columns)):
for j in range(i+1, len(corr_matrix.columns)):
if abs(corr_matrix.iloc[i, j]) >= threshold:
strong_corr.append({
'变量1': corr_matrix.columns[i],
'变量2': corr_matrix.columns[j],
'相关系数': round(corr_matrix.iloc[i, j], 3)
})
# 3. 可视化
fig, axes = plt.subplots(1, 2, figsize=figsize)
# 热力图
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm',
center=0, square=True, ax=axes[0])
axes[0].set_title(f'{method.capitalize()}相关性热力图')
# 强相关散点图
if strong_corr:
pair = strong_corr[0]
sns.scatterplot(data=df, x=pair['变量1'], y=pair['变量2'], ax=axes[1])
axes[1].set_title(f"最强相关对: {pair['变量1']} vs {pair['变量2']}\n"
f"相关系数: {pair['相关系数']}")
plt.tight_layout()
plt.show()
# 4. 输出结果
print(f"{'='*50}")
print(f"相关性分析方法: {method}")
print(f"相关性阈值: {threshold}")
print(f"强相关对数量: {len(strong_corr)}")
if strong_corr:
print(f"\n强相关对详情:")
for pair in strong_corr:
print(f" {pair['变量1']} - {pair['变量2']}: {pair['相关系数']}")
return corr_matrix, strong_corr
# 使用示例
corr_matrix, strong_corr = comprehensive_correlation_analysis(df)
注意事项
- 数据前提:检查数据是否符合正态分布,选择合适的相关系数方法
- 异常值处理:异常值可能严重影响相关系数
- 多重共线性:高相关性可能表示多重共线性问题
- 因果关系:相关性不等同于因果关系
通过以上代码,你可以完成从基础到高级的数据相关性分析,包括计算、可视化和统计检验。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播