Параллельные координаты и временные ряды
Параллельные координаты показывают десяток измерений на плоскости, а временные ряды требуют своих приёмов.
Параллельные координаты — способ показать много переменных сразу: каждая переменная — своя вертикальная ось, а объект — ломаная линия, пересекающая все оси на своих значениях. Временной ряд — данные, упорядоченные по времени, со своими задачами визуализации: тренд, сезонность, выбросы.
Параллельные координаты: много осей
На scatter влезает 2 переменные, на фасетки — 3–4. А если их 7? Параллельные координаты ставят оси рядом, параллельно, и каждый объект становится ломаной. Похожие объекты дают похожие ломаные (пучки), кластеры видны как жгуты, а пересечения линий между двумя осями указывают на отрицательную корреляцию этих переменных.
V1 V2 V3 V4 | | | | 8+ ___+_____+__ + объект X: 8,2,7,5 | / |\ | \ /| 5+/ | \ _+_ X + объект Y: 3,6,4,7 | | \/ | / \| 2+_____+__/\_+_/ + | | | | пересечение V1-V2 = антикорреляция
Нормировка осей обязательна
Переменные имеют разный масштаб (рост в см, вес в кг, доход в рублях). Чтобы ломаные были осмысленны, каждую ось нормируют в общий диапазон $[0, 1]$ — иначе ось с большими числами «придавит» остальные. Посчитаем нормировку для многомерного объекта.
cols = {
"рост": [150, 160, 170, 180, 190],
"вес": [50, 60, 70, 80, 95],
"доход": [30, 45, 50, 80, 200],
}
def norm(col):
lo, hi = min(col), max(col)
return [round((v-lo)/(hi-lo), 2) for v in col]
obj_idx = 3 # четвёртый объект
print("объект:", {k: v[obj_idx] for k, v in cols.items()})
print("его координаты на параллельных осях (0..1):")
for k, col in cols.items():
print(f" {k:6s}: {norm(col)[obj_idx]}")Вывод:
объект: {'рост': 180, 'вес': 80, 'доход': 80}
его координаты на параллельных осях (0..1):
рост : 0.75
вес : 0.67
доход : 0.29После нормировки видно: по росту и весу объект высоко (0,75), а по доходу — низко (0,29). Без нормировки доход (числа до 200) визуально подавил бы рост (числа около 180 в других единицах).
Временные ряды: что показывать
Время почти всегда кладут на ось X (слева направо — это сильное соглашение, нарушать нельзя). Точки соединяют линией: связность подчёркивает непрерывность процесса. Главные задачи — показать тренд (общее направление), сезонность (периодические колебания) и выбросы/события. Полезные приёмы: сглаживание скользящим средним для тренда, выравнивание циклов друг под другом для сезонности, аннотации ключевых событий прямо на линии.
Ловушки временных рядов
Неравномерные интервалы между точками рисуют как равномерные — искажается скорость изменения; нужно ставить точки по реальному времени. Логарифмическая ось Y уместна, если ряд растёт мультипликативно (тогда постоянный темп роста — прямая). И помните про обрезанную ось Y (следующий раздел) — на временных рядах ею злоупотребляют чаще всего.
Как работает под капотом
Параллельные координаты — это проекция многомерного пространства, где каждая ось ортогональна остальным, но нарисована параллельно. Информация о корреляции переходит в характер пересечений: коррелирующие переменные дают параллельные «гладкие» переходы, антикоррелирующие — пучок пересечений (X-образный узор). Временной ряд же эксплуатирует связность по гештальту: линия превращает дискретные замеры в воспринимаемый непрерывный процесс.
Кластеры и порядок осей
На параллельных координатах важная деталь — порядок осей. Соседние оси сравниваются напрямую через наклон соединяющих отрезков, а несоседние — нет. Поэтому переменные, чью связь вы хотите показать, ставьте рядом. Перестановка осей может проявить структуру, незаметную при исходном порядке: коррелирующие признаки рядом дают гладкий пучок параллельных линий, антикоррелирующие — характерный жгут пересечений. Интерактивные инструменты позволяют перетаскивать оси и подсвечивать подмножества линий (brushing), что превращает параллельные координаты в мощный инструмент разведки многомерных данных.
Для временных рядов отдельная большая тема — сезонность. Чтобы её увидеть, ряд раскладывают на компоненты: тренд (медленное направление), сезонную составляющую (повторяющийся цикл) и остаток. Визуально сезонность хорошо показывает приём наложения циклов: например, нарисовать каждый год отдельной линией поверх общей оси «месяц» — и сразу видно, повторяется ли годовой узор. Это перекликается с small multiples и со спектральным анализом из курса по обработке сигналов, где периодичность ищут уже в частотной области.
Частые ошибки
- Параллельные координаты без нормировки осей — крупномасштабная переменная подавляет остальные.
- Слишком много объектов на параллельных координатах — сплошная заливка; нужен alpha или выделение групп.
- Неравномерное время как равномерное — искажает скорость изменения.
- Время справа налево или по Y — нарушает сильнейшее соглашение, читатель запутается.
Итог
- Параллельные координаты показывают много переменных как ломаные по параллельным осям.
- Оси обязательно нормировать; пересечения = антикорреляция.
- Время — всегда по X слева направо; линия передаёт непрерывность.
- Для временных рядов важны тренд, сезонность и честные интервалы.