在Julia中,我们可以使用以下代码创建时间数组:
d = [date(1980,1,1):date(2015,1,1)];
t = TimeArray(d,rand(length(d)),["test"])
这会给我们每日数据。如何获得季度或年度时间序列?
答案 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中,日期在日期包中提供,它提供模块日期,但在版本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
获取每个季度的最后一次观察(类似的逻辑分别使用eow
,eom
和eoy
存在数周,数月和数年:
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
因为新的更新包现在运行下面的日期/时间函数。