记得 关注、分享、点在看 呀~ 这样您就能持续收到优质的推送啦


接下来几期我们将使用机器学习方法帮助我们预测未来股票交易数据的走势。在此之前我们需要对数据进行预处理以供机器学习方法使用。这一期我们将以复权收盘价数据为例,学习如何生成有效的特征数据。


FinTech History

Python 与金融数据|股票数据的获取与可视化

Python 与金融数据|数据的滑动平均值及多图可视化

Python 与金融数据|数据的重采样与蜡烛图(K线图)的绘制

Python 与金融数据|网页爬取上证50股票代码

Python 与金融数据|批量抓取并保存上证50的交易数据

Python 与金融数据|上证50的收盘价汇总

Python 与金融数据|绘制股票间的相关性图表

概  述

前面几期的教程中,我们学习了从网上获取交易数据的方法,学习了将数据可视化的方法,学习了简单的数据清洗和数据合并的方法,另外,我们还学习了分析数据之间的相关性以及将相关性关系以可视化的方式展现出来。

接下来,我们将进一步处理这些数据,并基于这些数据,借助机器学习的一些方法帮助我们更深入的分析和预测现有以及未来的数据。

同样以这里的股票数据为例,我们知道,随着时间的推移,数据之间可能存在一些相关性。例如,一个公司的股票走势,可能会受到其他相关公司的股票走势的影响,那么如果能够让计算机找到并且模拟这一相关性的关系,从某种程度上来说,我们就可以预测特定公司未来的交易信息。

这一目标可以通过‘机器学习’来实现。机器学习的过程实际上是去建立数据的特征与标签的映射关系,并把所有的标签分类。有了这样一种关系之后,给定一个特征,‘机器’ 就会将特征映射为一个‘标签’,这个标签所属的类别就可以作为预测的结果。

对于股票数据来说,特征可以是股票的价格。一般的,为了让预测结果更加准确,需要选取一些有代表性的特征。

我们选取未来几天内每一支股票价格的变化率作为特征,将股票的变化趋势作为标签,我们将一部分标签分为继续买入一类,一部分作为卖出类,其余部分作为继续持有类。

例如我们可以规定,对于股票 A,如果在接下来的 x 天内,股票成交价的增幅可能在 y% 以上,我们就在当前时间点继续买入这家股票。如果未来 x 天成交价的降幅在 y% 以上,我们就在当前时间点卖出这家股票。对于其他预测结果,我们选择继续持有这家股票。

所以,我们的目标是使用机器学习方法,预测未来 x 天的交易信息,并给出指导性的交易方案(买入/卖出/继续持有)。

数据特征的生成

我们首先生成交易信息的特征数据,按照前面的分析,在当前时间点,我们选取最多 x 天后股价相对于当前时间点股票变化的百分比作为特征。

例如取 x=7,那么对于股票 A,我们就建立 7 列特征数据,分别表示 1 天后,2 天后,...,7 天后的股价相比于当前股价的变化率。我们使用函数 processDataForLables 来实现这一功能:

def processDataForLables(ticker):

函数的参数是股票代码,我们需要为每一支想要分析的股票建立特征数据。

这一期我们主要还是以每支股票的复权收盘价为例,与往常一样,首先读取交易数据:

dataFrame = pd.read_csv('SS50JoinedClose.csv', index_col=0)

然后对数据进行简单的过滤清洗,将空白数据都用 0 填充:

dataFrame.fillna(0, inplace=True)

另外,为了方便后续的一些操作,先提取所有的股票代码,以列表的格式保存在变量 tickers 中备用:

tickers = dataFrame.columns.values

接下来,设置数据的特征:

nDays = 7for i in range(1, nDays+1):    dataFrame['{}_{}d'.format(ticker, i)] = (dataFrame[ticker].shift(-i) - dataFrame[ticker]) / dataFrame[ticker]

