Преобразования данных
При визуализации часто нужно преобразовать или отфильтровать данные. В Altair это можно сделать двумя способами:
- До определения диаграммы, используя стандартные преобразования pandas.
- В определении диаграммы, используя инструменты преобразования данных 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. Они перечислены в таблице: