Python进行股票预测分析

查看 40|回复 0
作者:Laburado   
前几天我在论坛里询问了大佬们,有没有相关代码,运行用Python写股票预测价格项目这个期末大作业。许多大佬回复说这个不是CB的事,而是RMB的事了。好在有一位大佬用了ChatGPT-4给了我一些帮助,虽然运算出来的结果不尽人意,但我还是非常感谢,给我提供了思路(都怪上课没好好听)。
    既然我淋过雨,我就要为各位撑起伞!我在这基础上,简化,仅用比较数据集、测试集对其进行股票的预测。这是预测的结果对比图例。


image.png (28.43 KB, 下载次数: 0)
下载附件
开盘价预测
2023-5-30 00:31 上传

首先,我使用pandas库读取训练集和测试集的数据,并对空值进行处理。接下来,我合并了训练集和测试集的数据,并将日期列转换为日期时间类型,并按日期排序。然后,我使用matplotlib.pyplot库绘制了每列数据关于日期的折线图,分别展示了开盘价、最高价、最低价、收盘价和成交量。接着,我提取了训练集和测试集的特征和目标变量,并创建了一个线性回归模型。
我使用训练集数据对模型进行训练,并在测试集上进行预测。然后,我计算了预测结果的均方误差(MSE)、平均绝对误差(MAE)和判定系数(R2)。接下来,我生成了预测结果文件,并保存为CSV格式。最后,我使用matplotlib.pyplot库绘制了预测结果与测试集数据的对比折线图,分别展示了开盘价、最高价、最低价、收盘价和成交量。
[Python] 纯文本查看 复制代码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('项目一submit董昊晨.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('项目一submit姓名.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()
嘿嘿,觉得有帮助的大佬们可以投个币呀!

宋体, 集数

您需要登录后才可以回帖 登录 | 立即注册

返回顶部