【问题标题】:Can I use a non-Date type as the time index of a TimeSeries object in Julia?我可以使用非日期类型作为 Julia 中 TimeSeries 对象的时间索引吗?
【发布时间】:2020-01-23 04:46:54
【问题描述】:

我一直使用 Julia 作为数据分析工具,最近发现了 TimeSeries.jl 包,它具有许多用于时间序列分析的有趣功能。

但是,作为一名物理学家,我的时间序列通常不是按日期和时钟时间(例如 01/01 12:30:00)索引,而是按经过的时间单位数(例如,时间序列将从 @ 987654323@ 至t=200s)。 在这种情况下,不需要从秒到分钟的转换。 不仅如此,有时还不需要进行转换,例如使用抽象时间单位而不是秒时。

那么有没有办法用简单的数字(整数和浮点数)而不是 Date 或 DateType 对象来索引时间序列对象的行? 或者也许有其他包可以做到这一点?

documentation of TimeSeries.jl 似乎没有办法。

【问题讨论】:

    标签: time-series julia


    【解决方案1】:

    正如定义的here TimeArray 要求其D 参数为TimeType,因此实际上它是DateTimeDateTime

    您可以实现TimeType 的自定义子类型,但可能有更简单的选项。一般来说,Julia 生态系统中有几个包允许您按任意索引进行索引,例如AxisArrays.jlNamedArrays.jl。在我看来,here 描述的示例应该完全适合您的需求。

    【讨论】:

    • AxisArray.jl 是按时间索引系列的好方法,但我不确定是否可以将它与 TimeSeries.jl 一起使用以利用后者的功能包裹。但是我能够创建一个只包含 Int 的 TimeType 子类型,并且还实现了它的基本功能。它似乎可以很好地利用 TimeSeries.jl 函数,尽管我无法实现一些更复杂的行为,例如绘图。不过,我想这将是可行的。谢谢!
    • 同意 - 如果您使用 AxisArray.jl,那么您只能获得 AxisArray.jl 提供的内容 :(.
    【解决方案2】:

    假设您的时间单位存储为整数,隐式理解为整数秒,存储在向量elapsed_seconds 中,您可以在创建时间序列之前转换秒数。请注意,elapsed_seconds 必须严格递增。将时间测量数据作为整数或浮点值的向量命名为observations

    using TimeSeries, Dates
    
    elapsed_seconds = [15,30];
    observations = [1.5, 5.125];
    
    secs = Time.(Second.(elapsed_seconds));
    ta = TimeArray(secs, observations)
    
    # 2×1 TimeArray{Float64,1,Time,Array{Float64,1}} 00:00:15 to 00:00:30
    # │          │ A     │
    # ├──────────┼───────┤
    # │ 00:00:15 │ 1.5   │
    # │ 00:00:30 │ 5.125 │
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多