是否有用于在时间序列数据集中定位多个相同值的 Python 函数?

问题描述

我正在处理 2020 年每分钟汇总的大型时间序列数据集。该数据集正在从监测热电厂设备的传感器获取值。传感器测量温度、压力、电流等值,并随着每次读数更新数据集。

我希望检测由传感器引起的数据集中的错误。当来自传感器的输入卡在某个值上时,就会发生一种来自传感器的错误类型。例如,当我们知道它应该波动时,其中一个温度传感器连续 20 分钟报告值为 71.46。我正在尝试在我当前的数据集中找到这些错误,并希望训练一个模型来检查未来数据集中的重复值。

理想情况下,我希望能够在您看到值连续重复出现 5 次或更多次的数据集中找到时间窗口。

数据采用pandas时间数据帧的形式,内核为python 3.6。如果您有任何建议,请告诉我。

解决方法

我认为找出 5 个连续值是否相同的简单方法可能是使用 5 步窗口大小为所有值计算滚动平均值,然后检查相邻行中值之间的差异?不知道这是否太简单了?但是,如果第 x 行的滚动平均值与第 x+1 行的滚动平均值相同,那么您是否在重复相同的值?当然,如果碰巧进入窗口的新值与退出窗口的第一个值完全相同,则不会突出显示它。

可以这样做:

roller = df.rolling(5).mean()
diff_table = roller - roller.shift(1)

所以现在问题变成了在 diff_table 中查找行/单元格,其中一行中的任何值都是 0,这很容易:

has_repeat = np.isclose(diff_table,0).any(axis=1)  

要找到发生这种情况的开始和结束时间有点棘手,但如果您的时间戳在表的索引中,您可以创建一个具有相同索引的 Series 并且值为 {{ 1}} 和 1 取决于给定行的 0 中的任何列是否为 diff_table(即重复 5 个值)。通过再次减去该系列中的相邻值,您可以确定它是区间的开始(例如 0 (1) 还是区间的结束 1-0 ({{1} }),具体取决于您选择的值)。

这有助于找到移动平均线开始保持恒定的时间的开始。因此,如果您从该开始时间减去 5 分钟,您将获得真正的间隔开始时间,此时传感器开始重复。

可能有更好的方法,但如果这是我的问题,我会尝试这种方法。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...