我们使用 shift(-i) 这个方法获取 i 天后的收盘价。这里生成了 7 天内的特征值,对于名称为 ticker 的股票,生成 7 列特征值,每一列的索引名称为 'ticker_1d', 'ticker_2d', ... , 'ticker_7d'。

接下来,再对生成的数据进行简单的处理,同样的方法,将空白的位置填充上 0:

dataFrame.fillna(0, inplace=True)

这样对于任意给定的股票,就生成了它的特征信息,最后函数范围生成的特征值,为了后续方便使用,我们同时返回所有的股票代码:

return tickers, dataFrame

最后测试一下,以 '600585.SS' 这支股票为例:

tickers, dataFrame = processDataForLables('600585.SS')print(dataFrame)

参考输出如下:

            600036.SS  601229.SS  ...  600585.SS_6d  600585.SS_7dDate                              ...                            2010-01-04  11.171289       0.00  ...     -0.050209     -0.0900432010-01-05  11.183971       0.00  ...     -0.078956     -0.0724492010-01-06  10.950527       0.00  ...     -0.074588     -0.0783602010-01-07  10.666690       0.00  ...     -0.048042     -0.0456592010-01-08  10.666690       0.00  ...     -0.047514     -0.011015              ...        ...  ...           ...           ...2020-11-23  45.400002       7.98  ...      0.000000      0.0000002020-11-24  44.869999       7.94  ...      0.000000      0.0000002020-11-25  44.430000       7.93  ...      0.000000      0.0000002020-11-26  45.090000       7.96  ...      0.000000      0.0000002020-11-27  45.849998       8.09  ...      0.000000      0.000000[2649 rows x 57 columns]

参考代码

#!/usr/bin/env python3# -*- coding: utf-8 -*-"""@author:  IT信息教室(微信公众号)订阅/关注,在看、分享三连吧~"""def processDataForLables(ticker):    dataFrame = pd.read_csv('SS50JoinedClose.csv', index_col=0)    dataFrame.fillna(0, inplace=True)        tickers = dataFrame.columns.values        nDays = 7            for i in range(1, nDays+1):        # The increasing rate of adj close with i day(s).        dataFrame['{}_{}d'.format(ticker, i)] = (dataFrame[ticker].shift(-i) - dataFrame[ticker]) / dataFrame[ticker]            dataFrame.fillna(0, inplace=True)        return tickers, dataFrametickers, dataFrame = processDataForLables('600585.SS')print(dataFrame)

Codes: M先森看世界Edit: M先森看世界



ONE MORE THING


如果您对内容有什么需求建议,或者遇到了什么软件、应用使用方面的问题,请直接在公众号主界面下发私信给我,我看都会及时回复。感谢大家的支持!


合作: classroom.it@hotmail.com

Hi

你好呀

我是 M先森

这是一个共同学习的平台

我会把我会的 你们想学的

做成教程或者写成文章
我们在这一起学英语

学编程 学算法

学各种各样

好玩的好用的软件

记得要常回来看看呀

(^_^)a(^_^)a


点击 阅读原文 查看Python入门教程~

喜欢就点个 分享 点赞 在看 三连吧!

