Агрегирование — Aggregate
В Altair данные можно агрегировать двумя способами: в самом кодировании или с помощью преобразования aggregate верхнего уровня.
Свойство aggregate в определении поля вычисляет сводные статистики, например median, min и max, по группам данных.
Если хотя бы одно поле в каналах кодирования содержит агрегирование, визуализация показывает агрегированные данные. Все поля без указанной функции агрегирования при этом считаются полями группировки.
Например, эта столбчатая диаграмма показывает среднее ускорение автомобилей, сгруппированных по числу цилиндров:
import altair as alt
from altair.datasets import data
cars = data.cars.url
alt.Chart(cars).mark_bar().encode(
y='Cylinders:O',
x='mean(Acceleration):Q',
)
Сокращённая запись Altair:
# ...
x='mean(Acceleration):Q',
# ...
предоставляется для удобства и эквивалентна полной записи:
# ...
x=alt.X(field='Acceleration', aggregate='mean', type='quantitative'),
# ...
Подробнее о сокращённой записи кодирования см. соответствующий раздел.
Ту же диаграмму можно построить, явно вычислив агрегирование методом Chart.transform_aggregate:
alt.Chart(cars).mark_bar().encode(
y='Cylinders:O',
x='mean_acc:Q'
).transform_aggregate(
mean_acc='mean(Acceleration)',
groupby=["Cylinders"]
)
Другой вариант — предварительно обработать данные в pandas, а затем построить диаграмму по полученному DataFrame:
cars_df = data.cars()
source = (
cars_df.groupby('Cylinders')
.Acceleration
.mean()
.reset_index()
.rename(columns={'Acceleration': 'mean_acc'})
)
alt.Chart(source).mark_bar().encode(
y='Cylinders:O',
x='mean_acc:Q'
)
Поскольку Cylinders в DataFrame source имеет тип int64, без явного указания Altair счёл бы его количественным, а не порядковым полем. Тип влияет на результат, поэтому задавать его явно важно. Два иллюстрированных примера приведены в разделах о типах данных и шкале легенды и типах данных и шкале оси. Как правило, лучше явно указывать тип, чем полагаться на неявное преобразование.
Функции без аргументов
Функции агрегирования можно вызывать без аргументов. В этом случае функция работает непосредственно с входными объектами и возвращает одинаковый результат независимо от указанного поля.
Следующая диаграмма демонстрирует это, подсчитывая автомобили по странам происхождения:
alt.Chart(cars).mark_bar().encode(
y='Origin:N',
# shorthand form of alt.X(aggregate='count')
x='count()'
)
Наибольшую пользу этот подход приносит функциям для категориальных данных, например count, missing, distinct и valid.
Функции Argmin и Argmax
argmin и argmax находят значения одного поля, соответствующие минимальному или максимальному значению другого. Например, можно найти производственный бюджет фильмов с наибольшими кассовыми сборами в каждом жанре.
Эти функции нужно применять через метод Chart.transform_aggregate, а не через сокращённую запись. Они возвращают объекты для выбора значений других столбцов, а не сами значения напрямую. Такой объект можно представить как словарь, где столбец служит ключом для извлечения соответствующего значения.
Для примера сравним вес автомобилей с наибольшей мощностью в разных регионах происхождения:
alt.Chart(cars).mark_bar().encode(
x='greatest_hp[Weight_in_lbs]:Q',
y='Origin:N'
).transform_aggregate(
greatest_hp='argmax(Horsepower)',
groupby=['Origin']
)
Визуализация показывает интересное различие: среди самых мощных автомобилей каждого региона японские заметно легче, а американские существенно тяжелее.
Ещё один пример argmax — линейная диаграмма с пользовательской легендой в галерее. Для argmin подход полностью аналогичен.
Параметры преобразования
Метод Chart.transform_aggregate основан на классе AggregateTransform со следующими параметрами:
Нажмите, чтобы показать таблицу
| Свойство | Тип | Описание |
|---|---|---|
aggregate | array(AggregatedFieldDef) | Массив объектов, задающих поля для агрегирования. |
groupby | array(FieldName) | Поля для группировки. Если не заданы, используется одна группа со всеми объектами данных. |
Объекты AggregatedFieldDef поддерживают следующие параметры:
Нажмите, чтобы показать таблицу
| Свойство | Тип | Описание |
|---|---|---|
as | FieldName | Имена выходных полей для каждого агрегированного поля. |
field | FieldName | Поле данных, по которому вычисляется функция агрегирования. Обязательно для всех операций, кроме |
op | AggregateOp | Операция агрегирования, применяемая к полям, например |
Функции агрегирования
Помимо count и average, в Altair встроено много других функций агрегирования. Они перечислены ниже.
Функции подсчёта
| Функция | Описание | Пример |
|---|---|---|
count |
Общее число объектов данных в группе. | Простая тепловая карта |
valid |
Число значений поля, которые не равны null или undefined. | — |
missing |
Число значений поля, равных null или undefined. | — |
distinct |
Число различных значений поля. | — |
values |
Список объектов данных в группе. | — |
Основные математические операции
| Функция | Описание | Пример |
|---|---|---|
sum |
Сумма значений поля. | Потоковая диаграмма |
product |
Произведение значений поля. | — |
Показатели центральной тенденции
| Функция | Описание | Пример |
|---|---|---|
mean |
Среднее значение поля. | Диаграмма рассеяния со слоями гистограмм |
average |
Среднее значение поля; эквивалент mean. |
Линейная диаграмма с цветом и линией |
median |
Медиана значений поля. | Диаграмма размаха |
variance |
Выборочная дисперсия значений поля. | — |
variancep |
Дисперсия генеральной совокупности. | — |
stdev |
Выборочное стандартное отклонение. | — |
stdevp |
Стандартное отклонение генеральной совокупности. | — |
stderr |
Стандартная ошибка значений поля. | — |
Статистики распределения
| Функция | Описание | Пример |
|---|---|---|
q1 |
Нижний квартиль значений. | Диаграмма размаха |
q3 |
Верхний квартиль значений. | Диаграмма размаха |
ci0 |
Нижняя граница 95%-го доверительного интервала среднего, полученного бутстрэпом. | Упорядоченные интервалы погрешностей с доверительным интервалом |
ci1 |
Верхняя граница 95%-го доверительного интервала среднего, полученного бутстрэпом. | Упорядоченные интервалы погрешностей с доверительным интервалом |
Функции диапазона
| Функция | Описание | Пример |
|---|---|---|
min |
Минимальное значение поля. | Диаграмма размаха |
max |
Максимальное значение поля. | Диаграмма размаха |
argmin |
Входной объект данных с минимальным значением поля. | — |
argmax |
Входной объект данных с максимальным значением поля. | Линейная диаграмма с пользовательской легендой |