Преобразования данных

При визуализации часто нужно преобразовать или отфильтровать данные. В Altair это можно сделать двумя способами:

  1. До определения диаграммы, используя стандартные преобразования pandas.
  2. В определении диаграммы, используя инструменты преобразования данных Vega-Lite.

В большинстве случаев рекомендуется первый подход: он понятнее пользователям, знакомым с обработкой данных в Python, а pandas предоставляет больше гибкости, чем Vega-Lite.

Второй подход полезен, если источник данных — не DataFrame, а, например, URL JSON- или CSV-файла. Он также удобен для составных диаграмм, где разным представлениям одного набора нужны разные преобразования.

Преобразования внутри спецификации задаются методами transform_* объектов верхнего уровня:

Преобразование Метод Описание
Агрегирование Chart.transform_aggregate Создаёт новый столбец, агрегируя существующий.
Разбиение на интервалы Chart.transform_bin Создаёт новый столбец, разбивая значения существующего на интервалы.
Вычисляемые поля Chart.transform_calculate Создаёт новый столбец с помощью арифметического вычисления по существующему.
Оценка плотности Chart.transform_density Создаёт новый столбец с ядерной оценкой плотности входных данных.
Диапазон значений Chart.transform_extent Находит диапазон поля и сохраняет результат в параметре.
Фильтрация Chart.transform_filter Выбирает подмножество данных по условию.
Разворачивание массивов Chart.transform_flatten Разворачивает массивы данных в столбцы.
Из широкого формата в длинный Chart.transform_fold Преобразует широкий формат в длинный; обратное преобразованию pivot.
Заполнение пропусков Chart.transform_impute Заполняет отсутствующие данные.
Агрегирование с присоединением Chart.transform_joinaggregate Присоединяет агрегированные значения к исходным данным.
LOESS Chart.transform_loess Создаёт новый столбец со сглаженными методом LOESS значениями.
Поиск и соединение Chart.transform_lookup Одностороннее соединение двух наборов данных по ключу.
Из длинного формата в широкий Chart.transform_pivot Преобразует длинный формат в широкий; обратное преобразованию fold.
Квантили Chart.transform_quantile Вычисляет эмпирические квантили набора данных.
Регрессия Chart.transform_regression Подбирает регрессионную модель по данным.
Случайная выборка Chart.transform_sample Случайно выбирает подмножество строк набора данных.
Накопление Chart.transform_stack Вычисляет значения с накоплением.
Единицы времени Chart.transform_timeunit Дискретизирует или группирует дату по единице времени: день, месяц, год и другие.
Оконные вычисления Chart.transform_window Выполняет оконное агрегирование.

Доступ к преобразованным данным

При отображении диаграммы преобразования данных выполняет библиотека Vega в браузере. Во время разработки часто полезно изучить результат. Один из вариантов — показать преобразованные данные таблицей из текстовых примитивов, как в примере связанной диаграммы рассеяния и таблицы в галерее.

Этот подход работает, но довольно громоздок и не позволяет получить преобразованные данные в Python. Для этого Altair предоставляет метод Chart.transformed_data, который использует VegaFusion для выполнения преобразований в ядре Python.

Сначала установите VegaFusion с дополнительными зависимостями embed:

pip install "vegafusion[embed]"

Затем создайте диаграмму Altair и вызовите Chart.transformed_data, чтобы получить DataFrame pandas с преобразованными данными:

import altair as alt
from altair.datasets import data

cars = data.cars.url
chart = alt.Chart(cars).mark_bar().encode(
    y='Cylinders:O',
    x='mean_acc:Q'
).transform_aggregate(
    mean_acc='mean(Acceleration)',
    groupby=["Cylinders"]
)
chart.transformed_data()

Сейчас Chart.transformed_data поддерживает большинство, но не все преобразования Altair. Они перечислены в таблице:

Преобразование Поддерживается
Агрегирование ✔
Разбиение на интервалы ✔
Вычисляемые поля ✔
Оценка плотности
Диапазон значений ✔
Фильтрация ✔
Разворачивание массивов
Из широкого формата в длинный ✔
Заполнение пропусков ✔
Агрегирование с присоединением ✔
LOESS
Поиск и соединение
Из длинного формата в широкий ✔
Квантили
Регрессия
Случайная выборка
Накопление ✔
Единицы времени ✔
Оконные вычисления ✔