金融时间序列

金融时间序列:以日期或时间为索引的数据

股价、美元-欧元汇率就表现为金融时间序列数据

python中处理时间序列的主要工具是pandas库

pandas基础

  • pandas是在numPy的基础上构建的
inport numpy as np
import pandas as pd

使用DateFrame类第一步

  • DateFrame类设计用来管理具有索引和标签的数据

  • DateFrame在存储数据上的特性:

  1. 数据
    可以用不同组成及类型提供(列表,元组,字典对象,ndarray)
  2. 标签
    数据组织为列,可以自定义列名
    3.索引
    可以采用字符串,数值,时间信息

  • 一般来说,可以类似于ndarray那样来对DateFrame对象实现相同的向量化操作。

  • 可以在两个维度上同时扩增DateFrame对象(加列)

  • 也可以取整个DataFrame对象定义一个新列,在这种情况下,索引自动分配

  • 追加数据的工作是类似的,但是在这里会有一个副作用,就是索引被替代为一个单一的数字索引。

  • 因此通常在给一个DataFrame对象进行追加的时候,都应当提供合适的索引信息。这会保持索引。

总结:加列用[],加行用{}

处理缺漏的信息

eg:添加的新列中有一个不存在的索引

  • 使用join方法会忽略掉索引不存在的位置的数据。
  • 为了保持数据,我们需要提供一个参数how=outer,这样在缺失数据的位置,会使用NaN来代替。
  • 虽然存在缺失值,但是大多数方法仍然是可以工作的。

使用DateFrame类第二步

从现在开始,我们讨论的都是数值型的数据。

  • 为了分析,我们需要首先生成一个分析序列,也就是一个numpy.ndarray,例如,这里我们生成9行4列的伪随机数,呈现标准正态分布。
  • 虽然可以直接生成DataFrame对象,通常在实践中还会使用一个ndarray对象来生成,因为这个时候pandas会保持其基本的结构而且仅仅加入meta信息(例如:索引数值)。这同样是代表了金融应用和一般科学研究的一种典型应用方式。
  • DateFrame函数使用的参数:
  • 与结构化数组一样,DataFrame对象有列名属性,可以通过list来进行赋值,同时这个列名还提供了访问DataFrame对象的一种有效机制。
处理时间索引
  • 为了有效的处理时间序列数据

  • 例如,假设我们的9行4列的数据对应于月末的数据,开始于2015年1月,那么可以按照下述方式来生成日期

    用date_range生成一个DatetimeIndex对象

  • date_range函数参数

    其中freq有多种选择。

  • 与其他列相同,我们将新生成的DatetimeIndex列作为DataFrame对象的索引

也可以使用numPy的array()函数从DateFrame生成一个ndarray

基本分析

  • 和NumPy.ndarray类似,Pandas的DataFrame类也提供了大量方便的方法。
    按列总和:df.sum()
    按列平均值:df.mean()
    累计总和:df.cumsum()(每一行分别加前一行)

  • 还提供了一个数据集常用统计指标获取的函数,describe方法。

  • 可以对DataFrame对象应用大多数的NumPy一般函数。

  • Pandas具有一定的容错特性,在这个条件下,如果数学运算失败,它会将放置一个NaN值,不仅如此,正如我们刚刚介绍的那样,处理这种不完全的数据集与完整数据集是一样的。通常,pandas会忽略掉缺失的错误数据而只针对可得数据进行处理。

  • 作图:可以直接应用matplotlib的函数,而且还提供了一些特别的方法。

Series类

  • Pandas还提供了series类,如果从DataFrame对象中选取一列,则获得了一个Series对象。
  • 大多数的针对DataFrame的方法对于Series对象也是成立的。

GroupBy操作

  • Pandas提供了强大而灵活的分组功能,这与SQL中的分组以及excel中的数据透视表类似。
  • groups = df.groupby('groupColomnName');
  • 分组也可以针对多列进行.

金融数据

  • 今天的互联网提供了大量的金融信息,大的网站诸如Google或Yahoo有着丰富的金融数据提供。虽然数据的质量有的时候不能满足专业化的需求。关于这方面的一个例子是股票分拆,这样的数据比较适合于描述pandas的“金融能力”。
  • 使用pandas的内置函数DataReader来从Yahoo Finance获取金融数据,分析数据并且生成数据图表。所需要的函数需要引入pandas的一个子库。
import pandas_datareader.data as web
df_stockload = web.DataReader("600797.SS", "yahoo", datetime.datetime(2018, 1, 1), datetime.datetime(2019, 1, 1))
  • tail()方法提供数据集的最后五行
  • 和NumPy.ndarray类似, pandas 允许在整个甚至复杂的 DataFrame 对象上进行向量化数学运算
    eg:根据每天的收盘价返回对数收益率
    1. 添加包含对应信息的列,首先生成1个新的空列,然后在所有指数上进行循环,逐步计算单个对数收益率值
    2. 也可以使用向量化代码,在不使用循环的情况下得到相同的结果,在这方面, shift方法很有用;它相对于索引向前或者向后移动 Series 或者整个 DataFrame 对象
    • 股票收益的两个事实:
      1. 波动率聚类
      2. 杠杆效应
  • 移动平均值很容易用 pandas的 rolling_mean 函数计算

DAX['Close'].rolling(window=42,center=False).mean()

- 回到期权交易者更喜欢的话题,对数收益率的移动历史标准差一一即移动历史波动率可能更有趣。

### 回归分析
- 杠杆效应是权益市场收益率的典型事实。使用 pandas ,还可以在更正式的统计学基础上进行分析。
- (线性)普通最小二乘回归/ (OLS) 方法
- 我们现在(间接)使用隐含波动率,这与未来波动率发展的预期相关,而之前的 DAX 分析使用的是历史波动率计量
posted @ 2020-03-29 11:20  c1utchfan  阅读(803)  评论(0)    收藏  举报