np.cov(A,B)
返回矩阵结构:
[[Var(A) Cov(A,B)]
[Cov(A,B) Var(B)]]
对角线元素为变量的方差,非对角线为协方差。
np.corrcoef(A,B)
返回标准化后的协方差矩阵,值域在 [-1,1]。
使用 .rolling(window).corr()
计算时间序列的动态相关性。
给定以下变量,通过协方差和相关系数矩阵计算方差、协方差和相关系数:
import numpy as np
A = np.random.rand(100)
B = -3 * A + np.random.exponential(0.05, 100)
# 计算协方差矩阵和相关系数矩阵
covm = np.cov(___, ___) # 填空
corrm = np.corrcoef(___, ___)
print("A的方差:", covm[0,0])
print("B的方差:", covm[1,1])
print("协方差:", covm[0,1])
print("相关系数:", corrm[0,1])
分析随机变量 C 和 D 的关系:
C = np.random.rand(100)
D = np.random.normal(0, 0.5, 100)
# 补充协方差和相关系数计算代码
covm = ___
corrm = ___
print("C与D的相关系数:", ___)
构建变量 Y,使其与 X 强正相关(非完美)并绘制散点图:
import matplotlib.pyplot as plt
X = np.random.rand(100)
Y = ___ # 设计Y的表达式(提示:线性关系+噪声)
plt.scatter(X, Y)
plt.show()
print("相关系数:", np.corrcoef(X,Y)[0,1])
构建变量 W,使其与 Z 弱负相关:
Z = np.random.rand(100)
W = ___ # 设计W的表达式(提示:负斜率+大噪声)
plt.scatter(Z, W)
plt.show()
print("相关系数:", ___)
使用 yfinance 获取 OKE、LAKE 和 SPY 的收盘价数据,计算它们之间的相关系数:
import yfinance as yf
# 获取2013-2015年数据
data = yf.download(['OKE', 'LAKE', 'SPY'], start='2013-01-01', end='2015-01-01')
prices = ___ # 提取收盘价
oke = prices['OKE']
lake = prices['LAKE']
spy = prices['SPY']
print("OKE与LAKE的相关系数:", ___)
print("OKE与SPY的相关系数:", ___)
在指定股票列表中找出2015年相关性最高的一对:
symbols = ['GSK', 'SNOW', 'FB', 'AZO', 'XEC', 'AMZN']
data = yf.download(___, start='2015-01-01', end='2016-01-01')['Close']
def find_most_correlated(df):
# 实现寻找最高相关系数对的函数
return (pair, max_corr)
print("最高相关对:", find_most_correlated(data))
验证2015年高相关对在2016年是否持续:
# 获取2015和2016年数据
fb_15 = yf.download('FB', start='2015-01-01', end='2016-01-01')['Close']
amzn_15 = ___
fb_16 = ___
amzn_16 = ___
corr_15 = ___
corr_16 = ___
print("2015 vs 2016相关系数:", corr_15, corr_16)
绘制60日滚动相关系数以观察稳定性:
# 获取2015-2017年数据
fb = yf.download('FB', start='2015-01-01', end='2017-01-01')['Close']
amzn = ___
rolling_corr = fb.rolling(60).corr(amzn)
___.plot() # 补充绘图代码
plt.title("60日滚动相关系数")
plt.show()
yfinance
时注意处理多股票数据的列结构。np.random.normal
的标准差)影响相关系数强度。