分析的是中国癌股上证指数月线,分析半天的结果感觉无法达到股票预测,还不如直接用股票指标实在.

也许本人能力有限,需要更高的数学,编程和分析技术.

不过我刚学python一星期,这个小程序就当学习练手了.

# -*- coding: utf-8 -*-
"""
Created on Thu May  2 15:34:37 2019@author: Administrator
"""import numpy as np #科学计算数据分析库,另起名为np
import matplotlib.pyplot as plt #擅长画二维图曲线,股票均线,另起名为plt
from sklearn.preprocessing import MinMaxScaler #机器学习库,数据预处理,把数据定为0,1之间
from keras.models import Sequential #深度学习库,建立模型,多网络层线性堆叠顺序模型
from keras.layers import LSTM, Dense, Activation #准备用三种神经网络层,长短期记忆网络,全连接网络层,激活层#from matplotlib.dates import DateFormatter, WeekdayLocator, DayLocator, MONDAY,YEARLY
#import matplotlib
import tushare as ts #接收中国股市数据另起名ts
'''
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.pylab import date2num
import datetime
import numpy as np
from pandas import DataFrame
from numpy import row_stack,column_stack
'''
import pandas #数据分析库plt.rcParams['font.family'] = 'SimHei' ## 设置字体df=ts.get_k_data('sh000001',start='1990-12-29',ktype='m') #获取上证指数上市以来的全部月线数据
dd=df[['open','high','low','close']] #把DataFrame表的部分数据列给新的对象#print(dd.values.shape[0])dd1=dd .sort_index() #把表按索引升序排序dd2=dd1.values.flatten() #列表返回表对象里的所有值,并把它们降成一维,变成等号左边对象的一个列dd3=pandas.DataFrame(dd1['close']) #把A股收盘价一列赋值给新对象#下边的函数把股票收盘价做预处理,把数据奕成0到1之间,拟合数据得到均值与方差,把收盘价转换成神经网络能处理的数据
def load_data(df, sequence_length=10, split=0.8): #自定义函数,必须参数DataFrame表,默认参数序列长度为10,数据拆分值0.8#df = pd.read_csv(file_name, sep=',', usecols=[1])#data_all = np.array(df).astype(float)data_all = np.array(df).astype(float) # 把df数据转换为数组# 将数据缩放至给定的最小值与最大值之间,这里是0与1之间,数据预处理scaler = MinMaxScaler()data_all = scaler.fit_transform(data_all) #拟合数据得到均值和方差data = []#新数组for i in range(len(data_all) - sequence_length - 1):#数组长度减去序列长度减1得到循环长度data.append(data_all[i: i + sequence_length + 1])#把数据一条一条写到data数组变量里reshaped_data = np.array(data).astype('float64') #把data数据转换成float64数组#np.random.shuffle(reshaped_data)# 对x进行统一归一化,而y则不归一化'''逗号前对行操作,逗号后对列操作,读reshaped_data,冒号看作列,冒号左边是指定从列左边第几位开始,冒号右边是到多少列结束-1就是到列最后边减1结束原来一列有11个数据,现在变成一列有10个数据,多的那个数据排到下一列'''x = reshaped_data[:, :-1]y = reshaped_data[:, -1]#还是对列操作,写负1直接去掉10个一步,只有一个列了split_boundary = int(reshaped_data.shape[0] * split)#浮点数组有326个,乘以0.8等于260train_x = x[: split_boundary]#冒号左边为0,读X从0行开始到260,读取数据的前0.8test_x = x[split_boundary:]#从X的260行开始到最后一行,读数据的后0.2train_y = y[: split_boundary]test_y = y[split_boundary:]#因为X,Y数值是一样的,所以上边的train_X也等于train_yreturn train_x, train_y, test_x, test_y, scaler #最终函数返回5项处理结果def build_model():#建立神经网络模型# input_dim是输入的train_x的最后一个维度,train_x的维度为(n_samples, time_steps, input_dim)model = Sequential()#建立顺序模型,神经网络'''把LSTM长短期记忆网络加到神经网络,输入维度1,输出维度6,返回整个序列输入维度1相当于一行,就是一组股票收盘价,输出维度6,相当于输出6组数据'''model.add(LSTM(input_dim=1, output_dim=6, return_sequences=True))#添加LSTM网络层#model.add(LSTM(6, input_dim=1, return_sequences=True))#model.add(LSTM(6, input_shape=(None, 1),return_sequences=True))"""#model.add(LSTM(input_dim=1, output_dim=6,input_length=10, return_sequences=True))#model.add(LSTM(6, input_dim=1, input_length=10, return_sequences=True))model.add(LSTM(6, input_shape=(10, 1),return_sequences=True))"""print(model.layers)#model.add(LSTM(100, return_sequences=True))#model.add(LSTM(100, return_sequences=True))model.add(LSTM(100, return_sequences=False))model.add(Dense(output_dim=1))model.add(Activation('linear'))#激活网络层model.compile(loss='mse', optimizer='rmsprop')#编译网络层return modeldef train_model(train_x, train_y, test_x, test_y):#训练神经网络,返回训练结果model = build_model()#用前边自定义的神经网络模型建立对象#怕训练时出错,提前用try做异常处理try:#用fit训练,前两个参数内容一样,第三参数经过多少样本更新权重,第四参数训练次数,第五参数指定训练集0.1的数据当验证集model.fit(train_x, train_y, batch_size=512, nb_epoch=300, validation_split=0.1)predict = model.predict(test_x)#获得输入数据的对应输出,预测结果,test和predict都是后0.2的数据,用于当自我验证predict = np.reshape(predict, (predict.size, ))#重新排列数组predictexcept KeyboardInterrupt:print('predict出错了',predict)print('test_y出错了',test_y)print('predict结果',predict)print('test_y结果',test_y)try:fig = plt.figure(figsize=(14,6))#创建并设置画布尺寸plt.plot(predict, 'r:')#画均线,设置颜色plt.plot(test_y, 'g-')plt.legend(['分析完数据', '原始数据'])#在画布写上哪个是原始数据哪个是神经网络分析完的数据except Exception as e:print(e)return predict, test_yif __name__ == '__main__':#train_x, train_y, test_x, test_y, scaler = load_data('international-airline-passengers.csv')train_x, train_y, test_x, test_y, scaler =load_data(dd3, sequence_length=10, split=0.8)#股票收盘价做预处理,分成4种数据train_x = np.reshape(train_x, (train_x.shape[0], train_x.shape[1], 1))#重新排列数组test_x = np.reshape(test_x, (test_x.shape[0], test_x.shape[1], 1))predict_y, test_y = train_model(train_x, train_y, test_x, test_y)#收盘价被分成4种数据输入神经网络训练,得到两条分析数据predict_y = scaler.inverse_transform([[i] for i in predict_y])#将标准化后的数据转换为原始数据。test_y = scaler.inverse_transform(test_y)fig2 = plt.figure(figsize=(14,6)) #设置画布大小plt.plot(predict_y, 'g:')#把神经网络分析结果画出来plt.plot(test_y, 'r-')#test_y只做了预处理,没用神经网络分析,相当于收盘价原始数据,图片画出来以后看到,神经网络分析的数据慢于原始数据plt.legend(['分析完数据', '原始数据'])#在画布写上哪个是原始数据哪个是神经网络分析完的数据#plt.plot(df.close)plt.show()

