一般说明
一般来说,数据的频率是连续时间戳之间的差异。
如果一切顺利,这种差异将在您的时间序列中保持不变;在这种情况下,这种差异是您的数据的频率。
在其他情况下,它可能会更复杂一些 - 例如,您可能会丢失数据,或者某些时间戳向前或向后移动的数据。
在这种情况下,您可能希望“消除”这些问题,例如通过取这些差异的中位数(如果一些样本来得太早而一些来得太晚)或模式(如果一些样本是缺失,这意味着大多数会在正确的时间出现,而有些会以实际频率的精确倍数出现为时已晚)。
Python(熊猫)示例
这是 Python 中使用pandas库的示例:
让我们组成一个缺失值的时间序列。它的频率是 5 分钟,但是大约 5% 的样本丢失了(它的数据是 1 到 20 之间的随机整数,并且 1 已经被丢弃了)
import pandas as pd
import random
index = pd.DatetimeIndex(start='2020-01-01 00:00:00', end='2020-04-01 00:00:00', freq='5T')
s = pd.Series(index=index, data=None)
s = s.apply(lambda x: random.randint(1,20))
s=s[s.ne(1)]
现在让我们看看现有(未丢弃)样本之间的时间差异:
s.index.to_series().diff().value_counts()
产量
00:05:00 23629
00:10:00 1191
00:15:00 63
00:20:00 2
即绝大多数样本实际上相隔5分钟,但不是全部。我们将通过取这些差异的中值来取实际频率:
s.index.to_series().diff().median()
产量
Timedelta('0 days 00:05:00')