【问题标题】:Considerations for time-series时间序列的注意事项
【发布时间】:2017-09-14 00:56:31
【问题描述】:

我们正在考虑将 Azure 表存储 (ATS) 与 Deedle(或其他具有类似功能的库)一起用于我们的时间序列存储、操作和计算。据我所知,F# 似乎也是数组操作的不错选择。

我们的出发点是一组能源消耗的时间序列。该系列将是一个间隔内的消耗(固定或不规则间隔)或一个计数器(我们可以从中计算从一个读数到下一个读数的消耗)。由于数据点只是一个标签(用作分区键)、时间戳(行键)和值,这应该非常适合 ATS。

从用户的角度来看,他们希望对给定时期和分辨率的系列进行计算,例如计算第三个系列作为其他两个系列之间的差异,对于一个给定的年份,每月分辨率。

这引发了一些问题:

  • ATS 和 F# 是否足够快?如果我们有 10.000 个数据点? 100.000?与 C# 相比?
  • 重新采样需要计算系列时间戳之间的点。我还没有看到任何关于(线性)插值的 Deedle 示例,但我认为这只是传递一个可以查看必要数据点的函数?这对于我们的分数来说是否足够快?
  • 计算将由用户决定,我们必须将其作为配置。到目前为止,我最好的猜测是让公式采用某种格式,我们可以轻松地将其解析为反向波兰符号,并特别注意代表系列的标签(即从 ATS 读取,重新采样,然后执行操作)。

任何cmets都将受到高度赞赏!

【问题讨论】:

    标签: azure f# time-series resampling deedle


    【解决方案1】:

    我认为 Isaac 已经提到了最重要的几点,但是由于这个问题涉及到我所涉及的一些事情,我想我会分享一些额外的评论!

    BigDeedle. 正如 Isaac 提到的,我在 BigDeedle 中使用了 Azure Table 存储。如果您想使用 Deedle API 以交互方式探索数据并在将数据放入内存并运行计算之前进行一些过滤和范围限制,这主要是有用的。 BigDeedle 从潜在的非常大的外部数据源中延迟加载数据。也就是说,如果您最终需要将所有数据加载到内存中,这对您来说可能并不是那么有用。

    BigDeedle 中使用的存储模型可能很有用 - 它根据日期对数据进行分区,因此当您想要获取给定日期范围内的值时,它知道要查看哪些分区。根据我的经验,从 ATS 加载数据效果很好,特别是如果您可以在 Azure 中运行的 MBrace 集群上执行此操作(这就是我的 NDC 演示最后所做的)。

    效率。我认为这种组合应该适用于 10k 或 100k 数据点 - 无论您从 F# 还是 C# 执行此操作都没有区别。至于 Deedle,我肯定已经将它用于这种大小的数据集——我们“根据需要”优化库。大部分功能已经相当高效,但可能有一些操作效率不高。如果您在 GitHub 上打开问题,这是可以解决的。

    重采样。 有用于线性插值的内置函数(请参阅here),但我怀疑您可能需要编写自己的自定义插值。 Deedle 不会对您“隐藏基础数据”,因此这并不难——this page 上的最后一个示例显示了一个自定义函数,用于填充使用线性插值的缺失数据。如果你正在做这样的事情,你需要将数据保存在内存中(所以 BigDeedle 在这里不会很有用)。

    指定计算。我怀疑这是一个单独的问题,但 F# 非常适合特定领域的语言。我做了一个talk on that at earlier NDC。通常,您可以指定自己的 DSL(并对其进行解析),也可以使用嵌入式 DSL,人们可以在其中编写 F# 的子集。 F# 对两者都有很好的支持。

    PS:如果您想获得有关 F#、Deedle 和 Azure 表的更多帮助,请随时与我们联系。我很高兴分享我的经验 - 您应该可以通过我的个人资料找到联系人。

    【讨论】:

    • 关于存储和 MBrace 的补充说明 - Azure 存储帐户对 IOP 有硬性限制,因此您可以随时从表中提取的数量有上限。
    【解决方案2】:

    F# 与 C# 的性能可能基本相同,除非您在两者之间做一些完全不同的事情(例如,不可变数据集与可变数据集)。两者最终都编译为 IL。

    Azure 表存储 - 确保正确选择分区 + 行键。有很多关于选择 Azure 表存储分区键的文档,尤其是在时间序列中 - 确保将行分组到正确的级别,以确保数据分布,分区不会太大或太小。您可能还想查看 Azure Storage Type Provider 和/或 Azure Storage F# 库,这使得使用 ATS 比使用标准 .NET SDK 更容易。

    Deedle AFAIK 确实具有跨时间序列替换缺失值的能力,并且至少有一个名为 BigDeedle 的项目直接在 ATS 上运行(尽管我不确定这个项目的准备情况如何)。

    【讨论】:

    • 谢谢!您对 BigDeedle 的建议使我参加了贡献者 (Tomas Petricek) 在奥斯陆 NDC 的演讲,link。他的演讲展示了我们将进一步研究的一些功能。
    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 2014-07-23
    • 2011-10-28
    • 2010-10-04
    • 1970-01-01
    • 2012-01-12
    • 2013-09-06
    相关资源
    最近更新 更多