python数据生成正态分布图_Python 与金融数据生成机器学习的特征数据相关推荐

  1. python画3d圆形图_Python之Numpy:二元函数绘制/三维数据可视化/3D

    意义 在机器学习任务中选择计算模型或者学习数学时,可视化有助于研究函数值的变化趋势(观察收敛.分布.几何形状等),带来直观的感受. 源码 # 绘制二元函数 # 参考文献 # + python画二元函数 ...

  2. python做动态折线图_Python数据可视化 pyecharts实现各种统计图表过程详解

    1.pyecharts介绍 Echarts是一款由百度公司开发的开源数据可视化JS库,pyecharts是一款使用python调用echarts生成数据可视化的类库,可实现柱状图,折线图,饼状图,地图 ...

  3. python numba 转灰度图_Python数据预处理:Dask和Numba并行化加速!

    如果你善于使用Pandas变换数据.创建特征以及清洗数据等,那么你就能够轻松地使用Dask和Numba并行加速你的工作.单纯从速度上比较,Dask完胜Python,而Numba打败Dask,那么Num ...

  4. python画k线图_python自动获取行情数据,并画k线图

    1.概述 本例子为画k线图,同时画出5日,10日,30日均线,且鼠标移动到上面会显示当前交易日,开盘价,收盘价,最高价,最低价. 移动平均线:Moving Average,简称MA,MA是用统计分析的 ...

  5. python绘制梅尔谱图_Python入门到底有多简单(三):填充数据

    目录 1.加载包和数据读取2.数据填充2.1 用数值或字符串填充2.2 用字典填充2.3 method参数填充2.3.1 用前面的值填充2.3.2 用后面的值填充2.3.3 limit限制填充的个数2 ...

  6. python 正态分布图_Python工具(正态分布对比图)

    #coding:utf8 import matplotlib.pyplot as plt import numpy as np def visNormal(myArr,deleteOutlier=Tr ...

  7. echarts控制只显示部分数据的折线图_Python数据可视化之pyecharts入门

    Echarts是一个开源的数据可视化JS库,pyecharts是一个生成Echarts图表的python类库.在使用pyecharts,首先我们需要安装pyechats类库. pip install ...

  8. python 画系统关联图_Python基于pyecharts实现关联图绘制

    我是在使用Word2Vec计算关联词的余弦距离之后,想要更好的展示出来的时候,遇到的这种情况,就做了下拓展. 画图的步骤主要分为: 1. 将距离数据(或者相关数据)读入: 2. 按照一定的格式和参数将 ...

  9. python画k线图_Python绘制K线图

    不管是对量化分析师还是普通的投资者来说,K线图(蜡烛图)都是一种很经典.很重要的工具.在K线图中,它会绘制每天的最高价.最低价.开盘价和收盘价,这对于我们理解股票的趋势以及每天的多空对比很有帮助. 一 ...

最新文章

  1. linux双网卡驱动配置,linux网卡驱动安装、双网卡绑定
  2. 【java开发系列】—— 嵌套类与内部类
  3. bzoj3626:[LNOI2014]LCA
  4. Spyder清除Variable Explorer手动安装protobuf3.0(为了配置windows的python接口)
  5. Android 应用开发(第2章)---如何增加menu菜单
  6. 软件工程实验报告一模板
  7. vs2017 visual studio2017 密钥 激活码
  8. 部分 MP4 视频在谷歌浏览器无法播放
  9. fileman命令的帮助+?
  10. java小程序-画一幅海底世界的图
  11. 人生感悟哲理的名言句子
  12. C++ Windows——计算耗时(获取高精度毫秒计时)
  13. 任天堂 Wii 模拟器 Dolphin 已原生支持苹果 M1 Mac 电脑
  14. hive 复杂数据类型 在数仓中应用(array、map、struct、和其组合应用)
  15. 视频断点续传+java视频
  16. 第八章 磁盘存储器的管理(二)——文件存储空间的管理
  17. Vue - webpack 打包兼容 360 浏览器和 IE 浏览器
  18. 读取用户输入的账户名称,将账户名写入到数组保存
  19. 腾讯云 CFS 文件存储给云函数 SCF 带来的业务新场景
  20. 电脑记事本可以做出哪些小玩意,大家知道吗?

热门文章

  1. 深入分析 Javascript 单线程
  2. sql语句or与union all的执行效率比较
  3. 二十个你必须知道的SEO概念
  4. RabbitMq的学习(一):VirtualHost
  5. pymysql单条插入数据和批量插入数据:
  6. Mysql的存储过程修改表的数据:项目上一个小练习
  7. PHP的单引号双引号
  8. windows安装vue脚手架(vue-cli)及vue ui无反应,npm i -g @vue/cli报错解决方案
  9. Uploadify3.2中文提示
  10. at指令获取网络连接类型_【新手】ESP8266模块 AT指令详解