## 导入所需的包

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import tensorflow as tf

tf.reset_default_graph()

plt.rcParams['font.sans-serif'] = 'SimHei' ##设置字体为SimHei显示中文

plt.rcParams['axes.unicode_minus'] = False ##设置正常显示符号

## 导入所需数据

df = pd.read_csv('美元-人民币.csv',encoding='gbk',engine='python')

df['时间'] = pd.to_datetime(df['时间'],format='%Y/%m/%d')

df = df.sort_values(by='时间')

df.head()

## 用折线图展示数据

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

plt.title('1999年1月1日到2018年8月21日最高价数据曲线')

plt.plot(df['时间'],df['高'])

plt.show()

### 提取测试数据

data = df.loc[:,['时间','高']]

## 标准化数据

data['高'] = (data['高']-np.mean(data['高']))/np.std(data['高'])

data['高(预)'] = data['高'].shift(-1)

data = data.iloc[:data.shape[0]-1]

data.columns = ['time','x','y']

data.head()

#获取最高价序列

data=np.array(df['高'])

normalize_data=(data-np.mean(data))/np.std(data)  #标准化

normalize_data=normalize_data[:,np.newaxis]  #增加维度

#———————————————形成训练集——————————————————

#设置常量

time_step=20       #时间步

rnn_unit=10        #hidden layer units

batch_size=60      #每一批次训练多少个样例

input_size=1       #输入层维度

output_size=1       #输出层维度

lr=0.0006           #学习率

train_x,train_y=[],[]   #训练集

for i in range(len(normalize_data)-time_step-1):

x=normalize_data[i:i+time_step]

y=normalize_data[i+1:i+time_step+1]

train_x.append(x.tolist())

train_y.append(y.tolist())

test_x = train_x[len(train_x)-31:len(train_x)-1]

test_y = train_y[len(train_y)-31:len(train_y)-1]

X=tf.placeholder(tf.float32, [None,time_step,input_size])    #每批次输入网络的tensor

Y=tf.placeholder(tf.float32, [None,time_step,output_size])   #每批次tensor对应的标签

#输入层、输出层权重、偏置

weights={

'in':tf.Variable(tf.random_normal([input_size,rnn_unit])),

'out':tf.Variable(tf.random_normal([rnn_unit,1]))

}

biases={

'in':tf.Variable(tf.constant(0.1,shape=[rnn_unit,])),

'out':tf.Variable(tf.constant(0.1,shape=[1,]))

}

def lstm(batch):  #参数:输入网络批次数目

w_in=weights['in']

b_in=biases['in']

input=tf.reshape(X,[-1,input_size])  #需要将tensor转成2维进行计算,计算后的结果作为隐藏层的输入

input_rnn=tf.matmul(input,w_in)+b_in

input_rnn=tf.reshape(input_rnn,[-1,time_step,rnn_unit])  #将tensor转成3维,作为lstm cell的输入

cell=tf.nn.rnn_cell.BasicLSTMCell(rnn_unit)

init_state=cell.zero_state(batch,dtype=tf.float32)

output_rnn,final_states=tf.nn.dynamic_rnn(cell,input_rnn,initial_state=init_state, dtype=tf.float32)  #output_rnn是记录lstm每个输出节点的结果,final_states是最后一个cell的结果

output=tf.reshape(output_rnn,[-1,rnn_unit]) #作为输出层的输入

w_out=weights['out']

b_out=biases['out']

pred=tf.matmul(output,w_out)+b_out

return pred,final_states

def train_lstm():

global batch_size

pred,_=lstm(batch_size)

#损失函数

loss=tf.reduce_mean(tf.square(tf.reshape(pred,[-1])-tf.reshape(Y, [-1])))

train_op=tf.train.AdamOptimizer(lr).minimize(loss)

saver=tf.train.Saver(tf.global_variables())

with tf.Session() as sess:

sess.run(tf.global_variables_initializer())

#重复训练100次

for i in range(100):

step=0

start=0

end=start+batch_size

