量化金融分析AQF(7):金融时间序列分析处理(Datetime、DatetimeIndex、TimeStamp、Period、重采样resample())

目录

一. Python下的日期格式——Datetime数据及相关转换

1.1 时间格式的转换

1.2 将字符串转化为datetime格式3种方法

二. Pandas下的时间格式

2.1 DatetimeIndex和Timestamp

使用datetime格式列表创建DatetimeIndex

Series创建时参数输入datetime列表,会转化为 DatetimeIndex并以其作为索引

字符串列表转化为DatetimeIndex(pd.to_datetime)

Series. pd.date_range()专门用于生产datetimeIndex

2.2 Period

pd.period_range()

创建period

对比pd.date_range():

period其他操作

2.3 应用举例

三. 时间序列数据的频率调整pandas.DataFrame.resample


 

可能用到的库:

import numpy as np
import pandas as pd
import datetime
from datetime import datetime
import matplotlib.pyplot as plt
%matplotlib inline 
import warnings; warnings.simplefilter('ignore') #忽略可能会出现的警告信息,警告并不是错误,可以忽略;

 

一. Python下的日期格式——Datetime数据及相关转换

1.1 时间格式的转换

输入时间转化为时间格式的时间:

dt_time = datetime(2019, 6, 18)
dt_time

把时间格式的数据转换成为str格式的数据:

str_time = str(dt_time)

用.strftime()方法可以调整年月日的格式;f是format的意思:

量化金融分析AQF(7):金融时间序列分析处理(Datetime、DatetimeIndex、TimeStamp、Period、重采样resample())_第1张图片

 

1.2 将字符串转化为datetime格式3种方法

  • 方法1、datetime.strptime(),p:parse:解析;必须要人为说明我日期具体格式;
dt_str = '2017-06-18'
dt_time = datetime.strptime(dt_str, '%Y-%m-%d')   
print(type(dt_time)) 
print(dt_time)

  • 方法2、dateutil.parser.parse
from dateutil.parser import parse
dt_str2 = '1-06-2017'
dt_time2 = parse(dt_str2)     # 使用参数dayfirst = True时,可以让第一个值为天数
print(type(dt_time2)) 
print(dt_time2)

  • 方法3、使用pd.to_datetime
str_time = pd.Series(['2017/06/18', '2017/06/19', '2017-06-20', '2017-06-21'])
dt_time = pd.to_datetime(str_time)
dt_time

量化金融分析AQF(7):金融时间序列分析处理(Datetime、DatetimeIndex、TimeStamp、Period、重采样resample())_第2张图片

 

二. Pandas下的时间格式

--timestamp:pandas 最基本的时间日期对象是TimeStamp,这个对象与 datetime 对象保有高度兼容性,可通过.to_datetime() 函数转换。
--DatetimeIndex: pandas下的时间索引格式;
--pd.date_range() 可用于生成指定长度的 DatetimeIndex。参数可以是起始结束日期,或单给一个日期,加一个时间段参数。日期是包含的。
--Period:时期(period)概念不同于前面的时间戳(timestamp),指的是一个时间段。但在使用上并没有太多不同,pd.Period 类的构造函数仍需要一个时间戳,以及一个 freq 参数。

 

2.1 DatetimeIndex和Timestamp

  • 使用datetime格式列表创建DatetimeIndex

dates = [datetime(2016, 8, 1), datetime(2016, 8, 2)]
dates = pd.DatetimeIndex(dates)   #把python下的datetime转换成为pandas下的时间索引DatatimeIndex;
dates 
  • Series创建时参数输入datetime列表,会转化为 DatetimeIndex并以其作为索引

df = pd.Series(np.random.randn(2), index = dates)
df

量化金融分析AQF(7):金融时间序列分析处理(Datetime、DatetimeIndex、TimeStamp、Period、重采样resample())_第3张图片

  • 字符串列表转化为DatetimeIndex(pd.to_datetime)

date_time = pd.to_datetime(['June 18, 2017', '2016-06-19', 
                            '2016.6.20 ', None])
date_time

  • Series. pd.date_range()专门用于生产datetimeIndex

dates = pd.date_range('8/1/2014', periods=10)     创建一个连续10天的DatetimeIndex并以其为索引
df = pd.Series(np.random.randn(10), index = dates)
df.head()

量化金融分析AQF(7):金融时间序列分析处理(Datetime、DatetimeIndex、TimeStamp、Period、重采样resample())_第4张图片

 

2.2 Period

  • pd.period_range()

pandas.period_range(start=None, end=None, periods=None, freq=None, name=None)

参数:

start : 开始时间,默认无生成期间的左边界

end : 结束边界,默认无生成期间的右边界

periods : 整数,要生成日期的期间数,默认无要生成的期间数

freq : 从 ‘D’、'M'、‘Y’选择,所生成时期的步长,分别为:天、月、年。默认为天

name :名字,默认生成的PeriodIndex没有名字

  • 创建period

time_period = pd.period_range('2017-01-01', periods = 12, freq='y')    # periods:取多少个    freq:取的单位
time_period

  • 对比pd.date_range():

date_range = pd.date_range('2017-01-01', periods = 12, freq='M')
date_range

pd.date_range()和pd.period_range()区别:

1、period_range创建的是PeriodIndex,date_range创建的是DatetimeIndex

2、若是按月生产数据,则period_range只会精确到月。date_range可以精确到月中的某一日

  • period其他操作

1、time_period是刚刚period生成的时间对象

time_period + 1

所有时间直接+1

 

2.3 应用举例

import tushare as ts
data = ts.get_k_data('000001', '2015-01-01', '2016-12-30')
data.index = pd.to_datetime(data['date'])
del data['date']
data.head(5)

量化金融分析AQF(7):金融时间序列分析处理(Datetime、DatetimeIndex、TimeStamp、Period、重采样resample())_第5张图片

可以只指定年月索引

data['2016-02'].head()

量化金融分析AQF(7):金融时间序列分析处理(Datetime、DatetimeIndex、TimeStamp、Period、重采样resample())_第6张图片

但是,若选择具体的天数,就会报错

指定具体天数应该使用data.ix['2016-02']  

 

三. 时间序列数据的频率调整pandas.DataFrame.resample

重采样(Resampling)指的是把时间序列的频度变为另一个频度的过程。把高频度的数据变为低频度叫做降采样(downsampling),把低频度变为高频度叫做增采样(upsampling)。

DataFrame.resample(rule, how=None, axis=0, fill_method=None, 
                   closed=None, label=None,                                                                           
                   convention='start', kind=None,        
                   loffset=None, limit=None, base=0, on=None, level=None)

详细官网:http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.resample.html

常用:

how : str下采样/重新采样的方法,默认为下采样的“平均值”。

axis : {0 or ‘index’, 1 or ‘columns’}, default 0用于上下采样的轴。对于序列,这将默认为0,即沿行。必须是datetimeindex、timedeltaindex或periodindex。

fill_method : str, default None过采样的填充方法。

 

你可能感兴趣的:(量化金融分析AQF,金融量化分析)