covarPop/corr, если эти данные хранятся в строках, а не в столбцах? Допустим, что есть таблица, в которой лежат unique_instrument_id, date, measurement. Хочется вычислить коэффициент корреляции между значениями measurement для нескольких пар инструментов в заданном диапазоне дат. То есть на вход подаётся что-то вроде массива инструментов [("A, "B"), ("C", "D"), ...] и две даты. На выходе хотелось бы получить таблицу с двумя колонками, в первой — пара инструментов, во второй — посчитанный коэффициент.
Доброе утро, по вот этому вопросу кто-нибудь может подсказать?
С функциями типа covarPop/corr мало кто работал. Покажите ддл, чтобы было видно в какок формате у вас сейчас данные и напишите в каком формате их хотите получить.
Предположим, что вот такая таблица: CREATE TABLE data_set (instrument_id UUID, date Date, measurement Float64) ENGINE = MergeTree() PARTITION BY toYYYYMM(date) ORDER BY tuple() Схема упрощённая, но для понимания проблемы подходит. Положить instrument_id в колонки я не смогу, так как заранее они неизвестны. Теоретически можно посчитать ковариацию для пары массивов при помощи, например, SELECT covarSampArray([1, 2, 3], [1, 2, 6]). То есть последовательность измерений для одного инструмента я могу преобразовать в массив при помощи groupArray(measurement). Но как это всё вместе связать у меня пока что идей нет.
всё равно ничерта не понятно :) и боюсь, что не только мне одному. у вас есть таблицаdata_set с каким-то неизвестным полем instrument_id и вы хотите применить к нему несуществующую функцию covarSampArray. я очень сомневаюсь, что кто-то сможет разобраться в этой каше. вы изначально задавали вопрос: >как вытянуть данные для функций типа covarPop/corr, если эти данные хранятся в строках, а не в столбцах? вот и акцентируйте внимание на том в каком виде у вас лежат ланные, а потом, что их нужно привести к формату func(x, y). мне сдаётся, что у вас элементарная проблема, но вы не можете её внятно описать. как говорится "правильно заданный вопрос - уже половина ответа". в этом чатике помогали решить проблемы посложнее "перевода столбцов в колонки". если тыкать пальце в небо, то вам для конвертации строк в столбцы вам нужны функции arrayJoin и arrayMap, можете поискать их использование в этом чатике, с их помощью можно творить чудеса конвертации
Я, если честно, не понимаю, что в моём вопросе такого архинепонятного и где там каша. Объясняю ещё раз. covarSamp/corr/etc. очень легко использовать, когда данные лежат в колонках: create table columnar_data_set(column_a Float64, column_b Float64) engine = Memory(); insert into columnar_data_set values (1, 1), (2, 2), (3, 6); select * from columnar_data_set format PrettySpace; column_a column_b 1 1 2 2 3 6 select covarSamp(column_a, column_b) from columnar_data_set format PrettySpace; covarSamp(column_a, column_b) 2.5 Как мне сделать то же самое, когда все данные находятся в одной колонке, но два диапазона можно определить по ключу? create table data_set(column_name String, measurement Float64) engine = Memory(); insert into data_set values ('column_a', 1), ('column_a', 2), ('column_a', 3), ('column_b', 1), ('column_b', 2), ('column_b', 6); select * from data_set format PrettySpace; column_name measurement column_a 1 column_a 2 column_a 3 column_b 1 column_b 2 column_b 6
Обсуждают сегодня