python用keras库做个股票分析小程序相关推荐

  1. 怎么装python的keras库_matlab调用keras深度学习模型(环境搭建)

    matlab没有直接调用tensorflow模型的接口,但是有调用keras模型的接口,而keras又是tensorflow的高级封装版本,所以就研究一下这个--可以将model-based方法和le ...

  2. python开发跟淘宝有关联微_为什么微商和淘宝卖家不得不做公众号和小程序?

    文/王爷 整理/叨叨 最近一个月,微信方面的动作比较多,尤其是有关微信小程序方面的动态,起码更新了4次.或许很多人还不知道什么是微信小程序,简单来说就是一个无需安装.即用即走的生长在微信上的一个应用. ...

  3. 网络协议分析小程序exe制作 python

    网络协议分析小程序exe制作 问题描述: 近期在周报上讲述网络协议分析时,老师让我用代码将数据直接呈现出来,类似输入数据, 然后直接分析出基本的网络协议. 思路描述: 首先用代码将所需要求的MAC.I ...

  4. 如何将一个python文件打包成一个可执行的小程序

    如何将一个Python文件打包成一个可执行的小程序 一.安装pyinstaller pyinstaller: 一个用来打包python的py文件的库,通过他可以将.py文件打包成可执行的.exe文件 ...

  5. 零基础做一个微信答题小程序(四)

    嗨!大家好,我是小蚂蚁.这一节里,我们继续分享如何在答完题后进行答案的比对,以及如何实现一个回顾功能. 在上一节里我们提到过,为了记录玩家的答题数据,我们创建了一个新的表格--玩家答题选项表,里面记录 ...

  6. 基于Python编写一个B站全自动抽奖的小程序

    本文将利用Python编写一个B站全自动抽奖的小程序,可以实时监控自己关注的UP主,如果关注的UP主中有人发布了抽奖的动态,就自动参与这个抽奖.这样就能不错过任何一个可以暴富的机会了.需要的可以参考一 ...

  7. 做一个纯前端小程序,只需要简单几步

    前段时间某神秘企业员工被禁止拥有自媒体,所以如果大家在盗版网站或者某条看到这篇文章,而且昵称还叫什么泽哥**钊,不用慌,就是我!!! 我这技术这么烂,也要被限制,辛苦某某部门了.也不知道啥时候禁止我发 ...

  8. C#做的在线升级小程序

    转自原文C#做的在线升级小程序 日前收到一个小任务,要做一个通用的在线升级程序.更新的内容包括一些dll或exe或.配置文件.升级的大致流程是这样的,从服务器获取一个更新的配置文件,经过核对后如有新的 ...

  9. 钉钉小程序从搭建到引入地三方库到发布---企业内小程序

    开发文档:钉钉小程序介绍 - 钉钉开放平台 开发工具:小程序开发工具 - 钉钉开放平台 登录钉钉 -- 创建组织或在组织内开发(如果不希望在组织内开发需要先退出公司组织或自己在钉钉手机端新建一个组织) ...

  10. 社区团购怎么做_分享有哪些方法可以做社区团购小程序

    今天我们要分享的是社区团购,那么有的小伙伴就会问了什么是社区团购呢,我们简单的来说下社区团购是一种新型的团购模式,刚开始主要是通过团长搭建社群来发布相应的优惠活动,然后吸引用户下单,最后由团长进行订单 ...

