【问题标题】:Detecting change in raw data检测原始数据的变化
【发布时间】:2018-01-18 11:31:40
【问题描述】:

我目前正在构建一个用作储罐级仪表板的 Web 应用程序。它解析来自罐中多个传感器的传入数据,并将这些值存储在数据库中。该应用程序是使用 express / node.js 构建的。数据每 5 分钟采样一次,但每小时发送到服务器(每次传输 12 个样本)。

我目前正在尝试扩展应用程序的功能,以检测由于填充或排空而导致的水箱液位变化。最终目标是生成一份每日报告,生成填充/排空事件的摘要,其中包含添加或删除的持续时间和数量。这张图片显示了一天中油箱容量的屏幕截图 - https://imgur.com/a/kZ50N

我的问题是:

  1. 有哪些算法/功能可以检测油箱液位的变化?我将如何将它们实现到我的应用程序中?
  2. 什么时候应该进行数据处理?随着数据被解析并保存到服务器中?在一天结束时使用一个函数来处理当天的所有数据?
  3. 是否值得考虑在解析阶段进行某种数据清理?我注意到有时由于噪声导致数据中出现随机峰值。
  4. 当他们在完成交付后立即开始清空水箱时,我应该如何处理事件?我需要算法足够稳健,以检测斜率方向的变化作为事件的结束。提供的图片中就是这样的示例。

我意识到可能很难组合出一个强大的解决方案。有时水箱在被填充的同时被清空。这使得很难衡量这些减少。唯一要知道的是,这是在大约 15 分钟的交付平线期间发生的斜率,并且交付量比通常的交付总量少一个固定数量。

这是一个有趣的项目。感谢您的帮助。

【问题讨论】:

    标签: javascript node.js express data-analysis


    【解决方案1】:
    1. 您应该能够开发一种算法来指定填充或清空(罐液位变化)的含义。一个好的起点是在 Y 秒内 X%。然后,您进行校准以避免误报或误报(例如,在没有加油时显示加油与发生加油时丢失。一种可能的方法是在一段时间内(例如 10 分钟)平均燃油水平并进行比较与接下来 10 分钟的平均值。如果差异超过阈值(例如 5%),您可以称之为变化。

    2. 什么时候处理数据取决于你什么时候需要它,所以如果用户需要不断地了解变化,这可以通过查询数据来完成。在写入数据存储时将数据处理为级别更改可能会更有效(您只需执行一次),但是您将失去调整算法的能力。它很可能取决于性能,例如如果有人想提取价值一年的数据,系统是否能够处理这个问题?

    3. 您几乎可以肯定需要对传入数据进行低通滤波器之类的操作。您不希望根据液位的临时峰值显示油箱填充量。使用一组值很容易做到这一点。如上所述,移动平均线,比如最后 10 分钟的水平线是另一种平滑数据的方法。您可能永远无法获得 0% 的误报率或 0% 的误报率,您只能将目标值尽可能低。

    4. 在这种情况下,它看起来像是在填充后排空水箱。如果您认为这些是两个独立的事件,那么您可以简单地检测传入数据的变化。我建议您创建一个图形标记填充作为图形上的符号以及清空。通过这种方式,您可以观察数据以确保检测到变化。我还想说,您可以使用 jasmin.js 或 cucumber.js 为您的计算添加一些非常有用的单元测试。

    【讨论】:

    • 感谢您的详细回复。 1. 那么就这么简单,就是看数据加班的斜率吗?我想要让所有人都分析一个新集合的第一个数据点,我需要从上一个集合中获取最后一个条目。 2. 我确实喜欢立即检测填充/排空的想法。您确实提出了一个很好的观点,即以后没有操纵数据的灵活性。我会记住这一点。 3. 是的,我正在考虑使用低通滤波器。 4. 好主意。似乎要传达的信息是没有可用的模块可能会有所帮助。
    • 嗨@Mejezza,是的,我曾研究过类似的系统,我们通常使用这种方法来检测燃料水平的变化。不过,校准阈值需要一些时间,例如2% 被认为是有效的变化。有时,燃料传感器并不总是一致甚至不准确!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    相关资源
    最近更新 更多