Могу ли я использовать не-Date тип в качестве индекса времени объекта TimeSeries в Julia? - PullRequest
2 голосов
/ 21 января 2020

Я использовал Джулию в качестве инструмента анализа данных и недавно обнаружил пакет TimeSeries.jl, который имеет много интересных функций для анализа временных рядов.

Однако, как физик, мой временной ряд обычно не индексируются по дате и времени (например, 01/01 12:30:00), но по количеству прошедших единиц времени (например, временной ряд будет go от t=0s до t=200s). Преобразование из секунд в минуты в этом случае нежелательно. Мало того, но иногда нет необходимости выполнять преобразование, например, при использовании абстрактной единицы времени вместо секунд.

Так что есть способ индексировать строки объекта временного ряда простыми числами (целые и плавающие) вместо объектов Date или DateType? Или, может быть, есть какой-то другой Пакет, который может это сделать?

Документация TimeSeries.jl , похоже, не показывает пути.

Ответы [ 2 ]

2 голосов
/ 22 января 2020

Как определено здесь TimeArray требует, чтобы его параметр D был TimeType, поэтому на практике это Date, Time или DateTime.

Вы можете реализовать свой собственный подтип TimeType, но, возможно, есть более простые варианты. В целом, в экосистеме Julia есть несколько пакетов, которые позволяют индексировать произвольные индексы, например, AxisArrays.jl или NamedArrays.jl . Мне кажется, что пример, описанный здесь , должен точно соответствовать вашим потребностям.

0 голосов
/ 22 января 2020

Предполагая, что ваши единицы времени хранятся в виде целых чисел, которые неявно понимаются как целые секунды, хранящиеся в векторе 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 │
...