# 金融数据分析
## Feature与预测目标的选取
选择的feature:
- 开盘价
- 最高成交价
- 最低成交价
- 成交量
选择的预测目标:
- 收盘价
因为股票价格的影响因素太多,通过k线数据预测未来的价格变化基本不可行,只有当天之内的数据还有一定的关联,故feature与target都选择的是当天的数据。
## 加载数据
为了加快数据的处理速度,提前将mariadb数据库中的数据查询出来,保存成feather格式的数据,以提高加载数据的速度。关键代码如下:
```python
def main_code_to_feather():
# Get Cursor, Fieldinfo And Total Rows
cur = conn.cursor()
labels = [fld[0] for fld in get_fieldinfo(cur)] # 获取所有的字段信息
codes = get_all_stock_code(cur) # 获取所有的股票代码
code_inedx = 0
for code in codes:
print("Processing:", code_inedx, "/", len(codes))
code_inedx += 1
data = fetch_by_code(cur, code, None, None).fetchall() # 获取对应股票的数据
df = pd.DataFrame(data=data, columns=labels) # 将数据放入pd的表
df.drop(columns=["id"], inplace=True) # 数据库中的id字段没有意义,drop掉
os.makedirs("data_by_code", exist_ok=True)
save_path = os.path.join("data_by_code", code+".feather") # 将股票数据保存成feather格式的数据
df.to_feather(save_path)
if __name__ == "__main__":
main_code_to_feather()
```
经过处理,不同股票的数据保存在了不同的文件中,列名还保持着数据库中的字段名。我选择了股票代码为sh600010的这只股票作为数据分析的数据来源。
从文件中加载数据的代码如下:
```python
df = pd.read_feather("data_by_code/sh600010.feather")
```
## 处理数据
从股票数据中取出开盘价、最高成交价、最低成交价和成交量作为feature,取出收盘价作为预测的目标,最后取出日期作为绘图的横座标数据。关键代码如下:
```python
x_tmp = []
y_tmp = []
date_tmp = []
for row in range(df.shape[0]):
today = df.loc[row]
# 当天信息
x_tmp.append(tuple([
today["popen"] / 1e1,
today["phigh"] / 1e1,
today["plow"] / 1e1,
today["vol"] / 1e4, # 防止loss溢出
]))
# 收盘价格
y_tmp.append(today["pclose"] / 1e1) # y/10防止loss溢出
# 日期
date_tmp.append(today["deal_date"])
x = tf.constant(x_tmp, dtype=tf.float32)
y = tf.constant(y_tmp, dtype=tf.float32)
```
这里将关键指标都除以了一个固定的数,可以防止loss溢出导致模型无法优化。
划分训练集与测试集,取最后5%的数据作为测试集。代码如下:
```python
data_size = len(x_data)
test_size = int(data_size * 0.05)
x_train = x_data[:data_size - test_size]
y_train = y_data[:data_size - test_size]
x_test = x_data[data_size - test_size:]
y_test = y_data[data_size - test_size:]
date_test = date_data[data_size - test_size:]
```
## 选取模型并进行训练
我选取的是线性模型,使用线性模型进行训练,在训练时使用了tensorflow的keras库来简化代码的编写:
```python
model = keras.Sequential(
[
layers.Dense(1, name="layer1"), # 输出size为1,即线性回归模型
]
)
model.compile(
optimizer = optimizers.SGD(learning_rate=0.01),
loss = losses.MeanSquaredError(),
)
history = model.fit(x_train, y_train, batch_size=256, epochs=128, validation_split=0.2)
```
## 使用模型进行预测
使用训练过的模型对测试数据集进行预测:
```python
y_predict = model.predict(x_test)
y_pred = []
for i in range(len(y_test)):
y_pred.append(y_predict[i][0])
```
## 绘制真实值与预测值的图像
使用matplotlib绘制图表,使用**日期**作为横座标,使用收**盘价÷10**作为纵座标。
```python
plt.figure(figsize=(16, 8))
plt.plot(date_test, y_test, label="real")
plt.plot(date_test, y_pred, label="predict")
```
## 对预测结果的分析
根据预测结果绘制的函数图像如图所示:

根据图像可以看出,预测值和真实值差距较大。这是由于影响股票价格的因素很多,选取的几个参数不能准确预测。
但是同时也可以看出,预测出来的结果与真实值变化趋势相近,说明线性回归模型在一定程度上能够解释收盘价与选取的feature之间的关系。
## 获取完整源代码
[完整源代码:https://gitee.com/Dreagonmon/machine-learning-homework](https://gitee.com/Dreagonmon/machine-learning-homework)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
python数据分析,因为股票价格的影响因素太多,通过k线数据预测未来的价格变化基本不可行,只有当天之内的数据还有一定的关联,故feature与target都选择的是当天的数据。 加载数据 为了加快数据的处理速度,提前将mariadb数据库中的数据查询出来,保存成feather格式的数据,以提高加载数据的速度。 经过处理,不同股票的数据保存在了不同的文件中,列名还保持着数据库中的字段名。我选择了股票代码为sh600010的这只股票作为数据分析的数据来源。预测出来的结果与真实值变化趋势相近,说明线性回归模型在一定程度上能够解释收盘价与选取的feature之间的关系
资源推荐
资源详情
资源评论





























收起资源包目录























共 15 条
- 1
资源评论

- m0_526325432023-06-06#完美解决问题 #运行顺畅 #内容详尽
- Moonquake_www2024-03-03#运行出错 #毫无价值
- ahbebwb2024-01-04#待补充教程

云哲-吉吉2021
- 粉丝: 4285
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 数据库系统概述 ppt.pptx
- 嵌入式门禁控制器平台软件设计与实现的开题报告.docx
- 基于物联网的智能家居设计与实现.docx
- 单片机试题及答案.doc
- 关于信息自动化在电力系统中的运用.docx
- 计算机基础(windows)题库(有答案).doc
- 第二部分计算机与仪器分析知识讲解.ppt
- 第3部分微型计算机的基本工作原理知识讲解.ppt
- 肖将秋浅谈如何利用网站进行网络营销.doc
- 罗强通信专业英语大作业.doc
- Asp与Asp.Net的区别(1).doc
- Excel表格制作的使用方法与技巧ppt课件.pptx
- 2023年Java语言实验报告四.doc
- 2021年9月《机械CAD技术基础》作业考核试题及答案参考8.docx
- 某电子商务公司薪酬管理制度管理.doc
- 企业网站营销-发挥坚持不懈的精神.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
