Уявіть, що ви відстежуєте температуру в своєму будинку протягом дня. Ваш смарт-термостат може записувати температуру кожну хвилину, генеруючи 1,440 вимірів щодня. Але чи потрібно це робити? Що якби він записував лише тоді, коли температура змінюється на 0.1 градуса? Це типове реальне завдання, яке ми розглянемо, використовуючи систему моніторингу батарей як приклад.
У цьому блозі ми представимо нові функції Timeplus, які враховують час, що допомагають вирішити поширену проблему в аналізі даних: як точно аналізувати вимірювання з мінімальною кількістю точок даних.
Для візуальних учнів, будь ласка, перегляньте наступне відео:
Припустимо, ми моніторимо стан і продуктивність батареї. Ми хочемо дізнатися:
- Яка напруга в батареї зазвичай підтримується?
- Яка середня, медіанна або p90 (понад 90% часу)?
Щоб відповісти на ці питання, нам потрібно відстежувати напругу батареї протягом часу. У нашому прикладі ми подивимося, як напруга батареї знижується з 5 вольт до 3 вольт протягом години використання.
Ось знімок наших даних:
Точки даних можна візуалізувати наступним чином. Кожен делта для часу даних рівний.
Традиційний підхід: чому він не ідеальний
Найпростіший спосіб зібрати ці дані — це робити вимірювання через фіксовані інтервали. Подумайте про це, як про перевірку вашого годинника кожну хвилину для запису напруги батареї. Щоб отримати середнє значення напруги, просто потрібно скласти всі точки даних і поділити їх на загальну кількість.
Але є одна проблема. Батареї не розряджаються з постійною швидкістю. Іноді напруга знижується швидко, а іноді залишається стабільною. Якщо ми хочемо зафіксувати кожну значущу зміну, нам потрібно вимірювати дуже часто — у нашому випадку, кожні 7 секунд. Це дає нам 859 вимірювань за годину, з багатьма надлишковими вимірами під час стабільних періодів.
Це схоже на знімки кожної секунди заходу сонця. У найдрматичніші моменти ви хочете мати часті знімки. Але коли небо не змінюється, ви просто заповнюєте пам'ять камери майже ідентичними зображеннями.
Розумний підхід: вимірювати те, що має значення
Сучасні батарейні системи розумніші. Замість того щоб перевіряти напругу кожні кілька секунд, вони записують лише тоді, коли виявляють значущу зміну. Це набагато ефективніше — у нашому прикладі нам потрібно всього 22 вимірювання замість 859.
Але це створює нове завдання. Якщо ми просто обчислимо середнє значення цих 22 вимірювань, ми отримаємо неправильний результат. Чому? Тому що цей метод розглядає кожне вимірювання як рівноцінне, незалежно від того, як довго зберігався цей рівень напруги.
Подумайте про це так: якщо ви провели 45 хвилин на 4.2 вольтах і 15 хвилин на 3.8 вольтах, просте середнє значення недооцінить час, проведений на більш високій напрузі.
Рішення: представлення функцій, що враховують час
Ось тут і входять функції Timeplus, що враховують час. Замість того, щоб розглядати кожне вимірювання однаково, ці функції враховують, як довго тривав кожен показник. Це як зважувати кожне вимірювання залежно від його тривалості. У мові математики формула для обчислення середнього значення змінюється з простого sum(v) / count(v)
на обізнане щодо часу sum(v * t) / sum(t)
.
Ми пропонуємо дві функції:
avg_time_weighted
: Обчислює середнє значення, враховуючи часmedian_time_weighted
: Знаходить середнє значення, враховуючи час
Використовувати ці функції дуже просто.
Ось як можна обчислити середнє зважене за часом для напруги:
SELECT avg_time_weighted(voltage, timestamp)
FROM battery
Для медіани:
SELECT median_time_weighted(voltage, timestamp)
FROM battery
Кожна функція потребує щонайменше дві одиниці інформації:
- Що ми вимірюємо (в нашому випадку —
voltage
). - Коли було здійснено вимірювання (
timestamp
).
Додатково, можна вказати третій параметр для визначення кінцевого часу періоду аналізу. Якщо цей параметр не вказано, то останнє значення виключається з обчислень. Якщо ж вказано, то кінцевий час має відповідати типу даних стовпця timestamp
, і функція використовує різницю між останнім часом та кінцевим часом як вагу для останнього значення.
Ось результат для нашого прикладу з батареєю, використовуючи avg_time_weighted
:
SELECT avg_time_weighted(voltage, timestamp)
FROM battery
Використання функції avg_time_weighted
дає більш реалістичний результат порівняно з прямим використанням функції avg
. Для кращого розуміння цього, ми можемо подивитись на діаграму.
Аналогічно, для обчислення медіани цих значень напруги, ми можемо також використовувати median_time_weighted
:
SELECT median_time_weighted(voltage, timestamp)
FROM battery
Переваги
Такий підхід має кілька переваг:
- Більш точний аналіз, що відображає, як довго кожне значення залишалося в силі.
- Зменшення потреб у зберіганні даних — зберігаються лише значущі зміни.
- Менше трафіку при передачі даних.
- Швидша обробка ваших вимірювань.
Реальні застосування
Хоча ми зосередилися на моніторингу батареї, функції зважування за часом можуть бути корисні в багатьох інших сценаріях:
- Моніторинг температури в промислових процесах.
- Аналіз мережевого трафіку.
- Зчитування даних з екологічних датчиків.
- Аналіз даних фінансових ринків.
- Моніторинг енергоспоживання.
Підсумок
Функції зважування за часом доступні в Timeplus Proton 1.6.6. Готові спробувати їх на своїх даних? Завантажте Proton з нашого репозиторію на GitHub і почніть досліджувати, як ці функції можуть покращити ваш аналіз даних.
Незалежно від того, чи працюєте ви з IoT-пристроями, моніторинговими системами або будь-якими іншими даними, що змінюються нерівномірно, функції зважування за часом допоможуть вам отримати більш точні висновки, використовуючи менше ресурсів.
Готові спробувати Timeplus Enterprise? Спробуйте безкоштовно протягом 30 днів.
Приєднуйтесь до нашої спільноти Timeplus! Спілкуйтесь з іншими користувачами або отримуйте підтримку в нашій спільноті на Slack.
Перекладено з: Analyze Irregularly Distributed Data Points Using Time-Weighted Functions In Timeplus