#!/usr/bin/env python
# coding: utf-8
# In[3]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import MinMaxScaler
######################1.导入数据
filepath = 'C:\\Users\\14308\\Desktop\\gongshang.csv'
data = pd.read_csv(filepath)
# 将数据按照日期进行排序,确保时间序列递增
#data = data.sort_values('Date')
# 打印前几条数据
print(data.head())
# 打印维度
print(data.shape)
# In[4]:
######################2.将股票数据收盘价(Close)进行可视化展示
# 设置画布大小
plt.figure(figsize=(15, 9))
plt.plot(data[['Close']])
plt.xticks(range(0, data.shape[0], 50), data['Date'].loc[::50], rotation=45,fontsize=20)
plt.yticks(fontsize=20)
plt.title("SH300 Index ClosePrice", fontsize=20, fontweight='bold')
plt.xlabel('Date', fontsize=20)
plt.ylabel('Close Price', fontsize=20)
#plt.savefig('StockPrice.jpg')
plt.show()
# In[5]:
######################3. 特征工程
# 选取Close作为特征
price = data[['Close']]
# 打印相关信息
print(price.info())
print(price)
# 进行不同的数据缩放,将数据缩放到-1和1之间,归一化操作
scaler = MinMaxScaler(feature_range=(-1, 1))
price['Close'] = scaler.fit_transform(price['Close'].values.reshape(-1, 1))
print(price['Close'].shape)
price
# In[6]:
######################4. 数据集制作
# 今天的收盘价预测明天的收盘价
# lookback表示观察的跨度
def split_data(stock, lookback):
# 将stock转化为ndarray类型
data_raw = stock.to_numpy()
data = []
# you can free play(seq_length)
# 将data按lookback分组,data为长度为lookback的list
for index in range(len(data_raw) - lookback):
data.append(data_raw[index: index + lookback])
data = np.array(data);
print(type(data)) # (232, 20, 1)
# 按照8:2进行训练集、测试集划分
test_set_size = int(np.round(0.2 * data.shape[0]))
train_set_size = data.shape[0] - (test_set_size)
x_train = data[:train_set_size, :-1, :]
y_train = data[:train_set_size, -1, :]
x_test = data[train_set_size:, :-1]
y_test = data[train_set_size:, -1, :]
return [x_train, y_train, x_test, y_test]
lookback = 20
x_train, y_train, x_test, y_test = split_data(price, lookback)
print('x_train.shape = ', x_train.shape)
print('y_train.shape = ', y_train.shape)
print('x_test.shape = ', x_test.shape)
print('y_test.shape = ', y_test.shape)
# In[7]:
######################5. 模型构建
import torch
import torch.nn as nn
x_train = torch.from_numpy(x_train).type(torch.Tensor)
x_test = torch.from_numpy(x_test).type(torch.Tensor)
# 真实的数据
y_train_lstm = torch.from_numpy(y_train).type(torch.Tensor)
y_test_lstm = torch.from_numpy(y_test).type(torch.Tensor)
y_train_gru = torch.from_numpy(y_train).type(torch.Tensor)
y_test_gru = torch.from_numpy(y_test).type(torch
LSTM模型和ARIMA模型预测中国股票指数准确性的比较分析
最新推荐文章于 2025-01-05 12:03:54 发布