0

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

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

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

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

4

1 回答 1

1

我认为找出 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具有相同索引的值,10取决于是否有diff_tablefor中的任何列给定的行是0(即重复 5 个值)。通过再次减去该系列中的相邻值,您可以确定它是区间的开始(例如1( 1-0) 还是区间的结束-1( 0 -(-1)),具体取决于您选择的值)。

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

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

于 2021-01-26T05:31:37.513 回答