python研究股价_用Python预测股票价格变化

长短期记忆(英语:Long Short-Term Memory,LSTM)神经网络,是一种时间递归神经网络(RNN),该网络适合于处理和预测时间序列中间隔和延迟非常长的重要事件,如股票价格预测和水文预报等。

第一步 数据获取、可视化与预处理

#************************ 导入所需的python库 **********************#

import sys

import warnings

if not sys.warnoptions:

warnings.simplefilter("ignore")

import datetime

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from keras.models import Sequential

from keras.layers import Dense, Dropout, LSTM

from sklearn.preprocessing import MinMaxScaler

#************************************************************************#

#此文以印度的Tata Global Beverages公司股价变动为例,该公司总部位于 #

#印度加尔各答,是塔塔集团的子公司,世界第二大茶叶制造商#和分销商 #

#股价数据下载于 Quandl 数据库。 #

#************************************************************************#

df = pd.read_csv(r'C:\Users\Feng\Desktop\NSE-TATAGLOBAL11.csv')

#********* 查看一下该公司股票信息,开盘价、最高价、收盘价等 ********#

df.head(10)

该部分将输出

股价变化信息

#*************** 将索引设置为时间格式方便后续分析 ***************#

df['Date'] = pd.to_datetime(df.Date,format='%Y-%m-%d')

df.index = df['Date']

#****************** 查看一下近五年的收盘价变动 *****************#

plt.figure(figsize=(10,5))

plt.grid()

dstart = datetime.datetime(2013,1,1)

dstop = datetime.datetime(2019,1,1)

plt.ylim(100,350)

plt.xlim(dstart,dstop)

plt.plot(df['Close'], label='Close Price history')

plt.savefig(r'C:\Users\Feng\Desktop\TaTa股价变动.png',

dpi=300, bbox_inches='tight')

股价波动图

data = df.sort_index(ascending=True, axis=0)

new_data = pd.DataFrame(index=range(0,len(df)),

columns=['Date', 'Close'])

for i in range(0,len(data)):

new_data['Date'][i] = data['Date'][i]

new_data['Close'][i] = data['Close'][i]

#******************** 设置dataframe索引 ********************#

new_data.index = new_data.Date

new_data.drop('Date', axis=1, inplace=True)

#**************** 将数据分为训练集和测试集 ****************#

dataset = new_data.values

train = dataset[0:987,:]

valid = dataset[987:,:]

scaler = MinMaxScaler(feature_range=(0, 1))

scaled_data = scaler.fit_transform(dataset)

x_train, y_train = [], []

for i in range(60,len(train)):

x_train.append(scaled_data[i-60:i,0])

y_train.append(scaled_data[i,0])

x_train, y_train = np.array(x_train), np.array(y_train)

x_train = np.reshape(x_train, (x_train.shape[0],x_train.shape[1],1))

第二步 创建长短期记忆神经网络

model = Sequential()

#模型为3层,前两层五十个神经元,最后一层为输出层,仅一个神经元

model.add(LSTM(units=50, return_sequences=True,

input_shape=(x_train.shape[1],1)))

model.add(LSTM(units=50))

model.add(Dense(1))

#*******编译模型,以MSE为损失函数,adam优化算法 *******#

#****** 大多数情况下adam优化速度较快,结果也很好 *******#

model.compile(loss='mean_squared_error', optimizer='adam')

#************** 将训练集带入模型,开始训练 ***************#

model.fit(x_train, y_train, epochs=1, batch_size=1, verbose=2)

#该模型训练时间约50秒

#************ 应用训练好的模型预测股票信息 ************#

inputs = new_data[len(new_data) - len(valid) - 60:].values

inputs = inputs.reshape(-1,1)

inputs = scaler.transform(inputs)

X_test = []

for i in range(60,inputs.shape[0]):

X_test.append(inputs[i-60:i,0])

X_test = np.array(X_test)

X_test = np.reshape(X_test, (X_test.shape[0],X_test.shape[1],1))

closing_price = model.predict(X_test)

closing_price = scaler.inverse_transform(closing_price)

第三步 模型预测

#***** 此行代码是为了能够在图中显示中文,否则中文将显示为方框 *****#

plt.rcParams['font.sans-serif']=['SimHei']

plt.rc('font', size=12)

train = new_data[:987]

valid = new_data[987:]

valid['Predictions'] = closing_price

plt.figure(figsize=(8,6))

plt.title("Tata Global Beverages股票收盘价预测")

plt.grid()

plt.plot(train['Close'],color="blue",label="训练集")

plt.plot(valid['Close'],color="red",label="测试集")

plt.plot(valid['Predictions'],color="orange",label="预测结果")

plt.legend()

plt.ylim(100,350)

plt.xlim(dstart,dstop)

plt.savefig(r'C:\Users\Feng\Desktop\TaTa股价预测.png',

dpi=300, bbox_inches='tight')

模型预测结果

预测结果不错。

大家也可以尝试用长短期记忆神经网络对其他的时间序列进行预测。

如果您喜欢这篇文章,希望您能花一秒时间留下您的小手印 Thanks♪(・ω・)ノ

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值