吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8164|回复: 64
收起左侧

[Python 原创] Python进行股票预测分析

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

开盘价预测

开盘价预测

首先,使用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()

嘿嘿,觉得有帮助的大佬们可以投个币呀!

免费评分

参与人数 14吾爱币 +21 热心值 +12 收起 理由
似水无痕 + 1 + 1 我很赞同!
日月与你 + 1 + 1 热心回复!
fsdfsd + 1 + 1 我很赞同!
Thephosphor + 1 + 1 用心讨论,共获提升!
小白无常 + 1 + 1 用心讨论,共获提升!
天马行空Star + 2 + 1 用心讨论,共获提升!
Rogers5 + 1 我很赞同!
ITCZ + 1 + 1 我很赞同!
bochenchen + 1 + 1 用心讨论,共获提升!
MAOSKE + 1 + 1 谢谢@Thanks!
gjq1 + 1 用心讨论,共获提升!
Platos + 1 + 1 谢谢@Thanks!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
658758 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

harryxie 发表于 2023-5-31 09:07
大佬,能不能弄个成品,造福广大股民
jiewen0627 发表于 2023-7-10 11:20
为了量化研究了很久,结论是走势是不可预测的,但是,可以跟随,顺势而为~也是某种意义的预测,就是猜更大概率的可能嘛哈哈哈
风子是我 发表于 2023-6-1 14:55
微信图片_20230601145444.png

出现这个提示了,我已经安装了这个模块的。是我的版本太高了吗?
py学徒 发表于 2023-5-31 10:37
采集、技术、分析,都可以。但要是做预测,可能不合理。
为你的坚持,点赞!
ITgod 发表于 2023-5-31 11:20
zgpa_test.csv楼主这个文件能发一下吗
bjlaoge 发表于 2023-5-31 11:30
'zgpa_train.csv,'zgpa_test.csv'这两个CSV文件发一下吧,要不然没办法测试啊
htxz2022 发表于 2023-5-31 12:16
这个怎么说呢,准的时候很准,不准的时候就不准了
风子是我 发表于 2023-5-31 16:20
两个csv文件在楼主的提问帖中可以下载。
我运行后,出错,没看来是什么原因。
微信图片_20230531161838.png
 楼主| Laburado 发表于 2023-5-31 22:11
bjlaoge 发表于 2023-5-31 11:30
'zgpa_train.csv,'zgpa_test.csv'这两个CSV文件发一下吧,要不然没办法测试啊

提问帖子里有的,你可以去下载一下
 楼主| Laburado 发表于 2023-5-31 22:12
ITgod 发表于 2023-5-31 11:20
zgpa_test.csv楼主这个文件能发一下吗

提问帖子里有的,可以去下载一下
 楼主| Laburado 发表于 2023-5-31 22:12
py学徒 发表于 2023-5-31 10:37
采集、技术、分析,都可以。但要是做预测,可能不合理。
为你的坚持,点赞!

主打就是完成期末大作业,之后决定用LSTM进行学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表