import numpy as np
x=np.linspace(-4,4,20) #构建[-4,4]上 x 的数据向量
x
np.random.seed(1) #设置随机种子数以便重复结果
e=np.random.randn(20) #随机误差数据向量 e~N(0,1)
e
import matplotlib.pyplot as plt
y1=x
plt.plot(x,y1,'o'); #完全正相关 y=x
y2=-x
plt.plot(x,y2,'o'); #完全负相关 y=-x
y3=x+e
plt.plot(x,y3,'o'); #正相关 y=x+e
y4=-x+e
plt.plot(x,y4,'o'); #负相关 y=-x+e
相关系数的直观分析
fig,ax=plt.subplots(2,2,figsize=(10,8)) #将上述四个图放到一页上
ax[0,0].plot(x,y1,'o')
ax[0,1].plot(x,y2,'o')
ax[1,0].plot(x,y3,'o')
ax[1,1].plot(x,y4,'o')
plt.figure(figsize=(10, 8))
plt.subplot(221)
plt.plot(x,y1,'o')
plt.subplot(222)
plt.plot(x,y2,'o')
plt.subplot(223)
plt.plot(x,y3,'o')
plt.subplot(224)
plt.plot(x,y4,'o')
plt.show()
相关系数的Python计算
plt.plot(x,y1,'o')
np.corrcoef([x,y1])
plt.plot(x,y2,'o');
np.corrcoef([x,y2])
plt.plot(x,y3,'o');
np.corrcoef([x,y3])[0,1]
np.corrcoef([x,y1,y2,y3,y4]) # 对称矩阵
import pandas as pd #构建模拟数据的数据框
xy=pd.DataFrame({'x':x,'y1':y1,'y2':y2,'y3':y3,'y4':y4})
xy
xy.corrwith(xy.x)
pd.plotting.scatter_matrix(xy,figsize=(9,8)); #矩阵散点图
直线回归的可视化模拟
# 定义模拟直线回归函数
import statsmodels.api as sm #加载统计模型包
def reglinedemo(n=20): #模拟样本例数
x=np.arange(n)+1 #自变量取值
e=np.random.normal(0,1,n) #误差项
y=2+0.5*x+e #因变量值
x1=sm.add_constant(x)
x1 #加常数项
fm=sm.OLS(y,x1).fit()
fm #模型拟合,见下
plt.plot(x,y,'.',x,fm.fittedvalues,'r-') #添加回归线,红色
for i in range(len(x)): #画垂直线
plt.vlines(x,y,fm.fittedvalues,linestyles='dotted',colors='b')
np.random.seed(12)
reglinedemo(20)
np.random.seed(12)
reglinedemo(40)
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
# 定义模拟直线回归函数
def reglinedemo(n=20):
x = np.arange(n) + 1 # 自变量取值,从1到n
e = np.random.normal(0, 1, n) # 误差项,服从标准正态分布
y = 2 + 0.5 * x + e # 因变量值,包含截距和斜率以及误差
x1 = sm.add_constant(x) # 在自变量矩阵中添加常数项(截距)
fm = sm.OLS(y, x1).fit() # 使用普通最小二乘法拟合线性回归模型
plt.plot(x, y, '.', x, fm.fittedvalues, 'r-') # 绘制散点图和回归线
for i in range(len(x)): # 循环遍历每个数据点
plt.vlines(x[i], y[i], fm.fittedvalues[i], linestyles='dotted', colors='b') # 画垂直虚线连接实际值与预测值
plt.xlabel('自变量 x')
plt.ylabel('因变量 y')
plt.title('模拟直线回归')
plt.grid(True)
plt.show()
# 调用函数进行演示
reglinedemo()
心得体会
优秀的模型分析需要数学严谨性、计算高效性和视觉表现力的有机结合。模型结果的可视化呈现不仅是分析的终点,更是贯穿整个分析过程的思考工具。通过将抽象的模型结果转化为直观的图形,不仅便于发现潜在问题,也更容易向非技术人员传达分析结论。这次实践让我认识到,数据模型分析与可视化是一个不断迭代的过程。可视化分析展现了数据探索的强大力量。恰当的可视化能够揭示数据中隐藏的模式和异常,这是单纯依靠数值分析难以实现的。