Преобразование timeunit
Преобразование timeunit ≥ 5.8 разбивает значения даты и времени на интервалы заданных единиц. Часто его используют, чтобы группировать данные по месяцам или дням недели.
Параметры преобразования
| Свойство | Тип | Описание |
|---|---|---|
| field | Field | Обязательно. Поле со значениями даты и времени. |
| units | String[ ] | Массив единиц времени, определяющих разбиение. См. справочник единиц времени. Если не задан, единицы выводятся из диапазона extent. |
| inferUnits | Boolean | Определять ли единицы по точности наблюдаемых дат (по умолчанию false). Полезно для уже сгруппированных данных, например по месяцам. Точность определяется во временной зоне timezone. При true этот параметр имеет приоритет, а units, step, maxbins и extent игнорируются. |
| step | Number | Число шагов между интервалами в единицах самой мелкой единицы из units (по умолчанию 1). Если units не задан, параметр игнорируется. |
| timezone | String | Временная зона: "local" (по умолчанию) или "utc" для всемирного координированного времени UTC. |
| interval | Boolean | Выводить ли начало и конец интервала (по умолчанию true). При false записывается только начало интервала. |
| extent | Date[ ] | Массив из минимальной и максимальной даты, учитываемых при автоматическом выборе единиц. По умолчанию используются границы наблюдаемых значений field. Действует только при отсутствии units. |
| maxbins | Number | Максимальное число интервалов при автоматическом выборе единиц (по умолчанию 40). Их может быть меньше из-за округления границ до удобных значений. Действует только при отсутствии units. |
| signal | String | Имя сигнала для вычисленного описания интервалов. Объект содержит unit (самую мелкую единицу), units (все единицы), step, start и stop. |
| as | String[ ] | Имена выходных полей для начала и конца интервала (по умолчанию ["unit0", "unit1"]). При interval равном false записывается только первое поле. |
Единицы времени
Поддерживаются следующие единицы времени. Каждая задаётся одной из строк:
"year"— годы григорианского календаря."quarter"— трёхмесячные кварталы, начинающиеся в январе, апреле, июле и октябре."month"— календарные месяцы: январь, февраль и так далее."date"— день месяца: 1 января, 2 января и так далее."week"— недели, начинающиеся в воскресенье. Дни до первого воскресенья года относятся к неделе 0; первое воскресенье начинает неделю 1, второе — неделю 2 и так далее."isoweek"— недели по ISO 8601 ≥ 6.4. Они начинаются в понедельник; неделя 1 содержит 4 января, то есть первый четверг года. Неделя относится к тому недельному году, на который приходится её четверг; он может отличаться от календарного года первого или последнего дня недели. Единицы"week"и"isoweek"нельзя сочетать."day"— день недели: воскресенье, понедельник и так далее."dayofyear"— день года: 1, 2, …, 365 и так далее."hours"— час дня: 00:00, 01:00 и так далее."minutes"— минута внутри часа: 12:00, 12:01 и так далее."seconds"— секунда внутри минуты: 12:00:00, 12:00:01 и так далее."milliseconds"— миллисекунда внутри секунды.
Параметр units принимает массив нужных единиц. Например, ["year", "month", "date"] сохраняет год, месяц и число, но не часы, минуты и секунды. Массив ["month", "date"] учитывает месяц и число без года; так удобно исследовать сезонные закономерности.
Использование
Хронологические единицы времени
Пример разбивает значения поля date по году и номеру недели, начинающейся в воскресенье (units), с шагом в две недели (step).
{"type": "timeunit", "field": "date", "units": ["year", "week"], "step": 2}
Замените "week" на "isoweek", чтобы использовать недели ISO 8601, начинающиеся в понедельник и нумеруемые по недельному году. Поскольку на границе года схемы различаются, сочетание ["year", "isoweek"] форматируется по недельному году (%G), а не календарному (%Y).
Для следующих входных данных:
[
{"date": new Date(2018, 0, 11)},
{"date": new Date(2018, 4, 12)},
{"date": new Date(2018, 8, 7)},
{"date": new Date(2018, 11, 23)}
]
преобразование timeunit создаёт результат:
[
{"date": new Date(2018, 0, 11), "unit0": new Date(2018, 0, 7), "unit1": new Date(2018, 0, 21)},
{"date": new Date(2018, 4, 12), "unit0": new Date(2018, 3, 29), "unit1": new Date(2018, 4, 13)},
{"date": new Date(2018, 8, 7), "unit0": new Date(2018, 8, 2), "unit1": new Date(2018, 8, 16)},
{"date": new Date(2018, 11, 23), "unit0": new Date(2018, 11, 23), "unit1": new Date(2019, 0, 6)}
]
Группировку по году и месяцу можно задать массивом "units": ["year", "month"].
Циклические единицы времени
Пример разбивает значения поля date по месяцу, не учитывая год.
{"type": "timeunit", "field": "date", "units": ["month"]}
Для следующих входных данных:
[
{"date": new Date(2018, 0, 4)},
{"date": new Date(2018, 4, 12)},
{"date": new Date(2018, 8, 7)},
{"date": new Date(2018, 11, 23)}
]
преобразование timeunit создаёт результат:
[
{"date": new Date(2018, 0, 4), "unit0": new Date(2012, 0, 1), "unit1": new Date(2012, 1, 1)},
{"date": new Date(2018, 4, 12), "unit0": new Date(2012, 4, 1), "unit1": new Date(2012, 5, 1)},
{"date": new Date(2018, 8, 7), "unit0": new Date(2012, 8, 1), "unit1": new Date(2012, 9, 1)},
{"date": new Date(2018, 11, 23), "unit0": new Date(2012, 11, 1), "unit1": new Date(2013, 0, 1)}
]
Обратите внимание: в выходных датах по умолчанию используется 2012 год. Он выбран потому, что является високосным, сохраняет 29 февраля и начинается в воскресенье, что обеспечивает правильный порядок дней недели в начале года.
Когда "isoweek" используется без "year", выходным годом по умолчанию становится 2015-й. Это длинный год по ISO, содержащий все 53 возможных номера недель.
Для группировки по дню недели, начинающейся в воскресенье, используйте "units": ["day"]; для группировки по числу месяца независимо от месяца и года — "units": ["date"].