通过sklearn和python语句进行股票的预测,其中python用到了pandas和mpl_finance库,数据模型简历用的是sklearn库。不过mpl_finance已经不再维护,在运行的时候会有警告和提示,但不影响正常的程序运行。

数据遍历和保存

使用pandas库即可完成文件夹的遍历,文件的保存也是由pandas完成,保存到excel里面。

每个文件都有自己的文件名称,做到了动态保存。

数据处理

首先对数据进行导入和处理,在处理的时候发现有的数据是整块的重复或者丢失,当然了,pandas库提供了数据替换功能,但是无论用什么区替换重复的数据得到的还是一堆重复的数据,所以不得已将他删除掉。

降维后的数据、模型预测的数据,失误率,数据的描述形状都保存到了excel文件中

数据模型的建立

本次的模型采用的是神经网络的回归模型。与其他的回归模型相比,神经网络的回归更能对数据的前全局性有更好的掌握,逻辑回归过于垂直的模型结构会让他看起来“顾头不顾尾”。

数据失误率的计算

股票注重趋势和走向,通过开盘价和其他数据维度来预测本次收盘价,如果是上升趋势就购买,下降趋势就出售,所以本次的失误率计算的是趋势预测的失误率,但是我还是要求预测数据的精准度,准确的预测当然会让趋势预测更加精准。

数据可视化

本次可视化使用的是蜡烛图和折线图还有柱形图,不过mpl_finance的确存在一些缺点,就是如果在某个时间段内没有股票数据他还是会将图形绘制出来,这就会出现平直的折线,没有高度的蜡烛图和柱形图。

以下是代码:


from sklearn.metrics import accuracy_score
import matplotlib.ticker as ticker
from sklearn.neural_network import MLPRegressor
from sklearn.model_selection import  train_test_split
from matplotlib.pylab import date2num
import datetime
import os
import mpl_finance as mpf
from os import path
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import numpy as np
import matplotlib.pyplot as plt
#一、数据的导入概况信息了解
filenamelist=os.listdir(r'模型挑战赛数据文件')      #遍历数据表
for i in filenamelist:filename=path.join('j:/pycharm_lianxi/sklearn/模型挑战赛数据文件',i)data = pd.read_csv(filename,encoding='gbk')data0=datadata1=data['前收盘价(元)'].tail(100)filepath='j:/pycharm_lianxi/sklearn/表格/数据综合表'+i+'.xlsx'datashape=pd.DataFrame([[data.iloc[1,1],data.shape]],columns=['名称','shape'])datadescribe=pd.DataFrame(data.describe())workbook=pd.ExcelWriter(filepath)datashape.to_excel(workbook, "形状",encoding='utf_8_sig')datadescribe.to_excel(workbook, "概况描述",encoding='utf_8_sig')#二、对数据进行异常值处理(空值的删除和填充)并不完善,其中称块状分布的重复值没有进行处理data.replace(0, np.nan, inplace=True)     #把0转化为空值data.dropna(axis=1,thresh=100,inplace=True)#对空值过多的列删除data.fillna(data.median(),inplace=True)   #相对来说缺失值较少的进行均值填充#data=data.loc[:, (data != 0).any(axis=0)]                                        #删除都是0的列data=data.drop_duplicates(subset='前收盘价(元)')data.to_excel(workbook, "清洗后的数据", encoding='utf_8_sig')pca = PCA(n_components=5)new_data=pd.DataFrame(pca.fit_transform(data.iloc[:,3:]))                          #降为处理new_data.to_excel(workbook,"降维后的数据",encoding='utf_8_sig')var_ratio =np.array(pca.explained_variance_ratio_)var_ratio=pd.DataFrame(var_ratio.reshape((1,5)))var_ratio.to_excel(workbook,"主成分贡献率",encoding='utf_8_sig')                                           #主成分贡献率存储datastd=pd.DataFrame(StandardScaler().fit_transform(new_data))datastd.to_excel(workbook, "标准化的数据",encoding='utf_8_sig')#绘制K线图data=pd.DataFrame(data[['日期','开盘价(元)','收盘价(元)','最高价(元)','最低价(元)','成交量(股)','代码','前收盘价(元)']])data=data.tail(100)def date_to_num(dates):num_time=[]for date in dates:date_time=datetime.datetime.strptime(date,'%Y-%m-%d')num_date=date2num(date_time)num_time.append(num_date)return num_timedata_arr=data.valuesdata_arr[:,0]=date_to_num(data_arr[:,0])data['ma5']=data['收盘价(元)'].rolling(5).mean()data['ma10'] = data['收盘价(元)'].rolling(10).mean()plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.facecolor'] = 'black'fig,axes=plt.subplots(2,1,sharex=True,figsize=(13,6))ax1,ax2=axes.flatten()mpf.candlestick_ochl(ax1, data_arr, width=0.6, colorup='r', colordown='g', alpha=1.0)ax1.plot(data_arr[:,0],data['ma5'])ax1.plot(data_arr[:,0], data['ma10'])ax1.set_title(data0.iloc[1,1]+'K线图')ax1.set_ylabel('价格')ax1.grid(True)ax1.xaxis_date()ax2.bar(data_arr[:,0],data_arr[:,5])ax2.set_xlabel('日期')ax2.set_ylabel('成交量')ax2.grid(True)ax2.xaxis_date()savepath='j:/pycharm_lianxi/sklearn/图片/'+i+'_K线图.png'plt.savefig(fname=savepath)plt.clf()
#数据预测模型log=MLPRegressor()x=data[['开盘价(元)','前收盘价(元)']]y=data['收盘价(元)']x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=1)log.fit(x_train,y_train.astype('int'))y_pred=log.predict(x_test)X=data['日期'].tail(20)plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.facecolor'] = 'black'plt.plot(X,y_test,marker='.',c='green',label='真实值')plt.plot(X,y_pred,marker='+',c='red',label='预测值')plt.legend(bbox_to_anchor=(1,0),loc=3,borderaxespad=1,facecolor='white')plt.title(data0.iloc[1,1]+'预测值和真实值')plt.grid(True)plt.xlabel('日期')plt.ylabel('价格')savepath2 = 'j:/pycharm_lianxi/sklearn/图片/' + i + '折线图.png'plt.savefig(savepath2)#预测值和实际值的比较和存储y_pred=list(y_pred)y_test=list(y_test)q=0tes_zheng = 0pre_zheng=0for s in range(len(y_test)-1):if (y_test[s+1]-y_test[s]>=0):tes_zheng=tes_zheng+1for s in range(len(y_pred)-1):if (y_pred[s+1]-y_pred[s]>=0):pre_zheng=pre_zheng+1if (tes_zheng-pre_zheng)!=0:zhengqulv=abs((tes_zheng-pre_zheng)/(len(y_pred)/2))else:zhengqulv=0print(tes_zheng,pre_zheng,zhengqulv,len(y_pred))zhengquelvDF=pd.DataFrame([zhengqulv],columns=['失误率'])predictdata=pd.DataFrame({'预测值':np.array(y_pred),'实际值':np.array(y_test)})predictdata.to_excel(workbook, "预测值和实际值", encoding='utf_8_sig')zhengquelvDF.to_excel(workbook, "失误率", encoding='utf_8_sig')workbook.save()workbook.close()

结果展示:

图片文件夹保存k线图和折线图,表格保存了数据的形状、概况描述、清洗后的数据、降维后的数据、主成分贡献率、标准化后的数据、预测值和真实值的对比数据表以及失误率。

图片展示:

k线图和柱状图均值折线图

预测值和真实值对比折线图,绿色真实值,红色预测值

表格展示:

形状

不挨个展示了直接展示失误率

有零失误率的:

零失误真实值和预测值折线图

展示完毕。

