首页 > 解决方案 > ML.NET 对齐多个时间序列表

问题描述

我想每 5 分钟查看一次消耗的能量。我有两个能量计数器,它们生成具有不同时间戳的数据。

SolarPanel 的计数器值

约会时间 柜台
2021-01-01 8:00:01 123.0
2021-01-01 8:01:00 123.1
2021-01-01 8:05:55 123.4
2021-01-01 8:09:02 125.3
2021-01-01 8:11:55 126.9

来自 EnergyProvider 的计数器值

约会时间 柜台
2021-01-01 8:01:05 423.0
2021-01-01 8:01:22 427.5
2021-01-01 8:06:55 428.6
2021-01-01 8:09:33 431.8
2021-01-01 8:13:55 433.3

首先,我想重新采样数据,所以有相同的时间戳

能量提供者(重新计算)

约会时间 柜台 差异
2021-01-01 8:05:00 123.3441
2021-01-01 8:10:00 125.8364 2.4923

SolarPanel(重新计算)

约会时间 柜台 差异
2021-01-01 8:05:00 427.7570
2021-01-01 8:10:00 431.9546 4.1976

太阳能电池板在 8:05 和 8:10 之间产生的能量是 2.4923 Wh 在 8.05 和 8.10 之间从网络消耗的能量是 4.1976 Wh

消耗的总能量 = 6.69 Wh

ML.NET 中是否可以进行插值?是否有可用的 Diff 功能?两个表可以通过 DateTime 连接吗?

我用谷歌搜索了一整天,发现任何有用的东西,但没有运气。

标签: time-seriesml.net

解决方案


我不确定这是否真的是机器学习的问题。也许用于测量时间跨度和计算差异的简单算法会更合适。

您可以将数据放入 SQL DB 并使用存储过程,也可以直接使用您选择的语言进行操作:

步骤可能是:

  1. 为 SolarPanel 和 EnergyProvider 创建 DateTime 和 Double 类型的列表(或数组)并将您的数据添加到其中。

  2. 使用您希望序列开始的时间创建一个开始 DateTime 对象。

  3. 使用您的开始日期时间创建一个 DateTime 对象列表,并使用以下方法按时间跨度递增:

    DateTime.AddMinutes(5)

  4. 然后迭代您的 SolarPanel 和 EnergyProvider 列表,并在步骤 3 中创建的列表中的连续项目中找到值的索引这可以执行如下操作:

    for(int i=0; i<myTimeSeqeunce.Length; i++) { TimeSpan varTime = solarPanelDT[i] - myTimeSequence[i]; int intMinutes = (int)varTime.TotalMinutes; }

  5. 用于i在您的 solarPanel 和 EnergyProvider 列表中查找相关值,然后计算它们之和的差值。

  6. 现在应该有您想要的时间序列和相应的总和和差异的列表。


推荐阅读