如何确定时间序列数据集的采样率?

数据挖掘 时间序列 数据集 大数据 数据科学模型
2022-02-17 15:36:46

我有一个磁力计传感器读数数据集,如下所示:

TimeStamp       X        Y         Z     
1.59408E+12 -22.619999  28.8    -22.14  
1.59408E+12 -22.5   29.039999   -22.08  
1.59408E+12 -22.32  29.039999   -21.779999  
1.59408E+12 -22.38  29.16   -21.6   
.
.
.
And so on

时间戳以毫秒为单位,其中 1.59408E+12、1.59408E+12、1.59408E+12 为 1594076006983、1594076006994、1594076007004 等。那么数据的采样率/频率是多少?

1个回答

一般说明

一般来说,数据的频率是连续时间戳之间的差异。

如果一切顺利,这种差异将在您的时间序列中保持不变;在这种情况下,这种差异是您的数据的频率。
在其他情况下,它可能会更复杂一些 - 例如,您可能会丢失数据,或者某些时间戳向前或向后移动的数据。

在这种情况下,您可能希望“消除”这些问题,例如通过取这些差异的中位数(如果一些样本来得太早而一些来得太晚)或模式(如果一些样本是缺失,这意味着大多数会在正确的时间出现,而有些会以实际频率的精确倍数出现为时已晚)。

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')