while(end

start+=batch_size

end=start+batch_size

#每10步保存一次参数

if step%10==0:

print(i,step,loss_)

print("保存模型:",saver.save(sess,'.\stock.model'))

step+=1

def prediction():

pred,_=lstm(1)    #预测时只输入[1,time_step,input_size]的测试数据

saver=tf.train.Saver(tf.global_variables())

with tf.Session() as sess:

#参数恢复

module_file = tf.train.latest_checkpoint('./')

saver.restore(sess, module_file)

#取训练集最后一行为测试样本。shape=[1,time_step,input_size]

prev_seq=train_x[-31]

predict=[]

#得到之后100个预测结果

for i in range(100):

next_seq=sess.run(pred,feed_dict={X:[prev_seq]})

predict.append(next_seq[-1])

#每次得到最后一个时间步的预测结果,与之前的数据加在一起,形成新的测试样本

prev_seq=np.vstack((prev_seq[1:],next_seq[-1]))

#以折线图表示结果

plt.figure()

plt.plot(list(range(len(normalize_data))), normalize_data, color='b')

plt.plot(list(range(len(normalize_data), len(normalize_data) + len(predict))), predict, color='r')

plt.show()

with tf.variable_scope('train'):

train_lstm()

with tf.variable_scope('train',reuse=True):

prediction()

python 人民币兑美元汇率代码_人民币对美元汇率的大数据分析与预测【完整代码】...相关推荐

  1. php百度登录完整代码_百度熊掌号专业问答PHP方式推送完整代码(附说明)

    对于百度熊掌号专业问答的URL推送,百度提供了多种URL推送方式,之前详细写过怎样通过CURL命令方式推送,但是后来百度修改了api地址,URL中出现了汉字,CURL方式推送就会报错,下面php中文网 ...

  2. PTA_Python3_人民币与美元汇率兑换程序

    设计人民币与美元汇率兑换程序,按照1美元=7人民币的汇率 编写一个双向兑换程序. 输入格式: 输入美元或者人民币的金额,币种在前,金额在后,如:$20.¥100.每次输入一个金额. 输出格式: 输出经 ...

  3. 人民币对美元汇率中间价报6.7665元 下调73个基点

    中新网1月18日电 据中国外汇交易中心网站消息,1月18日人民币对美元汇率中间价为6.7665元,下调73个基点. 中国外汇交易中心网站截图 中国人民银行授权中国外汇交易中心公布,2019年1月18日 ...

  4. 人民币对美元汇率中间价报6.7615元 下调73个基点

    中新网1月16日电 据中国外汇交易中心网站消息,1月16日人民币对美元汇率中间价为6.7615元,下调73个基点. 中国人民银行授权中国外汇交易中心公布,2019年1月16日银行间外汇市场人民币汇率中 ...

  5. java人民币美元转换_人民币与美元的汇率转换 ------Java实现

    import javax.swing.*; import java.awt.*; import java.awt.event.*; public class changeDollar extends ...

  6. 互联网快讯:人民币对美元汇率跌破7.2关口;长春新区一餐厅液化气泄漏引发爆炸

    国内要闻 海南对高收入高净值人群开展税务稽查,随机抽取 50 户全面自查: 长春一餐厅起火致 17 人死亡 3 人受伤,企业法人已被控制,初步认定为液化石油气罐泄漏引发: 交通运输部:国庆节假期从 1 ...

  7. python写一个类600行代码_带你领略算法的魅力,一个600行代码的分词功能实现(一)...

    为什么要说分词呢?其实这个话题挺大的.所以准备分几篇来写,这次先写第一篇. 写给别人看,也写给自己.毕竟,自己在思特奇也做了好久了,写点有意思的东西,结交一些有兴趣的朋友. 一是确实最近的一些实践给了 ...

  8. java电子日记本代码_计算法日记将规则的价值视为无需计算机的代码

    java电子日记本代码 I've been preparing a presentation for the Canadian Institute for the Administration of ...

  9. 基于c++的马氏距离算法代码_监控警戒区基于掩码算法的简单实现(附代码)

    视频地址:https://www.ixigua.com/6870543177913205251/ 这是利用图片掩码实现的一个视频监控区域警戒功能代码,当人进出警戒区域时,自动记录一张图片到本地,效果视 ...

最新文章

  1. 职场必读的经典励志故事
  2. metasploit msfvenom使用实例
  3. Android 中加载网络资源时的优化 缓存和异步机制
  4. 工作日报模板_千份财会人通用工作模板:自动核算工资、财务分析报表等等
  5. 测绘技术设计规定最新版_测绘技术设计规定
  6. ActiveBpel部署运行BPEL流程实例
  7. 记在k8s的pod上使用apache的commons-net:ftp功能时,ftp一直上传文件失败
  8. java安装path_JDK安装时设置PATH和CLASSPATH环境变量有何作用?
  9. 1.两数之和(力扣leetcode) 博主可答疑该问题
  10. 【数字逻辑】学习笔记 第三章 Part2 逻辑函数的化简
  11. 小米电视显示服务器断开连接,小米电视投屏频繁断开的解决办法
  12. Angular入门到精通系列教程(14)- Angular 编译打包 Docker发布
  13. Linux如何修改主机名hostname
  14. adb 禁止app联网_通过ADB启用和禁用系统应用
  15. YouTube Video Download
  16. Python:AES+Base64的加密与解密(ECB模式)
  17. 哪所大学教php_世界大学排行榜盘点:THE排名中清华北大雄踞亚洲高校前2!内地大学十强分别是…...
  18. 中国民航飞行学院人事薪资管理系统实践案例
  19. 2019 Selenium3与Python3实战开发Web自动化测试框架(三)
  20. 异形结构的纳米材料:纳米团簇/纳米丝/纳米棒/纳米管的相关研究

热门文章

  1. java初步语法(一)数据类型
  2. 猫抓老鼠c语言程序,猫抓老鼠问题C++实现一例(约瑟夫环问题)
  3. 【多标签文本分类】MSML-BERT模型的层级多标签文本分类方法研究
  4. 鼠标切换虚拟桌面 autohotkey
  5. 常州大学计算机专业研究生怎么样,常州大学计算机应用技术考研经验
  6. Android事件分发之ViewGroup篇 -- ViewGroup的dispatchTouchEvent、onTouchEvent、onInterceptTouchEvent之间关系
  7. LeetCode838. 推多米诺
  8. 计算机制图符号制作,基本流程图的制作-通过在线制图工具绘制
  9. arduino笔记20:红外遥控
  10. js 将小数转为科学记数法