Python预测股票市场的未来价格及成交量(最最最基础版)

废话不多说,直接放我这次期末大作业内容。zgpa_train.csv中存放着训练数据, zgpa_test.csv为测试数据,根据训练数据预测测试数据中未来的开盘价,收盘价,最高价,最低价及成交量。

算法要求:要求至少使用一种机器学习算法。

什么LSTM(当时模型误差训练出来只有5%的错误率,确实不错了)RNN,我在写的时候,直接炸裂,根本不会啊!直接上最基础的线性回归算法,对训练集和测试集的数据进行比较,嘿嘿嘿,主打的就是一个快速解决期末大作业!(实际上花了很久很久时间!)

先讲一下思路:使用pandas库读取训练集和测试集的数据,并对空值进行处理。接下来,合并了训练集和测试集的数据,并将日期列转换为日期时间类型,并按日期排序。然后,使用matplotlib.pyplot库绘制了每列数据关于日期的折线图,分别展示了开盘价、最高价、最低价、收盘价和成交量。接着,提取了训练集和测试集的特征和目标变量,并创建了一个线性回归模型。使用训练集数据对模型进行训练,并在测试集上进行预测。然后,计算了预测结果的均方误差(MSE)、平均绝对误差(MAE)和判定系数(R2)。接下来,生成了预测结果文件,并保存为CSV格式。最后,我用matplotlib.pyplot库绘制了预测结果与测试集数据的对比折线图,分别展示了开盘价、最高价、最低价、收盘价和成交量。这些做题思路涵盖了数据清洗、特征提取、模型训练和预测、性能评估以及结果可视化等关键步骤。

数据处理细节

1.处理空值:在代码中,我使用了dropna()函数来删除包含空值的行。这样可以确保数据集中不包含空值。

train_data = train_data.dropna()

test_data = test_data.dropna()

2.合并数据集:我使用了concat()函数来合并训练集和测试集的数据,并将结果存储在all_data变量中。

all_data = pd.concat([train_data, test_data])

3.转换日期列:使用pd.to_datetime()函数将日期列转换为日期时间类型。这将确保日期以正确的格式进行排序和显示。

all_data['date'] = pd.to_datetime(all_data['date'])

4.排序数据:使用sort_values()函数按日期对数据进行排序,以确保数据按照日期的顺序进行绘制和处理。

all_data = all_data.sort_values(by='date')

淋过的雨,我将为你撑伞!

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score

# 读取训练集和测试集数据
train_data = pd.read_csv('zgpa_train.csv')
test_data = pd.read_csv('zgpa_test.csv')

# 处理空值
train_data = train_data.dropna()
test_data = test_data.dropna()

# 合并训练集和测试集数据
all_data = pd.concat([train_data, test_data])

# 将日期列转换为日期时间类型
all_data['date'] = pd.to_datetime(all_data['date'])

# 按日期排序数据
all_data = all_data.sort_values(by='date')

# 获取数据列名称
columns = ['open', 'high', 'low', 'close', 'volume']

# 逐列生成折线图
for column in columns:
plt.figure()  # 创建新的图表
plt.plot(all_data['date'], all_data[column])  # 绘制折线图

# 设置图例和标题
plt.legend([column.capitalize()])
plt.title('Stock Data: {}'.format(column.capitalize()))
plt.xlabel('Date')
plt.ylabel('Value')

# 显示图形
plt.show()

# 提取特征和目标变量
train_features = train_data[['open', 'high', 'low', 'volume']]
train_target = train_data['close']

test_features = test_data[['open', 'high', 'low', 'volume']]
test_target = test_data['close']

# 创建线性回归模型
model = LinearRegression()

# 在训练集上训练模型
model.fit(train_features, train_target)

# 在测试集上进行预测
predictions = model.predict(test_features)

# 计算均方误差
mse = mean_squared_error(test_target, predictions)
print('均方误差(MSE):{:.2f}'.format(mse))

# 计算平均绝对误差
mae = mean_absolute_error(test_target, predictions)
print('平均绝对误差(MAE):{:.2f}'.format(mae))

# 计算判定系数
r2 = r2_score(test_target, predictions)
print('判定系数(R2):{:.2f}'.format(r2))

# 生成预测结果文件
result_df = pd.DataFrame({'date': test_data['date'],
'open': ['{:.2f}'.format(x) for x in predictions],
'high': ['{:.2f}'.format(x) for x in predictions],
'low': ['{:.2f}'.format(x) for x in predictions],
'close': ['{:.2f}'.format(x) for x in predictions],
'volume': ['{:.0f}'.format(x) for x in test_data['volume']]})

result_df.to_csv('项目一submitDHC.csv', index=False)

# 读取测试集数据
test_data = pd.read_csv('zgpa_test.csv')

# 将日期列转换为日期时间类型
test_data['date'] = pd.to_datetime(test_data['date'])

# 按日期排序测试集数据
test_data = test_data.sort_values(by='date')

# 读取预测结果数据
prediction_data = pd.read_csv('大作业submitDHC.csv')

# 将日期列转换为日期时间类型
prediction_data['date'] = pd.to_datetime(prediction_data['date'])

# 按日期排序预测结果数据
prediction_data = prediction_data.sort_values(by='date')

# 获取数据列名称
columns = ['open', 'high', 'low', 'close', 'volume']

# 绘制折线图
for column in columns:
plt.figure()  # 创建新的图表

# 绘制测试集数据折线图
plt.plot(test_data['date'], test_data[column], label='Test Data')

# 绘制预测结果数据折线图
plt.plot(prediction_data['date'], prediction_data[column], label='Prediction')

# 设置图例和标题
plt.legend()
plt.title('Comparison: {} - Test Data vs Prediction'.format(column.capitalize()))
plt.xlabel('Date')
plt.ylabel('Value')

# 显示图形
plt.show()

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DHC丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值