本文是作者学习《利用Python进行数据分析》第二版,时间序列章节的学习笔记。
如果想要掌握建议过一遍代码并尝试改变代码和思考原理。
本章知识点
代码
时间序列数据的 意义取决于具体的应用场景,主要有以下几种:
时间戳(timestamp),特定的时刻。
固定时期(period),如2007年1月或2010年全年。
时间间隔(interval),由起始和结束时间戳表示。时期(period)可以被看做 间隔(interval)的特例。
实验或过程时间,每个时间点都是相对于特定起始时间的一个度量。例如,从 放入烤箱时起,每秒钟饼干的直径。
from
1、日期和时间数据类型及工具
我们主要会用到datetime、time以及calendar模块。 datetime.datetime(也可以简写为datetime)是用得最多的数据类型
now
datetime以毫秒形式存储日期和时间。timedelta表示两个datetime对象之间的时间差
delta
可以给datetime对象加上(或减去)一个或多个timedelta,这样会产生一个新对象
start
字符串和datetime的相互转换
利用str或strftime方法(传入一个格式化字符串),datetime对象和pandas的Timestamp对象(稍后就会介绍)可以被格式化为字符串
stamp
datetime.strptime可以用这些格式化编码将字符串转换为日期:
value
datetime.strptime是通过已知格式进行日期解析的最佳方式。但是每次都要编写格式定义是很麻烦的事情,尤其是对于一些常见的日期格式。这种情况下,你可以用dateutil这个第三方包中的parser.parse方法(pandas中已经自动安装好了)
parse
在国际通用的格式中,日出现在月的前面很普遍,传入dayfirst=True即可解决这个 问题
parse
pandas通常是用于处理成组日期的,不管这些日期是DataFrame的轴索引还是列。 to_datetime方法可以解析多种不同的日期表示形式。对标准日期格式(如 ISO8601)的解析非常快
datestrs
NaT(Not a Time)是pandas中时间戳数据的null值。
idx
2、时间序列基础
pandas最基本的时间序列类型就是以时间戳(通常以Python字符串或datatime对象表示为索引的Series:
dates
这些datetime对象实际上是被放在一个DatetimeIndex中的:
ts
跟其他Series一样,不同索引的时间序列之间的算术运算会自动按日期对齐
ts
pandas用NumPy的datetime64数据类型以纳秒形式存储时间戳
ts
DatetimeIndex中的各个标量值是pandas的Timestamp对象
stamp
索引、选取、子集构造
当你根据标签索引选取数据时,时间序列和其它的pandas.Series很像
stamp
还有一种更为方便的用法:传入一个可以被解释为日期的字符串
ts
对于较长的时间序列,只需传入“年”或“年月”即可轻松选取数据的切片
longer_ts
带有重复索引的时间序列
dates
3、日期的范围、频率以及移动
ts
生成日期范围
index
基本的时间序列频率
频率和日期偏移量
four_hours
移动(超前和滞后)数据
ts
由于单纯的移位操作不会修改索引,所以部分数据会被丢弃。因此,如果频率已 知,则可以将其传给shift以便实现对时间戳进行位移而不是对数据进行简单位移:
ts
通过偏移量对日期进行位移
now
通过锚点偏移量的rollforward和rollback方法,可明确地将日期向前或向后“滚动”
offset
5、时期及其算数运算
时期(period)表示的是时间区间,比如数日、数月、数季、数年等。Period类所 表示的就是这种数据类型,其构造函数需要用到一个字符串或整数,以及表11-4中的频率
p
period_range函数可用于创建规则的时期范围
rng
PeriodIndex类保存了一组Period,它可以在任何pandas数据结构中被用作轴索 引
pd
如果你有一个字符串数组,你也可以使用PeriodIndex类
values
时期的频率转换
Period和PeriodIndex对象都可以通过其asfreq方法被转换成别的频率。假设我们有一个年度时期,希望将其转换为当年年初或年末的一个月度时期。该任务非常简 单:
p
6、重采样及频率转换
重采样(resampling)指的是将时间序列从一个频率转换到另一个频率的处理过 程。将高频率数据聚合到低频率称为降采样(downsampling),而将低频率数据转 换到高频率则称为升采样(upsampling)。并不是所有的重采样都能被划分到这两 个大类中。例如,将W-WED(每周三)转换为W-FRI既不是降采样也不是升采 样。
pandas对象都带有一个resample方法,它是各种频率转换工作的主力函数。 resample有一个类似于groupby的API,调用resample可以分组数据,然后会调用 一个聚合函数
rng
降采样
各区间哪边是闭合的。
如何标记各个聚合面元,用区间的开头还是末尾。
rng
ts
最后,你可能希望对结果索引做一些位移,比如从右边界减去一秒以便更容易明白该时间戳到底表示的是哪个区间。只需通过loffset设置一个字符串或日期偏移量即可实现这个目的
ts
OHLC重采样
ts
升采样和插值
frame
假设你想要用前面的周型值填充“非星期三”。resampling的填充和插值方式跟fillna和reindex的一样
print
同样,这里也可以只填充指定的时期数
print