Единицы времени — 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, который поддерживает следующие параметры:

Нажмите, чтобы показать таблицу
СвойствоТипОписание
asFieldName

Выходное поле для записи значения timeUnit.

fieldFieldName

Поле данных, к которому применяется единица времени.

timeUnitanyOf(TimeUnit, TimeUnitTransformParams)

Единица времени.