3.2分析特征间的关系

# -*- coding: utf-8 -*-

###############################################################################
#######################            正文代码             #######################
###############################################################################

# 代码 3-5
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei' ## 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
data = np.load('../data/国民经济核算季度数据.npz')
name = data['columns'] ## 提取其中的columns数组,视为数据的标签
values = data['values']## 提取其中的values数组,数据的存在位置

plt.figure(figsize=(8,7))## 设置画布
plt.scatter(values[:,0],values[:,2], marker='o')## 绘制散点图
plt.xlabel('年份')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加y轴名称
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年季度生产总值散点图')## 添加图表标题
plt.savefig('../tmp/2000-2017年季度生产总值散点图.png')
plt.show()



# 代码 3-6
plt.figure(figsize=(8,7))## 设置画布
## 绘制散点1
plt.scatter(values[:,0],values[:,3], marker='o',c='red')
## 绘制散点2
plt.scatter(values[:,0],values[:,4], marker='D',c='blue')
## 绘制散点3
plt.scatter(values[:,0],values[:,5], marker='v',c='yellow')
plt.xlabel('年份')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加纵轴标签
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年各产业季度生产总值散点图')## 添加图表标题
plt.legend(['第一产业','第二产业','第三产业'])## 添加图例
plt.savefig('../tmp/2000-2017年各产业季度生产总值散点图.png')
plt.show()


# 代码 3-7
plt.figure(figsize=(8,7))## 设置画布
## 绘制折线图
plt.plot(values[:,0],values[:,2],color = 'r',linestyle = '--')
plt.xlabel('年份')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加y轴名称
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年季度生产总值折线图')## 添加图表标题
plt.savefig('../tmp/2000-2017年季度生产总值折线图.png')
plt.show()



# 代码 3-8
plt.figure(figsize=(8,7))## 设置画布
plt.plot(values[:,0],values[:,2],color = 'r',linestyle = '--',
        marker = 'o')## 绘制折线图
plt.xlabel('年份')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加y轴名称
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年季度生产总值点线图')## 添加图表标题
plt.savefig('../tmp/2000-2017年季度生产总值点线图.png')
plt.show()



# 代码 3-9
plt.figure(figsize=(8,7))## 设置画布
plt.plot(values[:,0],values[:,3],'bs-',
       values[:,0],values[:,4],'ro-.',
       values[:,0],values[:,5],'gH--')## 绘制折线图
plt.xlabel('年份')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加y轴名称
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年各产业季度生产总值折线图')## 添加图表标题
plt.legend(['第一产业','第二产业','第三产业'])
plt.savefig('../tmp/2000-2017年季度各产业生产总值折线图.png')
plt.show()



###############################################################################
#######################            任务实现             #######################
###############################################################################

# 代码 3-10
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei' ## 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
data = np.load('../data/国民经济核算季度数据.npz')
name = data['columns']## 提取其中的columns数组,视为数据的标签
values = data['values']## 提取其中的values数组,数据的存在位置
p = plt.figure(figsize=(12,12)) ##设置画布

## 子图1
ax1 = p.add_subplot(2,1,1)
plt.scatter(values[:,0],values[:,3], marker='o',c='r')## 绘制散点
plt.scatter(values[:,0],values[:,4], marker='D',c='b')## 绘制散点
plt.scatter(values[:,0],values[:,5], marker='v',c='y')## 绘制散点
plt.ylabel('生产总值(亿元)')## 添加纵轴标签
plt.title('2000-2017年各产业季度生产总值散点图')## 添加图表标题
plt.legend(['第一产业','第二产业','第三产业'])## 添加图例

## 子图2
ax2 = p.add_subplot(2,1,2)
plt.scatter(values[:,0],values[:,6], marker='o',c='r')## 绘制散点
plt.scatter(values[:,0],values[:,7], marker='D',c='b')## 绘制散点
plt.scatter(values[:,0],values[:,8], marker='v',c='y')## 绘制散点
plt.scatter(values[:,0],values[:,9], marker='8',c='g')## 绘制散点
plt.scatter(values[:,0],values[:,10], marker='p',c='c')## 绘制散点
plt.scatter(values[:,0],values[:,11], marker='+',c='m')## 绘制散点
plt.scatter(values[:,0],values[:,12], marker='s',c='k')## 绘制散点
## 绘制散点
plt.scatter(values[:,0],values[:,13], marker='*',c='purple')
## 绘制散点
plt.scatter(values[:,0],values[:,14], marker='d',c='brown')
plt.legend(['农业','工业','建筑','批发','交通',
        '餐饮','金融','房地产','其他']) 
plt.xlabel('年份')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加纵轴标签
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.savefig('../tmp/2000-2017年季度各行业生产总值散点子图.png')
plt.show()



