在Julia制作季度时间序列

时间:2014-06-13 06:28:55

标签: julia

在Julia中,我们可以使用以下代码创建时间数组:

d = [date(1980,1,1):date(2015,1,1)];
t = TimeArray(d,rand(length(d)),["test"])

这会给我们每日数据。如何获得季度或年度时间序列?

3 个答案:

答案 0 :(得分:5)

仅使用Base.range的可选步骤功能与Datetime.Period类型

结合使用
julia> [Date(1980,1,1):Month(3):Date(2015,1,1)]
141-element Array{Date{ISOCalendar},1}:
 1980-01-01
 1980-04-01
 1980-07-01
 1980-10-01
 1981-01-01
 1981-04-01
 ...

并根据需要更改步骤

julia> [Date(1980,1,1):Year(1):Date(2015,1,1)]
36-element Array{Date{ISOCalendar},1}:
 1980-01-01
 1981-01-01
 1982-01-01
 ...

0.3.x vs 0.4.x

在版本0.3.x中,日期在日期包中提供,它提供模块日期,但在版本0.4.x中,模块日期内置。另外(目前)另一个细微差别是必须以日期。年日期访问版本0.4.x中的.Month

答案 1 :(得分:2)

我知道这个问题有点陈旧,但值得补充的是,还有另一个名为Temporal * 的时间序列包,它具有此功能。

以下是一些示例用法:

using Temporal, Base.Dates
date_array = collect(today()-Day(365):Day(1):today())
random_walk = cumsum(randn(length(date_array))) + 100.0

构造时间序列对象(类型TS)。最后一个参数用于列名,但如果没有给出,则会自动生成默认列名。

ts_data = TS(random_walk, date_array, :RandomWalk)
# Index       RandomWalk
# 2016-08-24  99.8769
# 2016-08-25  99.1643
# 2016-08-26  98.8918
# 2016-08-27  97.7265
# 2016-08-28  97.9675
# 2016-08-29  97.7151
# 2016-08-30  97.0279
# ⋮
# 2017-08-17  81.2998
# 2017-08-18  82.0658
# 2017-08-19  82.1941
# 2017-08-20  81.9021
# 2017-08-21  81.8163
# 2017-08-22  81.5406
# 2017-08-23  81.2229
# 2017-08-24  79.2867

获取每个季度的最后一次观察(类似的逻辑分别使用eoweomeoy存在数周,数月和数年:

eoq(ts_data)  # get the last observation at every quarter
# 4x1 Temporal.TS{Float64,Date}: 2016-09-30 to 2017-06-30
# Index       RandomWalk
# 2016-09-30  88.5629
# 2016-12-31  82.1014
# 2017-03-31  84.9065
# 2017-06-30  92.1997

也可以使用函数按照上面给出的相同类型的时间段聚合数据。

collapse(ts_data, eoq, fun=mean)  # get the average value every quarter
# 4x1 Temporal.TS{Float64,Date}: 2016-09-30 to 2017-06-30
# Index       RandomWalk
# 2016-09-30  92.5282
# 2016-12-31  86.8291
# 2017-03-31  89.1391
# 2017-06-30  90.3982

* (免责声明:我是包裹作者。)

答案 2 :(得分:1)

尚未支持季度,但支持其他时间段,如周,月和年。有一种名为collapse的方法,用于将TimeArray转换为更大的时间范围。

d = [Date(1980,1,1):Date(2015,1,1)];
t = TimeArray(d,rand(length(d)),["test"])

c = collapse(t, last, period=year)

返回以下内容

36x1 TimeArray{Float64,1} 1980-12-31 to 2015-01-01

             test
1980-12-31 | 0.94
1981-12-31 | 0.37
1982-12-31 | 0.12
1983-12-31 | 0.64
⋮
2012-12-31 | 0.43
2013-12-31 | 0.81
2014-12-31 | 0.88
2015-01-01 | 0.55

另请注意,date已被弃用,而Date因为新的更新包现在运行下面的日期/时间函数。