Аналіз часових рядів є фундаментальною задачею в області обробки даних і машинного навчання. Це знайшло застосування у багатьох галузях, таких як фінанси, метеорологія, економіка та багато інших. Одна з основних задач при роботі з часовими рядами – ідентифікація та аналіз подій, що мають особливе значення. У цій статті ми розглянемо, як за допомогою бібліотеки Pandas в Python можна ідентифікувати події у часових рядах, зокрема ті, що тривають певний час.
Задача ідентифікації подій у часових рядах полягає у виявленні періодів, які відрізняються від нормального стану. Така ідентифікація може бути корисною для виявлення аномалій, прогнозування майбутніх тенденцій та розуміння поведінки системи в цілому. У нашому випадку ми зосередимося на виявленні подій, для яких значення часового ряду не дорівнює нулю протягом певного інтервалу часу.
Необхідно ідентифікувати події в датафреймі Pandas, де подія визначається як період, коли значення не дорівнює нулю протягом більш ніж 30 секунд. Важливо, що в рамках події можуть бути значення, які дорівнюють нулю, але такі значення не повинні тривати 30 секунд чи більше поспіль.
Для розгляду маємо датафрейм, який містить дві колонки: Timestamp і Value. Timestamp представляє собою мітки часу з інтервалом у 5 секунд, а Value – відповідні значення, які можуть бути як нульовими, так і ненульовими.
Щоб ідентифікувати події за вказаною умовою, можна виконати наступні кроки:
Спочатку додамо у датафрейм стовпець, який позначає, чи є поточне значення частиною потенційної події. Це можна зробити, перевіряючи, чи не дорівнює значення нулю.
1 |
df['IsEvent'] = df['Value'].apply(lambda x: 1 if x != 0 else 0) |
Наступним кроком буде визначення тривалості кожної потенційної події. Для цього можна використати віконні функції, що дозволяють аналізувати послідовності даних у межах визначеного “вікна”.
1 |
df['EventDuration'] = df['IsEvent'].rolling(window=6, min_periods=1).sum() |
Використовуючи ці два стовпці, можемо визначити початок і кінець кожної події. Початок події відбувається, коли значення ‘IsEvent’ змінюється з 0 на 1. Відповідно, кінець події – коли ‘IsEvent’ змінюється з 1 на 0 після принаймні 6 послідовних записів з ‘IsEvent’ дорівнює 1 (що відповідає 30 секундам).
Нарешті, застосовуючи агрегаційні функції та групування за ідентифікаторами подій, отримаємо кінцевий перелік подій з їх тривалістю та іншими характеристиками.
Алгоритм, описаний у цій статті, дозволяє ефективно ідентифікувати та аналізувати події у часових рядах за допомогою бібліотеки Pandas. Це лише один із багатьох методів обробки часових рядів, який можна адаптувати та розширити залежно від конкретних вимог та особливостей даних.