# 代码 3-11
p1 = plt.figure(figsize=(8,7))## 设置画布
## 子图1
ax3 = p1.add_subplot(2,1,1)
plt.plot(values[:,0],values[:,3],'b-',
        values[:,0],values[:,4],'r-.',
        values[:,0],values[:,5],'g--')## 绘制折线图
plt.ylabel('生产总值(亿元)')## 添加纵轴标签
plt.title('2000-2017年各产业季度生产总值折线图')## 添加图表标题
plt.legend(['第一产业','第二产业','第三产业'])## 添加图例
## 子图2
ax4 = p1.add_subplot(2,1,2)
plt.plot(values[:,0],values[:,6], 'r-',## 绘制折线图
        values[:,0],values[:,7], 'b-.',## 绘制折线图
        values[:,0],values[:,8],'y--',## 绘制折线图
        values[:,0],values[:,9], 'g:',## 绘制折线图
        values[:,0],values[:,10], 'c-',## 绘制折线图
        values[:,0],values[:,11], 'm-.',## 绘制折线图
        values[:,0],values[:,12], 'k--',## 绘制折线图
        values[:,0],values[:,13], 'r:',## 绘制折线图
        values[:,0],values[:,14], 'b-')## 绘制折线图
plt.legend(['农业','工业','建筑','批发','交通',
        '餐饮','金融','房地产','其他'])
plt.xlabel('年份')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加纵轴标签
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.savefig('../tmp/2000-2017年季度各行业生产总值折线子图.png')
plt.show()

### 回归分析3.2 示例代码 以下是基于回归分析的例3.2可能涉及的内容,展示了一个完整的线性回归模型实现过程。此示例使用 Python 编程语言及其常用的 `scikit-learn` 库完成。 #### 数据准备与导入 在回归分析中,数据预处理是一个重要环节。这里假设已有一个包含特征和目标变量的数据集。 ```python import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score # 创建虚拟数据作为示例 np.random.seed(42) X = 2 * np.random.rand(100, 1) # 特征 X y = 4 + 3 * X + np.random.randn(100, 1) # 目标变量 y,加入噪声 # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) ``` #### 构建并拟合线性回归模型 利用 `LinearRegression` 类构建简单线性回归模型,并对其进行拟合操作。 ```python # 初始化线性回归模型 linear_reg = LinearRegression() # 使用训练数据拟合模型 linear_reg.fit(X_train, y_train) # 输出模型参数 print(f'Intercept: {linear_reg.intercept_[0]}') # 截距 print(f'Coefficient: {linear_reg.coef_[0][0]}') # 斜率 ``` #### 模型评估 通过均方误差(MSE)和决定系数 \( R^2 \) 对模型性能进行量化评价。 ```python # 进行预测 y_pred = linear_reg.predict(X_test) # 计算 MSE 和 R² mse = mean_squared_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) print(f'Mean Squared Error (MSE): {mse}') print(f'R-squared (R²): {r2}') ``` 以上代码实现了简单的线性回归分析流程,涵盖了从数据准备到模型构建再到最终评估的核心步骤[^1]。 --- #### 扩展:多项式回归 如果需要扩展至更高阶关系,则可以通过引入多项式特征来增强模型表达能力。 ```python from sklearn.preprocessing import PolynomialFeatures # 添加二次项特征 poly_features = PolynomialFeatures(degree=2, include_bias=False) X_poly = poly_features.fit_transform(X_train) # 使用新的多项式特征重新训练模型 poly_reg = LinearRegression() poly_reg.fit(X_poly, y_train) # 测试阶段同样需转换为多项式形式 X_test_poly = poly_features.transform(X_test) y_pred_poly = poly_reg.predict(X_test_poly) # 性能指标 mse_poly = mean_squared_error(y_test, y_pred_poly) r2_poly = r2_score(y_test, y_pred_poly) print(f'Mean Squared Error (Polynomial Regression): {mse_poly}') print(f'R-squared (Polynomial Regression): {r2_poly}') ``` 上述代码片段展示了如何将原始输入空映射到高维空以捕捉更复杂的模式[^2]。 --- #### 处理共线性问题 当面对多重共线性时,可采用岭回归等正则化技术缓解其影响。 ```python from sklearn.linear_model import Ridge # 定义岭回归模型 ridge_reg = Ridge(alpha=1.0) # 正则化强度由 alpha 控制 ridge_reg.fit(X_train, y_train) # 预测与评估 y_pred_ridge = ridge_reg.predict(X_test) mse_ridge = mean_squared_error(y_test, y_pred_ridge) r2_ridge = r2_score(y_test, y_pred_ridge) print(f'Mean Squared Error (Ridge Regression): {mse_ridge}') print(f'R-squared (Ridge Regression): {r2_ridge}') ``` 该部分说明了如何借助正则化手段改善因变量强关联带来的数值不稳定现象[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值