В двумерных визуализациях распределений данных ключевым инструментом становится оценка плотности, позволяющая перейти от разрозненных точек к непрерывному полю вероятностной массы. В экосистеме Vega это реализуется через трансформацию kde2d, формирующую сглаженную поверхность плотности на основе выборки точек.
Двумерная ядерная оценка плотности (Kernel Density Estimation, KDE) строится на предположении, что каждая точка данных вносит вклад в окрестное пространство согласно выбранному ядру сглаживания. В результате получается непрерывная функция плотности:
Формально в 2D KDE используется функция вида:
(x,y)=_{i=1}^{n}K(,)
где параметры сглаживания (h_x, h_y) определяют «размытие» распределения по осям.
В Vega трансформация kde2d применяется на уровне движка трансформаций данных и преобразует входной набор точек в регулярную сетку значений плотности.
Базовая структура спецификации включает:
Типовая конфигурация трансформации:
{
"transform": [
{
"type": "kde2d",
"x": "x",
"y": "y",
"bandwidth": [20, 20],
"size": [200, 200]
}
]
}
Поля x и y задают координаты исходных
наблюдений. Они должны быть числовыми и представлять непрерывное
пространство, в котором вычисляется плотность.
Особенности:
bandwidth управляет степенью сглаживания. Это ключевой
параметр, определяющий характер результата:
h_x, h_y
Параметр size определяет разрешение итоговой сетки, на
которой вычисляется плотность:
Результатом работы kde2d является набор объектов, содержащих:
Типичная структура выходного объекта:
{
"x": 34.2,
"y": 18.7,
"value": 0.0034
}
Поле value представляет оценку плотности в узле
сетки.
После вычисления kde2d данные обычно визуализируются через:
Пример визуализации через heatmap:
{
"data": {
"url": "data.csv"
},
"transform": [
{
"type": "kde2d",
"x": "x",
"y": "y",
"bandwidth": [30, 30],
"size": [100, 100]
}
],
"mark": "rect",
"encoding": {
"x": { "field": "x", "type": "quantitative" },
"y": { "field": "y", "type": "quantitative" },
"color": { "field": "value", "type": "quantitative" }
}
}
В Vega-Lite прямой доступ к низкоуровневой трансформации kde2d
ограничен, однако аналогичная функциональность реализуется через
трансформацию плотности density.
В типичном сценарии Vega-Lite:
Пример структуры:
{
"data": { "url": "data.csv" },
"mark": "rect",
"transform": [
{
"density": "value",
"groupby": ["category"]
}
],
"encoding": {
"x": { "field": "value", "bin": true },
"y": { "field": "value", "bin": true },
"color": { "field": "density", "type": "quantitative" }
}
}
Хотя данный механизм отличается от классического kde2d, принцип остаётся тем же — переход от дискретных наблюдений к непрерывной оценке распределения.
Поведение kde2d определяется балансом между детализацией и сглаживанием:
K(x,y)=(--)
Такая гауссова форма ядра обеспечивает плавное затухание вклада точки во всех направлениях.
В Vega kde2d оптимизируется через дискретизацию пространства:
Это позволяет эффективно обрабатывать большие наборы данных без явного вычисления парных расстояний между всеми точками.
Результирующая поверхность плотности используется для выявления:
Контурные уровни, построенные на основе kde2d, позволяют интерпретировать вероятность присутствия наблюдений в заданных областях пространства без привязки к отдельным точкам.