本期我们将共同学习如何计算数据的滑动平均值,以及更复杂的数据可视化方法。我们将学习在一个图中展示多种曲线的方法。

前言

在这个系列中,我们将共同学习如何借助Python这个强大的工具处理金融数据。在正式开始这个系列的学习之前,需要您具有Python编程的基础知识,至少需要将Python安装好。如果暂时还不满足这一要求的,建议先关注公众号 IT信息教室,学习 Python入门教程。

内容首发于微信公众号IT信息教室,如果您想学习更多AI相关的技能,欢迎搜索关注或微信扫描下方二维码关注~~

滑动平均值

在此之前,我们已经能够使用 Yahoo 提供的 API 接口,获取某家上市公司近年来的股票交易数据,并能够将其保存为本地的 csv 文件。我们首先从本地读取这个文件以获取其中的数据:

dataFrame = pd.read_csv('GOOG.csv', parse_dates = True, index_col= 0)

这样 ‘GOOG.csv’ 这个文件中的数据就以 pandas data frame 的格式存放在了变量 dataFrame 中了。

接下来我们就通过获取 dataFrame 中的数据,求滑动平均值,并将计算结果作为新的一列添加到 dataFrame 中个变量中。所谓滑动平均值就是:

在简单平均数法基础上,通过顺序逐期增减新旧数据求算移动平均值。相比于原始曲线,滑动平均值构成的曲线一般更平滑,可以用于对数据的拟合或者预测。

我们以 100 天的滑动平均值为例,当前时刻的滑动平均值为当前时刻的值与之前 99 的时刻的值的平均值。在 Python 中,我们首先指定需要处理的数据,然后通过 rolling() 设置滑动窗口,并通过 mean() 这个方法求取其均值:

dataFrame['100ma'] = dataFrame['Adj Close'].rolling(window = 100).mean()

其中通过 window = 100 为设置滑窗长度为 100。这里我们求取 ‘Adj Close’ 这一列的划定平均值,并将其作为新的一列数据存放到 dataFrame 中,新的一列数据的索引名称为 ‘100ma’。如果 dataFrame 中已经存在一列的索引名称为’100ma’ ,那么这行命令会覆盖现有数据,否则的话会新建这样一列。

                  High         Low        Open       Close      Volume   Adj Close  100ma
Date
2009-12-31  311.532288  308.832428  311.208527  308.832428   2448700.0  308.832428    NaN
2010-01-04  313.579620  310.954468  312.304413  312.204773   3927000.0  312.204773    NaN
2010-01-05  312.747742  309.609497  312.418976  310.829926   6031900.0  310.829926    NaN
2010-01-06  311.761444  302.047852  311.761444  302.994293   7987100.0  302.994293    NaN
2010-01-07  303.861053  295.218445  303.562164  295.940735  12876600.0  295.940735    NaN
2010-01-08  300.498657  293.455048  294.894653  299.885956   9483900.0  299.885956    NaN

这里 ‘100ma’ 这一列数据的前面几行的数值都是 NaN,即 Not a Number。这是由于我们设置的滑动窗口长度为 100,然而对于前 99 行数据,我们无法在其前面找到额外的99行以计算它的滑动平均值,因此这里就返回了 NaN 这样一个结果,这样一个数据显然对于我们来说是没有意义的,我们可以通过在 rolling 这个方法里 min_periods 这个参数来设置滑窗的最小值以防止出现这样的数据。

dataFrame['100ma'] = dataFrame['Adj Close'].rolling(window = 100, min_periods = 0).mean()

这里我们通过 min_periods = 0 将滑窗的最小值设置为 0,这样当数据不足 100 个时,会只使用实际有的数据个数来计算其滑动平均值。我们再次输出 dataFrame 的前 6 行就可以看到以下内容:

                  High         Low        Open       Close      Volume   Adj Close       100ma
Date
2009-12-31  311.532288  308.832428  311.208527  308.832428   2448700.0  308.832428  308.832428
2010-01-04  313.579620  310.954468  312.304413  312.204773   3927000.0  312.204773  310.518600
2010-01-05  312.747742  309.609497  312.418976  310.829926   6031900.0  310.829926  310.622375
2010-01-06  311.761444  302.047852  311.761444  302.994293   7987100.0  302.994293  308.715355
2010-01-07  303.861053  295.218445  303.562164  295.940735  12876600.0  295.940735  306.160431
2010-01-08  300.498657  293.455048  294.894653  299.885956   9483900.0  299.885956  305.114685

