我有很多带有时间戳的传感器数据,例如“2014-09-09 16:10:45”以及随附的传感器读数。为了深入了解这些,我想通过查看时间戳的时间部分的平均值和标准偏差来找到“异常”事件。我该如何处理午夜时间的环绕?
一个虚构的例子:想象一下人们在早上打开机器(功率传感器会注意到值增加)并在晚上关闭机器(减少值)影响功率读数。我想找到异常的传感器读数。这将在读数通常增加的时间段内减少传感器读数,并在读数通常减少的时间段内增加读数。
我的想法是提取时间戳的时间部分(例如 12:55:10),将其转换为秒(一天有 86400),然后除以读数的趋势(例如只看增加的读数)计算平均值和标准差。如果我然后将时间窗口从“一天中的平均秒数减去标准偏差”变为“一天中的平均秒数加上标准偏差”(可能使用标准偏差的两倍),我将有典型的时期和这段时间之外的每一个增加的读数窗口将是不寻常的。
问题:时间在午夜结束!实际上,00:15:00 的读数实际上非常接近 23:50:00,但在计算中却“相距甚远”。这肯定会扭曲统计数据,除非一切都发生在中午。有标准的做法来处理这个吗?你能给我一些想法吗?我现在完全被难住了。我很想留在 PostgresQL 中,但因为这不是必需的,所以我没有标记它。什么都有帮助!
下面是一些示例数据,每个传感器大约有 200-300 个读数。您可以看到,在此示例中,增加发生在早上。
"Timestamp as %Y-%m-%d %H:%M:%S";"Day of the year";"Second of the day";"Tendency of reading"
"2014-03-01 14:45:00";60;53100;-0.030
"2014-03-03 08:18:00";62;29880;0.150
"2014-03-03 14:17:00";62;51420;-0.120
"2014-03-03 16:37:00";62;59820;-0.030
"2014-03-04 08:11:00";63;29460;0.150
"2014-03-04 10:21:00";63;37260;-0.150
"2014-03-04 16:12:00";63;58320;-0.030
"2014-03-05 08:04:00";64;29040;0.150
"2014-03-05 14:42:00";64;52920;-0.060
"2014-03-05 17:27:00";64;62820;-0.030
"2014-03-06 08:29:00";65;30540;0.090
"2014-03-06 12:06:00";65;43560;-0.030
"2014-03-06 13:49:00";65;49740;-0.120
"2014-03-07 08:21:00";66;30060;0.150
"2014-03-07 10:27:00";66;37620;-0.030
"2014-03-07 11:27:00";66;41220;0.030
"2014-03-07 13:46:00";66;49560;-0.060
"2014-03-07 16:59:00";66;61140;-0.030
"2014-03-07 18:52:00";66;67920;-0.030
"2014-03-08 08:47:00";67;31620;0.120