javascript - 检测原始数据的变化

标签 javascript node.js express data-analysis

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

我目前正在尝试扩展应用程序的功能,以检测由于填充或排空而导致的水箱液位变化。最终目标是生成一份每日报告,生成填充/排空事件的摘要,以及持续时间和添加或删除的数量。此图显示了一天内水箱容量的屏幕截图 - /image/RKlIC.jpg

我的问题是:

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

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

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

最佳答案

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

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

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

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

关于javascript - 检测原始数据的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48320306/

相关文章:

node.js - 如何创建通过特定参数过滤搜索的查询字符串?

javascript - Vue `$refs` 问题

javascript - 如果表单字段的值小于变量,则显示带有信息的警报

javascript - jQuery 过滤选择选项在 Safari 中不起作用(但在 Chrome 和 FF 中有效)

javascript - 从 iframe 外部通过 CSS Path 访问元素

node.js - 如何映射数据以便我可以使用它来生成饼图?

javascript - 重构代码后无法使用 Passport 进行身份验证

javascript - 错误 [ERR_HTTP_HEADERS_SENT] : Cannot set headers after they are sent to the client ASYNC AWAIT not Working

node.js - Express.js res.render 点名文件

javascript - 为什么不在本地环境中抛出语法错误?