时间序列
2021-8-6
| 2023-8-6
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property

 
时间序列(time series)数据是一种重要的结构化数据形式,在多个时间点观察或测量到的任何时间都可以形成一段时间序列。很多时间, 时间序列是固定频率的, 也就是说, 数据点是根据某种规律定期出现的(比如每15秒);时间序列也可以是不定期的。
时间序列数据的意义取决于具体的应用场景,主要由以下几种:
  • 时间戳(timestamp),特定的时刻
  • 固定时期(period),如2007年1月或2010年全年
  • 时间间隔(interval),由起始和结束时间戳表示,时期(period)可以被看做间隔(interval)的特例
 

时间和日期数据类型及其工具

Python标准库包含用于日期(date)和时间(time)数据的数据类型,而且还有日历方面的功能。主要会用到datetimetime以及calendar模块。datetime.datetime(也可以简写为datetime)是用得最多的数据类型:
 
datetime以毫秒形式存储日期和时间,timedelta表示两个datetime对象之间的时间差:
 
可以给datetime对象加上(或减去)一个或多个timedelta,会产生一个新对象:
notion image
 
 

字符串和datetime的相互转换

利用strstrftime方法(传入一个格式化字符串),datetime对象和pandasTimestamp对象可以被格式化为字符串:
notion image
datetime.strptime可以用这些格式化编码将字符串转换为日期:
 
datetime.strptime是通过已知格式进行日期解析的最佳方式。但是每次都要编写格式定义是很麻烦的事情,尤其是对于一些常见的日期格式。这种情况下,可以用dateutil这个第三方包中的parser.parse方法(pandas中已经自动安装好了):
 
pandas通常是用于处理成组日期的,不管这些日期是DataFrame的轴索引还是列。to_datetime方法可以解析多种不同的日期表示形式。对标准日期格式(如ISO8601)的解析非常快:
 

时间序列基础

pandas最基本的时间序列类型就是以时间戳(通常以Python字符串或datatime对象表示)为索引的Series:
 

索引、选取、子集构造

根据标签索引选取数据时,时间序列和其它的pandas.Series很像:
 
还有一种更为方便的用法:传入一个可以被解释为日期的字符串:
 
 
 
带有重复索引的时间序列
 
 

日期的范围、频率以及移动

pandas中的原生时间序列一般被认为是不规则的,也就是说,它们没有固定的频率。对于大部分应用程序而言,这是无所谓的。但是,它常常需要以某种相对固定的频率进行分析,比如每日、每月、每15分钟等(这样自然会在时间序列中引入缺失值)。
幸运的是,pandas有一整套标准时间序列频率以及用于重采样、频率推断、生成固定频率日期范围的工具。例如可以将之前那个时间序列转换为一个具有固定频率(每日)的时间序列,只需调用resample即可:
字符串“D”是每天的意思。
 

生成日期范围

pandas.date_range可用于根据指定的频率生成指定长度的DatetimeIndex
 
默认情况下,date_range会产生按天计算的时间点。如果只传入起始或结束日期,那就还得传入一个表示一段时间的数字:
 
 
起始和结束日期定义了日期索引的严格边界。例如,如果想要生成一个由每月最后一个工作日组成的日期索引,可以传入"BM"频率(business end of month),这样就只会包含时间间隔内(或刚好在边界上的)符合频率要求的日期:
notion image
 
 
 
 
 

重采样及频率转换

重采样(resampling)指的是将时间序列从一个频率转换到另一个频率的处理过程。将高频率数据聚合到低频率称为降采样(downsampling),而将低频率数据转换到高频率则称为升采样(upsampling)。
并不是所有的重采样都能被划分到这两个大类中。例如,将W-WED(每周三)转换为W-FRI既不是降采样也不是升采样。
pandas对象都带有一个resample方法,它是各种频率转换工作的主力函数。resample有一个类似于groupby的API,调用resample可以分组数据,然后会调用一个聚合函数:
 
resample是一个灵活高效的方法,可用于处理非常大的时间序列
notion image
 
  • Pandas
  • 数据分组和聚合Matplotlib
    目录