sklearn股票预测相关推荐

  1. keras实现简单lstm_四十二.长短期记忆网络(LSTM)过程和keras实现股票预测

    一.概述 传统循环网络RNN可以通过记忆体实现短期记忆进行连续数据的预测,但是,当连续数据的序列边长时,会使展开时间步过长,在反向传播更新参数的过程中,梯度要按时间步连续相乘,会导致梯度消失或者梯度爆 ...

  2. 打造属于自己的量化投资系统9——支持向量机SVM算法在股票预测涨跌中应用

    1.支持向量机即SVM原理 支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于分类的范畴.它的原理就是求出"保证距离最近的点,距离它们最远的线&q ...

  3. 基于线性回归的股票预测案例

    基于线性回归的股票预测案例 本次的案例使用的是股票数据,数据源从www.quandl.com 获取.本次案例主要是为了练习线性回归 pip install quandl 安装quandl库. 在使用的 ...

  4. pytorch股票预测

    #导包 import numpy as np import torch from torch.autograd import Variable from sklearn.preprocessing i ...

  5. 机器学习:回归分析——基于线性回归的股票预测

    基于线性回归的股票预测 数据获取 数据预处理 编码实现 数据获取 我们可以从https://data.nasdaq.com/ 获取股票数据集,每个ip访问quandl有次数(50次)的限制,如果访问次 ...

  6. LSTM 长短期记忆神经网络及股票预测实现

    一.介绍 我们知道RNN(循环神经网络)可以通过时间序列预测输出,LSTM也具有同样的功能,那么为什么需要LSTM呢? 由于RNN在参数更新过程中参数矩阵更新可能会造成梯度消失的问题,这才演化出了具有 ...

  7. 深度学习------pytorch,RNN:句子预测,股票预测

    1. torch股票预测 import torch import torch.nn as nn from torch.autograd import Variable import numpy as ...

  8. 基于SVM算法的股票预测分析

    基于SVM算法的股票预测分析 1.数据集选取与描述 由于股票数据的混沌性.无序性,不适宜选取太多的数据作为模型训练的数据集.故本文选出的数据是"温氏股份"200个交易日的股票数据, ...

  9. 基于RNN的短期股票预测

    1.数据集来源 本文数据集是通过python中tushare模块下载的股票日k线数据,本次数据只用来了其中的开盘价格  tushare模块简介 导入tushare import tushare as ...

  10. 大数据毕业设计 LSTM时间序列预测算法 - 股票预测 天气预测 房价预测

    文章目录 0 简介 1 基于 Keras 用 LSTM 网络做时间序列预测 2 长短记忆网络 3 LSTM 网络结构和原理 3.1 LSTM核心思想 3.2 遗忘门 3.3 输入门 3.4 输出门 4 ...

最新文章

  1. WampServer安装环境
  2. 学号 20175223 《Java程序设计》第4周学习总结
  3. 50、Power Query-Text.Contains的学习
  4. Redis击穿、雪崩、穿透场景描述与解决方案
  5. leetcode —— 59. 螺旋矩阵 II
  6. 寒武纪“动荡”的 6 周年:CTO 梁军离职,市值蒸发 59 亿,核心技术人才仅剩 3 人
  7. 使用Jmeter性能测试注意点
  8. java高级程序员面试题_Java高级面试题整理(附答案)
  9. keras 的dot、multiply区别
  10. 简书网页劫持分析,网站劫持,利用 CSP 预防劫持
  11. redis 源码全解析
  12. android图标分组名称唯美简单可复制,分组名称唯美简单四字
  13. 免费获取ps密钥_ps密钥
  14. 使用Python3自带GUI tkinter 做的图形化操作SQLite3数据库的工具 v1.12 修修补补将就用
  15. Win7 每天定时关机
  16. C#winform上传图片
  17. 2018年目标——计划未来
  18. linux抢占式调度
  19. laradock配置laravel 报错 Connection refused tcp://127.0.0.1:6379
  20. layui的exports插件,导出excel时,长数字为科学计数法解决

热门文章

  1. 什么是360度全景图,360度全景图有什么用
  2. 2019信息素养知识点
  3. k8s免fq下载镜像
  4. python词云背景图_python数据分析可视化,制作你想要的背景图词云
  5. Unity 动画模拟果冻抖动效果
  6. Win10下修改git全部配置文件方法
  7. 你还在找音乐网站吗?试试这几个吧
  8. FTP Server端的使用
  9. python Excel xlsx file; not supported
  10. nginx转发百度地图内网化