数据的可视化

接下来,我们尝试用一种叫复杂的方法将数据可视化展示出来。我们在同一张图里放入多张子图。

在同一张图中放入多张子图可以使用 matplot 中的 subplot2grid() 这个方法:plt.subplot2grid(shape, loc, kwargs)

这个方法将大图划分为一个个小的网格,然后可以设置每一个或者每几个网格中放入哪一组数据的可视化图表。

如果将一个大图划分成 m 行 n 列的网格,那么网格最左上角的子网格的位置为 (0, 0),最右下角的子网格的位置为 (m-1, n-1)。

例如,我们希望在一个图中展示两个坐标系,那么就可以通过这个方法去设置坐标系的一些属性:

ax1 = plt.subplot2grid((6,1), (0,0), rowspan=5, colspan=1)
ax2 = plt.subplot2grid((6,1),(5,0) , rowspan=1, colspan=1, sharex=ax1)

这里我将一张大图划分为 6 行 1 列的网格,其中坐标系 ax1 从 (0,0) 这个位置开始,占用 5 行 1 列的网格。而坐标系 ax2 则从 (5,0) 这个位置开始,占用 1 行 1 列的网格。此外 ax2 中的 sharex=ax1 表示与 ax1 共享横坐标。

接下来我们首先在 ax1 坐标系中绘制 ‘Adj Close’ 和 ‘100ma’ 的折线图。

折线图的绘制可以直接使用 matplotlib 中的 plot() 方法。

ax1.plot(dataFrame.index, dataFrame['Adj Close'])
ax1.plot(dataFrame.index, dataFrame['100ma'])

然后类似的方法,我们在 ax2 坐标系中绘制 ‘Volume’ 这一列数据的条形图。

绘制条形图可以直接使用 matplotlib 中的 bar() 方法。

ax2.bar(dataFrame.index, dataFrame['Volume'])

这样我们就在一个图中展示了三种不同数据的可视化图形,参考输出如下:

