Анализ трендов и сезонности данных с помощью вейвлет-преобразования
Временные ряды представляют собой последовательные данные, собранные или записанные в последовательности времени. Анализ временных рядов играет важную роль в понимании изменений и паттернов в данных. Один из способов анализа временных рядов — использование вейвлет-преобразования. В этой статье мы рассмотрим, как вейвлет-преобразование может помочь выявить тренды и сезонные компоненты в данных.
Импорт необходимых библиотек
Начнем с импорта необходимых библиотек для работы с данными и визуализации:
import numpy as np import matplotlib.pyplot as plt import pywt
Если у вас не установлен pywt, то вы можете установить его следующим образом:
pip install PyWavelets
Создание временного ряда
Создадим временной ряд, представляющий продажи за определенные периоды времени, используя синусоидальную функцию с добавлением шума:
time = np.arange(0, 100, 1) sales = 50 + 10 * np.sin(0.2 * time) + np.random.normal(scale=5, size=len(time))
Вейвлет-преобразование
Применим вейвлет-преобразование к временному ряду с уровнем разложения 3 и вейвлетом Добеши 4 порядка:
coeffs = pywt.wavedec(sales, 'db4', level=3)
Отображение результатов
Отобразим исходный временной ряд и его вейвлет-коэффициенты на различных уровнях разложения:
plt.figure(figsize=(12, 6))
plt.subplot(3, 2, 1)
plt.plot(time, sales, label='Исходный временной ряд')
plt.legend()
for i in range(len(coeffs)):
plt.subplot(3, 2, i + 2)
plt.plot(coeffs[i])
plt.title('Уровень ' + str(i + 1))
plt.tight_layout()
plt.show()- Импорт библиотек:
В этом шаге мы импортируем несколько библиотек, которые нам понадобятся для работы с данными и визуализации:
numpy(сокращение от Numeric Python) — это библиотека для работы с массивами и числовыми данными удобным образом.matplotlib.pyplot— это библиотека для создания графиков и визуализации данных.pywt— библиотека PyWavelets, которая используется для вейвлет-преобразования.
np.arange(0, 100, 1)создает массив времени от 0 до 99 с шагом 1.salesсоздает данные о продажах, используя синусоидальную функцию с добавлением шума для реалистичности.
pywt.wavedec()применяет вейвлет-преобразование к временному ряду.'db4'указывает на использование вейвлета Добеши 4 порядка.level=3указывает на уровень разложения.
plt.figure(figsize=(12, 6))создает новый график с размерами 12x6 дюймов.plt.subplot(2, 2, 1)задает область для отображения первого графика (2 строки, 2 столбца, 1-й график). Этот график представляет исходный временной ряд.plt.plot(time, sales, label='Исходный временной ряд')строит график исходного временного ряда (продаж) в зависимости от времени.plt.legend()добавляет легенду к графику, показывающую, что это исходный временной ряд.- Затем мы проходим по коэффициентам вейвлет-разложения с помощью цикла и строим графики для каждого уровня разложения.
plt.subplot(2, 2, i + 2)задает область для отображения графика текущего уровня разложения.plt.plot(coeffs[i])строит график текущего уровня разложения (вейвлет-коэффициенты).plt.title('Уровень ' + str(i + 1))добавляет заголовок к текущему графику, указывая его уровень.plt.tight_layout()автоматически корректирует параметры подграфиков так, чтобы они плотно заполняли доступное пространство.plt.show()отображает все построенные графики.