2

我有一个应用程序,它从智能房屋中的十几个传感器收集数据。它将数据存储在 MySQL 数据库中,表格格式如下:

CREATE TABLE IF NOT EXISTS `datapoints` (
  `PointID` int(11) NOT NULL,
  `System` varchar(50) NOT NULL,
  `Sensor` varchar(50) NOT NULL,
  `Value` varchar(50) NOT NULL,
  `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`PointID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

System字段用于对传感器进行分组,例如,“空气”系统具有“温度”和“湿度”传感器,“太阳能电池板”系统具有“发电量 (kW)”和“今日生产量 (kWh)”。这些字段都是varchar因为有几种数据类型来自传感器,而原始数据库设计者采取了简单的方法。(我知道这种数据结构效率不高,但改变它为时已晚。)

传感器包括空气温度、湿度、太阳能电池板输出、太阳能热水器温度等。

我们现在拥有这个每天收集数万个数据点的数据库。到目前为止,我们已经使用了一个查询数据库的应用程序来构建传感器数据随时间变化的图表。但是,我们现在有许多 GB 的数据,最终将耗尽日志硬件上的存储空间。

我正在寻找一种从数据中收集统计数据然后将其删除的方法。我在想一些很像 [Google Analytics | 皮维克 | Awstats] 用于数据。问题是我真的不知道从哪里开始。我希望能够查看更详细的数据,例如:

  • 1 天的所有数据
  • 1 周的每小时数据
  • 1 个月的每日数据
  • 我想我想永远保留每周和每月的统计数据。

但是,我不想过多地平滑数据。最终,我将不得不对数据进行平滑处理,但我想尽可能地保持详细。例如,如果我的电力生产有一个很大的峰值,如果它被平滑(降低)到每小时数据中,然后再次(降低)在每日数据中,然后再次(降低)在每周数据中,一周的数据不会反映出现峰值,因为平均值与所有点的平均值不同。

是否有任何软件已经可以做到这一点?如果没有,什么是开始的好方法?我可以用任何语言来做,但首选是 .NET、PHP 或 C(对于 Windows),(按此顺序),因为这些是其他项目成员已经知道的语言,并且日志硬件已经设置好了。

4

2 回答 2

1

您的数据问题是如此之大并且可能是开放式的,我认为没有任何单一工具可以解决您的问题。您可能需要针对您的特定问题发明自己的工具。

我认为你应该看看科学和工程社区使用的基于 Python 的工具。这包括用于交互式数据分析和可视化的IPythonMatplotlib 。使用NumpyScipy处理大型数据数组。最后,当您需要进行一些严肃的数字运算时,可以考虑使用 SciKit Learn 。

祝你好运。

于 2013-08-18T03:43:11.193 回答
0

如果我今天仍在做这个项目(以及其他此类项目),我会使用时间序列数据库(TSDB)

TSDB 专门设计用于随着时间的推移摄取大量数据点并允许对其进行分析。

我现在一直在为另一个项目使用 PostgreSQL 的TimeScale扩展,它完全可以满足我的需要。

于 2018-07-03T15:43:54.587 回答