pandas金融数据分析的灵魂:时间序列
Posted 程序猿与吉他狗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas金融数据分析的灵魂:时间序列相关的知识,希望对你有一定的参考价值。
时间序列在很多领域都是一个重要的数据结构,尤其是在金融领域,每一只股票或者期货的数据都是根据时间序列来分布的,绝大多数分析都是按照时间维度来进行分析,大家所熟悉的K线图都是基于时间序列的,今天将介绍pandas如何处理时间序列。
一、python的datetime库
在之前的文章(python内置库)中说到,python提供了丰富的内置库支持,date time也是其功能之一,首先来了解一下python的datetime库。
模块 |
说明 |
date |
日期 |
time |
时间 |
datetime |
日期时间 |
timedelta |
时间差 |
timezone |
时区 |
tzinfo |
时区信息 |
datetime_CAPI |
为其他模块提供C语言接口 |
获取当前日期时间
utcnow是获取当前的UTC标准时间,这是为了解决时区问题,因为在同一个时间点,在世界各地的本地时间是不一样的,为了处理时间不一致问题就有了全球统一时间UTC,使用UTC然后根据当地时区就可以得到本地日期时间。
日期时间对象初始化
可以通过now和utcnow方法获取当前时间,也可以输入一个元组来初始化一个日期时间对象,也可以使用strptime方法通过字符串来初始化。
日期时间对象输出
可以通过datetime对象的strftime方法格式化字符串输出格式来更加友好的显示。
格式化代码表
代码 |
说明 |
%Y |
4位数的年 |
%y |
2位数的年 |
%m |
2位数的月 |
%d |
2位数的日 |
%H |
24小时制的时 |
%I |
12小时制的时 |
%M |
2位数的分 |
%S |
2位数的秒 |
%w |
整数表示的星期几[0(星期天)-6] |
%U |
每年第几周,每年第一个星期天之前的周为第0周,星期天为第一天 |
%W |
每年第几周,每年第一个星期天之前的周为第0周,星期一为第一天 |
%z |
与UTC的偏移量,如果对象为naive则为空。 |
%F |
相当于%Y-%m-%d |
%D |
相当于%m/%d/%y |
%a |
当前环境的星期几简写 |
%A |
当前环境的星期几全称 |
%b |
当前环境的月份简写 |
%B |
当前环境的月份全称 |
%c |
当前环境的日期和时间格式 |
%p |
不同环境中的AM和PM |
%x |
当前环境的日期格式 |
%X |
当前环境的时间格式 |
时间差timedelta
二、pandas的时间序列
1、初始化时间序列
金融数据分析中,大多数情况下时间序列被用作索引,也就是之前Index中的DatetimeIndex类型。
这种方法是将datetime对象的列表指定为index的方式来实现,很明显这种方式效率太低。
使用date_range
date_range方法接收1个或两个时间参数,如果是1个就代表时间起点,就需要配合periods这个长度参数确定终点,如果是2个就分别代表时间起点和终点,还有1个freq频率参数确定时间间隔,默认为1天,tz参数代表时区。
freq参数表
参数 |
说明 |
D |
每日历日,可加数字2D表示每2天 |
B |
每工作日 |
H |
每小时,1h 2h |
T、min |
每分30min 60min |
S |
每秒 |
L、ms |
每毫秒 |
U |
每微秒 |
M |
每月最后一个日历日 |
BM |
每月最后一个工作日 |
MS |
每月第一个日历日 |
BMS |
每月第一个工作日 |
W-MON |
每周的星期几,MON TUE WED THU FRI STA SUN |
WOM-1MON |
每月第几个星期几 |
Q-JAN |
指定月份为基准,每季度最后一月最后一个日历日 |
BQ-JAN |
每季度最后一月最后一个工作日 |
QS-JAN |
每季度最后一月第一个日历日 |
BQS_JAN |
每季度最后一月第一个工作日 |
A-JAN |
每年指定月份最后一个日历日 |
BA-JAN |
每年指定月份最后一个工作日 |
AS_JAN |
每年指定月份第一个日历日 |
BAS-JAN |
每年指定月份第一个工作日 |
2、索引和切片
3、时区处理
在处理全球数据时,时区问题变得非常棘手,尤其还有多变的夏令时(DST)问题,所以现在业界处理时间都采用UTC(格林尼治标准时间GMT),然后通过转换得到当地时间,python处理时区问题的库是pytz,pandas集成了pytz。在前面初始化date_range时未传入tz参数,所以查看索引时区时返回None,我们可以在初始化时间序列时添加tz参数,也可以使用tz_localize方法添加时区和使用tz_convert方法转换时区。
4、重采样
重采样(resampling)是将时间序列从一个频率转换为另一个频率的处理过程,这个方法使用场景非常多,特别是在金融数据领域,例如求20天均值。
重采样参数表
参数 |
说明 |
freq |
采样频率,和date_range中freq接受的参数一致。 |
how |
被弃用,现使用方法为使用.调用相应的求值方法,常用方法有mean ohlc max min median first last |
axis |
采样轴 |
fill_method |
升采样填充方法,ffill bfill |
closed |
降采样中设置闭合端 |
label |
聚合后选择标签原则 |
loffset |
元标签时间校正值 |
limit |
填充数值最大数量 |
kind |
聚合到period或timestamp |
converntion |
低频数据到高频数据采用的约定 |
使用groupby进行采样
三、一个简单的例子
下面使用pandas操作一只股票数据
1、构造数据
首先将本地的一个200*504的一个numpy数组读入,用列表解析生成行索引,使用date_range生成时间序列,然后构造DataFrame对象。
2、转置和重采样
先将数据转置,时间序列作为行索引,然后使用resample按照21天重采样。
3、DataFrame转成Series操作
df中有200只股票的数据,现在抽取1只股票数据,数据就变成了Series,然后使用cumsum方法计算累计涨跌,使用plot方法绘制图形。
pandas的基本操作完结:
以上是关于pandas金融数据分析的灵魂:时间序列的主要内容,如果未能解决你的问题,请参考以下文章
Zipline:使用 pandas-datareader 为非美国金融市场提供 Google Finance 数据框
机器学习Pandas库练习-获取yahoo金融苹果公司的股票数据