Трансформация cross относится к семейству операций над
данными в Vega и используется для построения декартова произведения двух
наборов данных. Результатом является новый набор, содержащий все
возможные комбинации строк из исходных источников.
Пусть заданы два массива данных:
a₁, a₂, ..., aₙb₁, b₂, ..., bₘТрансформация cross формирует результат:
(a₁, b₁), (a₁, b₂), ..., (a₁, bₘ)(a₂, b₁), (a₂, b₂), ..., (a₂, bₘ)(aₙ, b₁), (aₙ, b₂), ..., (aₙ, bₘ)Итоговый размер данных: n × m
{
"type": "cross",
"with": "datasetB",
"as": ["a", "b"]
}
или в более общем виде:
{
"type": "cross",
"with": "otherDataset",
"diagonal": false,
"as": ["left", "right"]
}
with Определяет вторичный источник данных, с которым выполняется декартово произведение.
as Задаёт имена полей для элементов из первой и второй таблицы. Без этого поля результат становится менее структурированным.
diagonal Логический параметр, определяющий
необходимость исключения пар вида (aᵢ, aᵢ) при
самосопряжении данных.
Трансформация не выполняет сравнение значений и не учитывает ключи. Она строго формирует все возможные пары, что делает её вычислительно затратной операцией.
Сложность:
При увеличении объёма данных рост становится квадратичным, что критично для интерактивных визуализаций.
1. Матрицы расстояний
Используется для вычисления попарных расстояний между объектами перед визуализацией heatmap или clustering map.
2. Анализ всех пар наблюдений
Например, сравнение всех точек между собой для поиска корреляций.
3. Построение графовых структур
Ребра графа могут формироваться из всех комбинаций узлов с последующей фильтрацией.
4. Подготовка данных для диаграмм взаимодействий
Chord diagram и adjacency matrix часто требуют предварительного формирования пар.
{
"data": {"name": "points"},
"transform": [
{
"type": "cross",
"with": "points",
"as": ["p1", "p2"]
},
{
"type": "formula",
"as": "distance",
"expr": "sqrt(pow(datum.p1.x - datum.p2.x, 2) + pow(datum.p1.y - datum.p2.y, 2))"
}
]
}
При использовании cross важно учитывать:
filter или
formulaВ типичных сценариях применяется предварительное сокращение наборов данных или агрегация до применения трансформации.
В отличие от lookup или join, трансформация
cross:
Она является базовой комбинаторной операцией, а не семантическим объединением данных.
Понятие crossfilter в контексте Vega-Lite связано не с прямой трансформацией данных, а с моделью интерактивной фильтрации, основанной на связке выборок (selections) и реактивных фильтров.
Crossfiltering реализует поведение, при котором:
Это создаёт систему взаимосвязанных фильтров между несколькими графиками.
Crossfilter реализуется через:
selectionfilter с привязкой к selection{
"selection": {
"brush": {
"type": "interval"
}
},
"mark": "point",
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"}
},
"transform": [
{"filter": {"selection": "brush"}}
]
}
Интервальная выборка (interval selection) позволяет
выделять диапазоны значений по осям.
"selection": {
"brush": {
"type": "interval",
"encodings": ["x", "y"]
}
}
Такая конструкция формирует двумерный фильтр, который и является ядром crossfilter поведения.
Crossfilter проявляется при использовании одного и того же selection в разных слоях или графиках:
filter на основе этого selection{
"transform": [
{"filter": {"selection": "brush"}}
]
}
При изменении selection происходит:
1. Однонаправленное фильтрование
Один график управляет остальными.
2. Взаимное фильтрование
Несколько визуализаций используют общие selection-параметры.
3. Комбинированные фильтры
Несколько selection объединяются через логические операции:
{
"selection": {
"sel": {
"type": "interval"
}
},
"layer": [
{
"mark": "point",
"encoding": {
"x": {"field": "a"},
"y": {"field": "b"}
}
},
{
"transform": [
{"filter": {"selection": "sel"}}
],
"mark": "circle",
"encoding": {
"x": {"field": "a"},
"y": {"field": "b"},
"color": {"value": "red"}
}
}
]
}
Обычный filter:
Crossfilter-подход:
Основные факторы влияния:
Оптимизация достигается через:
Crossfilter в Vega-Lite является частью декларативной модели реактивности:
Это создаёт разделение:
Обе концепции связаны с комбинированием данных, но на разных уровнях:
cross формирует новые структуры данных до
визуализацииcrossfilter изменяет отображение уже существующих
данныхПервое работает в плоскости подготовки данных, второе — в плоскости интерактивного управления состоянием визуализации