持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情
1.什么是时间序列?
时间序列(time series) 数据是一种重要的结构化数据形式, 应用于多个领域, 包括金融学、 经济学、 生态学、 神经科学、 物理学等。 在多个时间点观察或测量到的任何事物都可以形成一段时间序列。 很多时间序列是固定频率的, 也就是说, 数据点是根据某种规律定期出现的(比如每15秒、每5分钟、 每月出现一次)。时间序列也可以是不定期的, 没有固定的时间单位或单位之间的偏移量。 时间序列数据的意义取决于具体的应用场景, 主要有以下几种:
- 时间戳(timestamp) , 特定的时刻。
- 固定时期(period) , 如2007年1月或2010年全年。
- 时间间隔(interval) , 由起始和结束时间戳表示。 时期(period) 可以被看做间隔
(interval) 的特例。
2.日期和时间数据类型及工具
Python标准库包含用于日期(date) 和时间(time) 数据的数据类型, 而且还有日历方面的功能。我们主要会用到datetime、 time以及calendar模块。 datetime.datetime(也可以简写为datetime)是用得最多的数据类型:
from datetime import datetime
now=datetime.now()
now
datetime以毫秒形式存储日期和时间。 timedelta表示两个datetime对象之间的时间差:
delta=datetime(2011,1,7)-datetime(1999,6,24,8,15)
delta
3.字符串和datetime的相互转换
利用str或strftime方法(传入一个格式化字符串),datetime对象和pandas的Timestamp对象可以被格式化为字符串:
stamp=datetime(2022,10,31)
str(stamp)
datetime.strptime是通过已知格式进行日期解析的最佳方式。 但是每次都要编写格式定义是很麻烦
的事情, 尤其是对于一些常见的日期格式。这种情况下,可以用dateutil这个第三方包中的parser.parse方法(pandas中已经自动安装好了):
import pandas as pd
from dateutil.parser import parse
parse('2022-10-31')
pandas通常是用于处理成组日期的, 不管这些日期是DataFrame的轴索引还是列。 to_datetime方法可以解析多种不同的日期表示形式。 对标准日期格式的解析非常快
4.时间序列基础
pandas最基本的时间序列类型就是以时间戳(通常以Python字符串或datatime对象表示) 为索引的Series:
import pandas as pd
import numpy as np
from datetime import datetime
dates=[datetime(2011,1,2),datetime(2011,1,5),datetime(2011,1,7),
datetime(2011,1,9),datetime(2011,1,11),datetime(2011,1,13),]
ts=pd.Series(np.random.randn(6),index=dates)
ts
这些datetime对象实际上是被放在一个DatetimeIndex中的
ts.index
跟其他Series一样, 不同索引的时间序列之间的算术运算会自动按日期对齐
ts+ts[::2]
ts[::2] 是每隔两个取一个。
4.1 索引、选取
当根据标签索引选取数据时, 时间序列和其它的pandas.Series很像:
stamp=ts.index[2]
ts[stamp]
在某些应用场景中, 可能会存在多个观测数据落在同一个时间点上的情况。 下面就是一个例子:
dates=pd.DatetimeIndex(['1/1/2000','1/2/2000','1/3/2000','1/2/2000','1/2/2000',])
dup_ts=pd.Series(np.arange(5),index=dates)
dup_ts
对这个时间序列进行索引, 要么产生标量值, 要么产生切片, 具体要看所选的时间点是否重复,假设你想要对具有非唯一时间戳的数据进行聚合。 一个办法是使用groupby, 并传入level=0:
grouped=dup_ts.groupby(level=0)
grouped.mean()