参考代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import style
import pandas as pd
import pandas_datareader.data as web
style.use('ggplot')pd.set_option('display.max_columns',1000)
pd.set_option('display.width', 1000)
pd.set_option('display.max_colwidth',1000)'''
通过 yahoo 提供的 API 接口获取 Google 的股价信息并将其保存为 csv 文件。
'''
# start = dt.datetime(2010, 1, 1 )
# end = dt.datetime(2020, 12, 31 )# dataFrame = web.DataReader('GOOG', 'yahoo', start, end)
# print(dataFrame.tail(6))# dataFrame.to_csv('GOOG.csv')'''
从保存好的 csv 文件中读取数据,并对其进行处理和可视化。
'''
dataFrame = pd.read_csv('GOOG.csv', parse_dates = True, index_col= 0)
dataFrame['100ma'] = dataFrame['Adj Close'].rolling(window = 100, min_periods = 0).mean()print(dataFrame.head(6))ax1 = plt.subplot2grid((6,1), (0,0), rowspan=5, colspan=1)
ax2 = plt.subplot2grid((6,1),(5,0) , rowspan=1, colspan=1, sharex=ax1)ax1.plot(dataFrame.index, dataFrame['Adj Close'])
ax1.plot(dataFrame.index, dataFrame['100ma'])
ax2.bar(dataFrame.index, dataFrame['Volume'])plt.show()

Python 与金融科技2|数据的滑动平均值及多图可视化相关推荐

  1. 神策数据荣获“2017金融科技·大数据优秀案例之最佳实践案例奖”

    当前,金融市场活跃度不断提升,业务模式不断创新,金融领域数据量呈爆炸式增长,蓬勃发展的大数据产业给金融业的发展带来了新机遇,也提出了新的挑战. 6 月 29 日, 「数据猿·超声波」之金融科技­商业价 ...

  2. 线上活动预告丨拥抱金融科技 洞见数据未来

    全球数字化时代已经到来,面对行业竞争格局的改变,越来越多的金融企业开始主动适应市场变化,积极拥抱新兴技术,用科技带动创新发展.本期数据库大咖讲坛,以"拥抱金融科技   洞见数据未来" ...

  3. 金融科技大数据产品推荐:荣之联·风报—人工智能企业情报分析系统

    荣之联·风报在企业对外投资管理.企业内部管理.渠道管理.内部审计.司法调查.行业研究和日常经营中均具有丰富的应用场景.以企业对外的投资管理为例,荣之联·风报可以被灵活应用于对投资标的利益相关方的监测. ...

  4. 再创佳绩 2021数字经济科技创新应用颁奖盛典,冲量在线荣获最佳金融科技大数据应用奖

    2月25日,由华东江苏大数据交易中心主办,数据质量管理智库.上海现代服务业联合会大数据中心.上海现代服务业联合会金融科技服务专业委员会等协办单位,共同举办的2021数字经济科技创新应用颁奖盛典圆满落幕 ...

  5. 金融科技大数据产品推荐:金鹏汽车金融大数据风控系统

    金鹏汽车金融大数据风控系统主要基于大数据科技.决策树规则引擎.深度学习等多项核心技术,有效针对新车贷款.二手车贷款等业务,提高风控效率. 官网 | www.datayuan.cn 微信公众号ID | ...

  6. 金融科技大数据产品推荐: 换汇API/海外支付API——让跨境支付更简单

    官网 | www.datayuan.cn 微信公众号ID | datayuancn 本产品为数据猿推出的"金融科技价值-数据驱动金融商业裂变"大型主题策划活动第一部分的文章/案例/ ...

  7. 金融科技大数据产品推荐:恒丰银行实时智能决策引擎

    恒丰银行实时智能决策引擎是恒丰银行业务策略管理解决方案的核心产品,该产品让策略业务人员轻松高效地配置出风控.反欺诈.实时营销等场景下实时.准实时的决策模型/规则 官网 | www.datayuan.c ...

  8. 招商银行王龙:金融科技银行数据架构设计的13条守则(含PPT)

    作者简介:王龙,招商银行数据中心MySQL资深架构师,将MySQL引入招商银行,并从无到有建设MySQL生态,解决了MySQL在银行领域使用的诸多问题. 本文根据招商银行资深架构师王龙在『3306π』 ...

  9. 金融科技大数据产品推荐:金融魔方 ---专业的金融SaaS服务平台

    在金融牌照合规的基础上,链接银行.保险等金融机构核心业务系统,将合规的金融账户.金融产品.交易支付系统.风控.清结算系统等复杂功能集成为一套成熟.合规.可一键接入的金融SDK 官网 | www.dat ...

  10. 金融科技大数据产品推荐:易鑫大数据风控平台

    易鑫大数据风控平台综合了机器学习.网络爬虫.指标体系.规则引擎.图数据库.流式计算等核心技术,整合线上线下多维度数据,可支持反欺诈.信用评分.贷前审批.贷中监控.贷后追踪等全方位的金融风控场景. 官网 ...

最新文章

  1. 临时整形变量溢出的问题
  2. 弱口令的分析和爆破工具使用
  3. C++friend 友元类和友元函数
  4. 让你的Silverlight程序部署在任意服务器上
  5. chromebook刷机_如何查看Chromebook的停产日期
  6. 【CHM】.chm文件无法正常显示的解决方案
  7. IT职场人生系列之八:行业与公司类型
  8. 【雷达通信】基于matlab粒子群算法优化综合微带天线阵列方向图【含Matlab源码 1967期】
  9. 十大排序算法Java
  10. datax底层原理_Datax 任务分配原理
  11. vue中json数据格式化
  12. 《炬丰科技-半导体工艺》SC-1颗粒去除和piranha后漂洗的机理研究
  13. C++ 多线程(一)入门
  14. linux activemq 打印日志,Log4j.xml配置日志按级别过滤并将指定级别的日志发送到ActiveMQ...
  15. 闲居即兴 - 反卷诗篇
  16. Maven Docker几个插件打包+推送到镜像仓库或者私服(Harbor)的方法
  17. 2021-07-08图书借阅管理系统
  18. Python实现文字转语音功能
  19. Latex---局部调大字体--下划线--首行缩进--悬挂缩进
  20. windows系统下载合集

热门文章

  1. 剪贴板是计算机系统,Windows7电脑剪切板在哪?
  2. java 行政区划代码 民政部 json
  3. JavaScript代码收集
  4. 【计算机网络】零拷贝之MMAP
  5. ASME Y14.5 - 2018 中文版 尺寸与公差标注 GDT形位公差
  6. Android下载自带开源图标库教程
  7. 软考 软件设计师考试经验分享、题型分析
  8. struts2拦截器原理
  9. ACM大学生程序设计竞赛在线题库最新精选题解(赵端阳)解析
  10. python3贴吧_python3 百度贴吧 自动签到