Единицы времени — TimeUnit
Преобразования TimeUnit дискретизируют даты и время в Altair. Как и рассмотренные выше агрегирование и разбиение на интервалы, их можно задать в кодировании или как преобразование верхнего уровня.
Доступны следующие единицы времени:
"year","yearquarter","yearquartermonth","yearmonth","yearmonthdate","yearmonthdatehours","yearmonthdatehoursminutes","yearmonthdatehoursminutesseconds"."quarter","quartermonth"."month","monthdate"."date"— день месяца, то есть 1–31."day"— день недели."hours","hoursminutes","hoursminutesseconds"."minutes","minutesseconds"."seconds","secondsmilliseconds"."milliseconds".
Единицы времени в кодировании
Определение любого временного поля может содержать аргумент timeUnit, который дискретизирует временные данные.
Например, построим диаграмму по набору ежечасных измерений температуры в Сиэтле за 2010 год:
import altair as alt
from altair.datasets import data
temperatures = data.seattle_weather_hourly_normals.url
alt.Chart(temperatures).mark_line().encode(
x='date:T',
y='temperature:Q'
)
Диаграмма перегружена из-за большого числа точек на коротком временном отрезке. Сделаем её проще: сгруппируем измерения по месяцам и покажем только среднюю месячную температуру:
alt.Chart(temperatures).mark_line().encode(
x='month(date):T',
y='mean(temperature):Q'
)
По умолчанию результат timeUnit — непрерывная величина. Если нужны категории, можно указать порядковый (O) или номинальный (N) тип. Это удобно для столбчатых и других дискретных диаграмм:
alt.Chart(temperatures).mark_bar().encode(
x='month(date):O',
y='mean(temperature):Q'
)
На одной диаграмме можно сочетать несколько единиц времени, получая разные представления данных. Например, выделим месяц и день месяца, чтобы показать изменение температуры в Сиэтле в течение года:
alt.Chart(temperatures).mark_rect().encode(
alt.X('date(date):O').title('day'),
alt.Y('month(date):O').title('month'),
color='max(temperature):Q'
).properties(
title="2010 Daily High Temperatures in Seattle (C)"
)
Единицы времени как преобразование
Иногда удобнее задать timeUnit как преобразование верхнего уровня, особенно если полученное значение используется повторно. Для этого подходит метод Chart.transform_timeunit, например:
alt.Chart(temperatures).mark_line().encode(
alt.X('month:T').axis(format='%b'),
y='mean(temperature):Q'
).transform_timeunit(
month='month(date)'
)
Поскольку здесь timeUnit не входит в канал кодирования, для правильных подписей оси часто нужно дополнительно задать форматирование.
Параметры преобразования
Метод Chart.transform_timeunit основан на классе TimeUnitTransform, который поддерживает следующие параметры:
Нажмите, чтобы показать таблицу
| Свойство | Тип | Описание |
|---|---|---|
as | FieldName | Выходное поле для записи значения |
field | FieldName | Поле данных, к которому применяется единица времени. |
timeUnit | anyOf(TimeUnit, TimeUnitTransformParams) | Единица времени. |