pandas金融数据分析的灵魂:时间序列

Posted 程序猿与吉他狗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas金融数据分析的灵魂:时间序列相关的知识,希望对你有一定的参考价值。

时间序列在很多领域都是一个重要的数据结构,尤其是在金融领域,每一只股票或者期货的数据都是根据时间序列来分布的,绝大多数分析都是按照时间维度来进行分析,大家所熟悉的K线图都是基于时间序列的,今天将介绍pandas如何处理时间序列。

 

一、pythondatetime

在之前的文章(python内置库)中说到,python提供了丰富的内置库支持,date time也是其功能之一,首先来了解一下pythondatetime库。

模块

说明

date

日期

time

时间

datetime

日期时间

timedelta

时间差

timezone

时区

tzinfo

时区信息

datetime_CAPI

为其他模块提供C语言接口

获取当前日期时间

pandas金融数据分析的灵魂:时间序列

utcnow是获取当前的UTC标准时间,这是为了解决时区问题,因为在同一个时间点,在世界各地的本地时间是不一样的,为了处理时间不一致问题就有了全球统一时间UTC,使用UTC然后根据当地时区就可以得到本地日期时间。

日期时间对象初始化

pandas金融数据分析的灵魂:时间序列

可以通过nowutcnow方法获取当前时间,也可以输入一个元组来初始化一个日期时间对象,也可以使用strptime方法通过字符串来初始化。

日期时间对象输出

pandas金融数据分析的灵魂:时间序列

可以通过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

不同环境中的AMPM

%x

当前环境的日期格式

%X

当前环境的时间格式

时间差timedelta

pandas金融数据分析的灵魂:时间序列


二、pandas的时间序列

1、初始化时间序列

金融数据分析中,大多数情况下时间序列被用作索引,也就是之前Index中的DatetimeIndex类型。

pandas金融数据分析的灵魂:时间序列

这种方法是将datetime对象的列表指定为index的方式来实现,很明显这种方式效率太低。

使用date_range

pandas金融数据分析的灵魂:时间序列

date_range方法接收1个或两个时间参数,如果是1个就代表时间起点,就需要配合periods这个长度参数确定终点,如果是2个就分别代表时间起点和终点,还有1freq频率参数确定时间间隔,默认为1天,tz参数代表时区。

freq参数表

参数

说明

D

每日历日,可加数字2D表示每2

B

每工作日

H

每小时,1h 2h

Tmin

每分30min 60min

S

每秒

Lms

每毫秒

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、索引和切片

pandas金融数据分析的灵魂:时间序列

pandas金融数据分析的灵魂:时间序列

3、时区处理

在处理全球数据时,时区问题变得非常棘手,尤其还有多变的夏令时(DST)问题,所以现在业界处理时间都采用UTC(格林尼治标准时间GMT),然后通过转换得到当地时间,python处理时区问题的库是pytzpandas集成了pytz。在前面初始化date_range时未传入tz参数,所以查看索引时区时返回None,我们可以在初始化时间序列时添加tz参数,也可以使用tz_localize方法添加时区和使用tz_convert方法转换时区。

pandas金融数据分析的灵魂:时间序列

pandas金融数据分析的灵魂:时间序列

4、重采样

重采样(resampling)是将时间序列从一个频率转换为另一个频率的处理过程,这个方法使用场景非常多,特别是在金融数据领域,例如求20天均值。

pandas金融数据分析的灵魂:时间序列

重采样参数表

参数

说明

freq

采样频率,和date_rangefreq接受的参数一致。

how

被弃用,现使用方法为使用.调用相应的求值方法,常用方法有mean ohlc max min median first last

axis

采样轴

fill_method

升采样填充方法,ffill bfill

closed

降采样中设置闭合端

label

聚合后选择标签原则

loffset

元标签时间校正值

limit

填充数值最大数量

kind

聚合到periodtimestamp

converntion

低频数据到高频数据采用的约定

使用groupby进行采样

pandas金融数据分析的灵魂:时间序列


三、一个简单的例子

下面使用pandas操作一只股票数据

1、构造数据

首先将本地的一个200*504的一个numpy数组读入,用列表解析生成行索引,使用date_range生成时间序列,然后构造DataFrame对象。

pandas金融数据分析的灵魂:时间序列

2、转置和重采样

先将数据转置,时间序列作为行索引,然后使用resample按照21天重采样。

pandas金融数据分析的灵魂:时间序列

3DataFrame转成Series操作

df中有200只股票的数据,现在抽取1只股票数据,数据就变成了Series,然后使用cumsum方法计算累计涨跌,使用plot方法绘制图形。

pandas金融数据分析的灵魂:时间序列


pandas的基本操作完结:


以上是关于pandas金融数据分析的灵魂:时间序列的主要内容,如果未能解决你的问题,请参考以下文章

金融数据获取

Zipline:使用 pandas-datareader 为非美国金融市场提供 Google Finance 数据框

机器学习Pandas库练习-获取yahoo金融苹果公司的股票数据

用Pandas Dataframe来架构起金融股票数据的内部形态

python pandas模块,nba数据处理

用Pandas Dataframe来抓取重构金融股票的各种业务&数据形态