在F#中存储大型时间序列的简洁,实用和有效的方法是什么?

时间:2010-12-08 10:04:58

标签: f# finance time-series

我正在学习F#,我正在探索使用它来分析财务时间序列。任何人都可以推荐一个好的数据结构来存储时间序列数据吗?

F#提供丰富的原生类型选择,我正在寻找一种简单的组合,以提供优雅,简洁和有效的解决方案。

我正在寻找商店刻度数据,其中包含数百万条带有时间戳的记录,以及数字和文本数据的几个(~5-20)字段,可能缺少值。

我的第一个想法可能是一系列元组或记录,但我想知道是否有人可以提出一些在现实世界中运作良好的东西。

编辑:

澄清几点:

我可能需要的常见操作是:

  • 基于时间的查找 - 即在给定时间找到最新的数据点
  • 基于时间的联接
  • 追加 (更新和删除将很少见。)

我应该说清楚我正在探索使用F#主要作为研究的交互式工具,能够编译为(非常大的)额外奖励。

另一个编辑:

我也应该提到,我的角色/使用F#,这些数据纯粹是在研究而不是开发中。我们的意图是,一旦我们更好地理解了数据(以及我们想要用它做什么),我们可以稍后指定我们的开发人员将构建的工具。比如我们开始使用他们的数据结构等的数据仓库等。

虽然我担心我们的模型是计算密集型的,但是使用大量内存并且不能总是以递归方式编码。因此,我们最终不得不查询大块。

我还应该说我之前总是使用Matlab或R来完成这些类型的任务,但我现在对F#感兴趣,因为它为研究提供了交互式,高级别的灵活性,但是相同的代码可以用于生产

我很抱歉没有在开始时提供这个背景信息(这是我的第一个问题),我现在可以看到它可以帮助人们形成他们的答案。

再次感谢所有花时间帮助我的人。

2 个答案:

答案 0 :(得分:4)

听起来你应该在关系数据库中存储和查询你的数据(它当前存储在哪里?):将数百万个带有多个字段的记录加载到内存中必然是一项昂贵的操作,并且可能会给你留下过时的数据和难度持续变化)。然后你可以使用F#LINQ to SQL实现(我相信你可以在Power Pack中找到)将F#表达式转换为SQL表达式。

以下是Don Syme关于F#Power Pack中LINQ支持的链接:http://blogs.msdn.com/b/dsyme/archive/2009/10/23/a-quick-refresh-on-query-support-in-the-f-power-pack.aspx

答案 1 :(得分:2)

数据结构的最佳选择取决于您要对其执行的操作。

最简单的是结构数组。这具有快速随机查找的优点,对于未压缩表示具有良好的空间效率和良好的局部性。如果子结构之间存在共享(如字符串),则实习它们以确保共享。

备选方案可能是从磁盘按需加载的seq,可以快速预先添加元素的单链表,也可以是平衡的二进制树,允许有效插入随机位置等操作。