sklearn股票预测
通过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股票预测相关推荐
- keras实现简单lstm_四十二.长短期记忆网络(LSTM)过程和keras实现股票预测
一.概述 传统循环网络RNN可以通过记忆体实现短期记忆进行连续数据的预测,但是,当连续数据的序列边长时,会使展开时间步过长,在反向传播更新参数的过程中,梯度要按时间步连续相乘,会导致梯度消失或者梯度爆 ...
- 打造属于自己的量化投资系统9——支持向量机SVM算法在股票预测涨跌中应用
1.支持向量机即SVM原理 支持向量机即SVM(Support Vector Machine) ,是一种监督学习算法,属于分类的范畴.它的原理就是求出"保证距离最近的点,距离它们最远的线&q ...
- 基于线性回归的股票预测案例
基于线性回归的股票预测案例 本次的案例使用的是股票数据,数据源从www.quandl.com 获取.本次案例主要是为了练习线性回归 pip install quandl 安装quandl库. 在使用的 ...
- pytorch股票预测
#导包 import numpy as np import torch from torch.autograd import Variable from sklearn.preprocessing i ...
- 机器学习:回归分析——基于线性回归的股票预测
基于线性回归的股票预测 数据获取 数据预处理 编码实现 数据获取 我们可以从https://data.nasdaq.com/ 获取股票数据集,每个ip访问quandl有次数(50次)的限制,如果访问次 ...
- LSTM 长短期记忆神经网络及股票预测实现
一.介绍 我们知道RNN(循环神经网络)可以通过时间序列预测输出,LSTM也具有同样的功能,那么为什么需要LSTM呢? 由于RNN在参数更新过程中参数矩阵更新可能会造成梯度消失的问题,这才演化出了具有 ...
- 深度学习------pytorch,RNN:句子预测,股票预测
1. torch股票预测 import torch import torch.nn as nn from torch.autograd import Variable import numpy as ...
- 基于SVM算法的股票预测分析
基于SVM算法的股票预测分析 1.数据集选取与描述 由于股票数据的混沌性.无序性,不适宜选取太多的数据作为模型训练的数据集.故本文选出的数据是"温氏股份"200个交易日的股票数据, ...
- 基于RNN的短期股票预测
1.数据集来源 本文数据集是通过python中tushare模块下载的股票日k线数据,本次数据只用来了其中的开盘价格 tushare模块简介 导入tushare import tushare as ...
- 大数据毕业设计 LSTM时间序列预测算法 - 股票预测 天气预测 房价预测
文章目录 0 简介 1 基于 Keras 用 LSTM 网络做时间序列预测 2 长短记忆网络 3 LSTM 网络结构和原理 3.1 LSTM核心思想 3.2 遗忘门 3.3 输入门 3.4 输出门 4 ...
最新文章
- WampServer安装环境
- 学号 20175223 《Java程序设计》第4周学习总结
- 50、Power Query-Text.Contains的学习
- Redis击穿、雪崩、穿透场景描述与解决方案
- leetcode —— 59. 螺旋矩阵 II
- 寒武纪“动荡”的 6 周年:CTO 梁军离职,市值蒸发 59 亿,核心技术人才仅剩 3 人
- 使用Jmeter性能测试注意点
- java高级程序员面试题_Java高级面试题整理(附答案)
- keras 的dot、multiply区别
- 简书网页劫持分析,网站劫持,利用 CSP 预防劫持
- redis 源码全解析
- android图标分组名称唯美简单可复制,分组名称唯美简单四字
- 免费获取ps密钥_ps密钥
- 使用Python3自带GUI tkinter 做的图形化操作SQLite3数据库的工具 v1.12 修修补补将就用
- Win7 每天定时关机
- C#winform上传图片
- 2018年目标——计划未来
- linux抢占式调度
- laradock配置laravel 报错 Connection refused tcp://127.0.0.1:6379
- layui的exports插件,导出excel时,长数字为科学计数法解决