Python数据爬取以及LSMT模型预测项目记录

Python的期末大作业,需求如题,自己花了不少心思做的,记录一下

本项目需要实现以下三个功能:

从指定财经网站上随机爬取若干A股名称以及GP代码

对爬取到的GP代码进行处理之后,从财经网站上下载该GP从创建以来至今的GP信息,包括日期、GP代码、名称、收盘价、最高价、最低价、开盘价、前收盘、涨跌额、涨跌幅、换手率、成交量、成交金额、总市值、流通市值

对选定的GP用LSTM神经网络模型进行预测,并将预测结果可视化。

本项目的模块的独立性较强,故按照实现功能将该大项目分成两个小项目来做,第一部分为网络爬虫,即利用python自带的库进行数据下载。第二部分为预测部分,利用python自带算法库进行LSTM的模型建立,并用爬取到的数据进行训练以及预测。

    1.  模块功能及流程图
      1. Get-stock-num模块

该模块利用requests库实现简便网页爬取,用csv库创建csv文件保存数据进行下一步处理。、

      1. Get-history-value模块


该模块通过lxml与Request,从一个web页面中抓取了所有想要的数据,将它们以列表的形式存在内存中,在这一步利用正则表达式获取GP的代码、创立时间以及到程序运行的日期,利用这三个数据对网页下载接口操作,下载历史数据。

      1. Stock-pred模块

本模块运用keras构建神经网络,同时导入相应的数学处理包进行数据预处理。理论上,GP价格是可以预测的,但是影响GP价格的因素有很多,而且目前为止,它们对GP的影响还不能清晰定义。这是因为GP预测是高度非线性的,这就要预测模型要能够处理非线性问题,并且,GP具有时间序列的特性,因此适合用循环神经网络,对GP进行预测。

虽然循环神经网络(RNN),允许信息的持久化,然而,一般的RNN模型对具备长记忆性的时间序列数据刻画能力较弱,在时间序列过长的时候,因为存在梯度消散和梯度爆炸现象RNN训练变得非常困难。Hochreiter 和 Schmidhuber 提出的长短期记忆( Long Short-Term Memory,LSTM)模型在RNN结构的基础上进行了改造,从而解决了RNN模型无法刻画时间序列长记忆性的问题,LSTM模型数学原理较为复杂,在这里不做赘述



本项目是基于pycharm的开发环境,具有便捷调试与编写的好处,同时具有相当便捷的Debug界面。对网络爬虫部分,只需运行相应的程序即可获得数据。需要注意的是,如果想获得更多的GP信息需要将下图page变量范围做出相应的修改进行遍历即可。


       预测模块,将要预测的GP数据放入项目文件中后,以收盘价为例,在下图位置处添加标号,直接运行程序即可自动进行模型构建预测并画图。


本模块数据爬取结果运行成功,结果如下图,初始爬取的GP代码以及名称如下:

这里GP代码有前缀SH,表明属于沪市(0),在进行下一步数据爬取时,需要删除前缀,并且在网址部分设置code=0进行下载主数据,如下图:


爬取到的GP以GP代码命名并保存为csv文件,结果如下图:


其中任意一份结果如下:


预测部分由于能力有限,需要先对需要预测的部分进行数据预处理,具体以600884即彬彬股份预测为例,首先先将2012年以前的数据删除掉,这里使用pandas模块。选定以收盘价为例进行预测,预测结果如下:

结果分析:从图上可以看出,预测结果与实际结果的变化趋势相近,在具体数值上有微小的差异,而且再次运行程序预测结果会变化,表面了模型训练的效果是有差异的。

下图为对其他指标进行预测,只需按照使用手册改变索引即可

结果分析:以上三图看起来一样,但是在调试的时候查看内存后,改变索引之后确实改变了训练数据,所以理论上来说是理想的预测结果,至于相似的原因,我在观察爬取到的数据之后发现,这四个指标互相之间的变化不大,例如开盘价和收盘价之间的变化非常小。所以预测结果是符合预期的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值