最新文章

  1. 病毒组研究的挑战-相关的新兴技术
  2. 软件seqtk的使用
  3. python自动测试p-Python自动化测试
  4. 链路追踪之zipkin
  5. 华为鸿蒙加快完善,替换安卓!华为鸿蒙OS生态持续扩大:或适配高通平台
  6. workbench拓扑优化教程_workbenchds拓扑优化分析.ppt
  7. AlphaFold2立功!清华团队用深度学习增强新冠抗体,创AI里程碑
  8. WPJAM网址导航:最轻便快捷的WordPress网址导航插件
  9. 3-32,3-33Pytorch与autograd中的几个重要概念
  10. leetcode 137[转]
  11. mysql数据库表无法显示_【MySQL8.0.18】IDEA 连接数据库无法显示数据表
  12. ACCESS的十种数据类型分别对应的添加语句
  13. 「大学生offer内推计划」:阿里/百度/华为等一线大厂都在抢这样的人!
  14. java 包装类详解_解析包装类
  15. python显示文字框_python如何使用文本框
  16. win7升级RDP至8.1
  17. jupyter notebook插件安装
  18. mysql隔离级别 isolation_MySQL事务和隔离级别
  19. 微软输入法自动导入小鹤双拼
  20. 安装 window10 系统

热门文章

  1. 统计学中sp_统计学中的F值、P值和r分别表示什么意思,怎么求
  2. GoFW|网页加速器
  3. ES复杂分组同时多聚合统计实现(java)
  4. 技能高考的计算机教室,2020湖北技能高考成绩查询时间
  5. 【错误率、精度、查准率、查全率和F1度量】详细介绍
  6. U3D游戏开发框架(三)——UI管理器
  7. “十步杀一人,千里不留行。事了拂衣去,深藏功与名。”
  8. android如何编译lame,ndk编译android的lame库
  9. 获取高薪职位的六个妙计
  10. 数据仓库上云那些事儿