WedX - журнал о программировании и компьютерных науках

KDB+\q: Как заполнить периодические временные ряды?

Я пытаюсь реализовать .ml.filltab[], расположенный здесь в таблице данных временных рядов, состоящих из регулярно расположенных временных агрегаций, т.е.:

second     |  amount price 
-----------|----------------
02:46:01   |  54     9953.5
02:46:04   |  150          
02:46:05   |         9954.5

Применение функции .ml.filltab[] не обновляет индекс, поэтому таблица неправильно заполняет значения без соответствующего индекса. то есть

second     |  amount price 
-----------|----------------
02:46:01   |  54     9953.5
02:46:04   |  150    9953.5    
02:46:05   |  150    9953.5

В отличие от правильного заполнения индекса следующим образом:

second     |  amount price 
-----------|----------------
02:46:01   |  54     9953.5
02:46:02   |  54     9953.5
02:46:03   |  54     9953.5
02:46:04   |  150    9953.5    
02:46:05   |  150    9954.5

В дополнение к вышесказанному также требуется столбец для группировки данных, то есть столбец `sym, который не нужен при агрегировании только одной серии.

Как запустить операцию заполнения вперед для таблицы с учетом отсутствующего индекса? Спасибо

kdb
03.09.2019

Ответы:


1

Один из способов сделать это — создать вторичную пустую таблицу с той же схемой, где во втором столбце указаны все отсутствующие моменты времени. Для этого создайте список всех интересующих вас моментов времени. Один из способов сделать это — взять первый и последний элемент и сделать следующее:

q)f:exec first second from t
q)f
02:46:01
q)l:exec last second from t
q)l
02:46:05
q)s:f+`second$til 1+`long$l-f
q)s
02:46:01 02:46:02 02:46:03 02:46:04 02:46:05

Обратите внимание, что второй тип должен быть приведен к типу long для работы с функцией til, а затем приведен обратно ко второму типу. Также мы добавляем 1, чтобы последний раз (02:46:05) не был пропущен.

Мы можем создать пустую таблицу с той же схемой, выполнив следующие действия:

q)et:select by second:s from 0#t
q)et
second  | amount price
--------| ------------
02:46:01|
02:46:02|
02:46:03|
02:46:04|
02:46:05|

0# — это быстрый способ создать пустую таблицу с той же схемой, что и исходная таблица t. Теперь lj можно использовать для объединения двух таблиц, а fills будет пересылать любые пустые значения:

q)et lj t
second  | amount price
--------| -------------
02:46:01| 54     9953.5
02:46:02|
02:46:03|
02:46:04| 150
02:46:05|        9954.5
q)fills et lj t
second  | amount price
--------| -------------
02:46:01| 54     9953.5
02:46:02| 54     9953.5
02:46:03| 54     9953.5
02:46:04| 150    9953.5
02:46:05| 150    9954.5
03.09.2019

2

Здесь у вас действительно есть два отдельных шага: заполнение нулевых значений в вашей таблице и создание временного ряда с регулярными интервалами из вашей таблицы.

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

Учитывая вашу (уже заполненную) таблицу

q)show t:([second:02:46:01 02:46:04 02:46:05]amount:45 150 150;price:9953.5 9953.5 9954.5)
second  | amount price
--------| -------------
02:46:01| 45     9953.5
02:46:04| 150    9953.5
02:46:05| 150    9954.5

вы можете создать временной ряд, сначала определив вспомогательную таблицу с желаемыми шагами расчета

q)show ts:([]second:02:46:01+til 5)
second
--------
02:46:01
02:46:02
02:46:03
02:46:04
02:46:05

а затем при объединении этих двух таблиц

q)aj[`second;ts;t]
second   amount price
----------------------
02:46:01 45     9953.5
02:46:02 45     9953.5
02:46:03 45     9953.5
02:46:04 150    9953.5
02:46:05 150    9954.5

Вы можете легко расширить этот метод для создания таких временных рядов, когда ваша таблица содержит несколько инструментов.

03.09.2019
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]