股票预测分析python

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

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()

动态分析技术中最重要的工具是调试器,分为用户模式和内核模式两种类型。
用户模式调试器: 用来调试用户模式应用程序的调试器,工作在Ring3级,例如OllyDbg、x64dbg。也存在有VisualC++等编译器自带的调试器。
内核模式调试器: 能调试操作系统内核的调试器,例如WinDbg。

OllyDbg
简称OD,用户级调试器。OD是一款十分强大的32位调试器,虽然作者早已停止更新,但作为学习工具还是可以的。实践中建议使用x64dbg的32位版本。

64位平台可以使用x64dbg、IDA Pro等

操作窗口


配置
ollydbg.ini: OD中Options菜单里的所有设置,保存在ollydbg.ini中
UDD文件: OD的工程文件,用于保存当前调试的一些状态,例如断点、注释等,以便下次调试时继续使用。
插件: OD支持插件,并提供了相关api。这使得其扩展性非常好。

调试设置
单击“Options” —“Debugsingoplions” 选项,打开调试设置选项对话框,一般保持默认即可。其中,“Exceptions” (异常)选项用于设置让OllyDbg 忽路或不忽略某些异常,建议全部选择。 有关异常的知识将在第8 章讲解。

加载符号文件
点击“Debug”- "Seleet importlibraries” 选项,打开导入库窗口进行加载。符号文件可以在调试过程中,让函数以函数名字表示。比如存在一个函数叫“abc”,但是在调试器中很可能是一串数字”004012f7“,而符号文件就能让它显示为”abc“。

基本操作
常见快捷键:

断点
常用断点有:INT3断点、硬件断点、消息断点。

INT3断点
当你使用bp命令或者按下F2时,所设的断点为INT3断点。原理是把下断点的地方的指令换成CC指令来引发异常,调试器捕获异常后中断,并把原指令还原。例如:

 复制代码 隐藏代码
004011F3 68 D0404000
||||||||||||
004011F3 CC D0404000
优点: 可以设置无数个INT3断点,只要电脑受得住。
缺点: 由于修改了程序,所以易被检测

硬件断点
设断方法是在指定的代码行单击右键,执行快捷菜单中的“Breakpoint” 一 "Hardware,on execution”(“断点〞一,“硬件执行”)命令(也可以在命令行中设置“HE地址”)
最多可以设置四个硬件断点。

其中DR0、DR1、DR2、DR3可以设定地址,用来断下,DR7用来控制状态。
原理: 设置好断点后,运行到改地址时,CPU会向调试器发送异常,调试器捕获后中断。
优点: 执行速度快,不易被检测
缺点: 只能设置四个

猜你喜欢

转载自blog.csdn.net/qq_47301716/article/details/130976361