问题描述
我正在处理 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 分钟,您将获得真正的间隔开始时间,此时传感器开始重复。
可能有更好的方法,但如果这是我的问题,我会尝试这种方法。