Реализация коробчатых диаграмм, преобразования Фурье, энтропии, автокорреляции и PCA для анализа данных временных рядов в Python.

Визуализация данных — один из важнейших этапов любого проекта, связанного с данными. В зависимости от того, для кого производится визуализация данных, различают:
- Визуализация данных для отчета о результатах.
- Визуализация данных для анализа данных или, другими словами, визуализация, используемая специалистом по данным для извлечения информации о данных для последующего внедрения своих моделей.
Эта статья в основном посвящена последнему, поскольку в ней объясняются некоторые методы, которые помогают в анализе данных временных рядов. В частности, в этой статье рассматриваются следующие методы: (1) среднее и стандартное, (2) блочная диаграмма, (3) Фурье, (4) энтропия, (5) уменьшение размерности и (6) автокорреляция.
Все данные и код, используемые вместе с этой статьей, содержатся в следующем репозитории GitHub.
0. Библиотеки
Во-первых, это библиотеки, используемые вместе с блокнотом. Большая часть кода связана с библиотеками NumPy и Pandas, поскольку данные в основном используются в виде массива NumPy Pandas Dataframe. .
1. Импорт файла
После загрузки данных, расположенных в репозитории GitHub, запустите следующий код, чтобы импортировать их.

Как видно, данные содержат данные датчиков для шести датчиков, дату и время для каждой точки данных и состояние машины. Это «СЛОМАННЫЙ», «НОРМАЛЬНЫЙ» или «ВОССТАНАВЛИВАЮЩИЙСЯ», но для упрощения визуализации он сгруппирован следующим образом:
{'BROKEN', 'NORMAL', 'RECOVERING'}
0: {'NORMAL', 'RECOVERING'}
1: {'BROKEN'}
Работа с датой и временем на любом языке программирования всегда сложна, и Python не является исключением. Несмотря на то, что может быть несколько способов работы с датой и временем, столбец datetime (читаемый как строка) был преобразован в метку времени с помощью функции pandas.to_datetime.
<class 'str'> <class 'pandas._libs.tslibs.timestamps.Timestamp'>
2. Предварительная обработка данных
Прежде чем перейти к визуализации, были проанализированы повторяющиеся и отсутствующие значения.
Вот функция удаления дубликатов в нашем фрейме данных:
И это функция для заполнения пропущенных значений:
Вот весь конвейер для этапа предварительной обработки. Также данные были разделены на входные и выходные данные.
Input shape: (10081, 7) Output shape: (10081, 2)


3. Визуализация данных
Теперь мы готовы начать с визуализации данных. Вот график для данных датчика и аномалий.

3.1. Среднее и станд.
Одним из самых простых графиков, который лучше обобщает поведение данных во времени, является график среднего стандартного значения, на котором мы отображаем среднее значение и стандартное отклонение, сгруппированные по временным рамкам. Это помогает в основном анализировать базовую линию и шум за указанный период времени.

3.2. Блочная диаграмма
Еще один интересный сюжет — тот, который отображается в виде коробчатых диаграмм. Блочная диаграмма — это метод графической демонстрации групп локальности, разброса и асимметрии числовых данных через их квартили. Есть два основных поля, которые указывают данные от 25-го процентиля до 75-го процентиля, разделенные медианным значением распределения. Помимо прямоугольников, есть усы, которые выходят из прямоугольника, указывая на изменчивость за пределами верхнего и нижнего квартилей. Выбросы, которые значительно отличаются от остального набора данных, также отображаются как отдельные точки за пределами усов на блочной диаграмме.
Этот график похож на средний и стандартный график, поскольку указывает на стационарность данных. Но он также отображает выбросы, которые могут помочь визуально обнаружить любую связь между аномалиями и данными.

3.3. Фурье
Быстрое преобразование Фурье (БПФ) — это алгоритм, который вычисляет дискретное преобразование Фурье последовательности. Этот тип графика интересно визуализировать, так как это один из основных методов выделения признаков при работе с временными рядами. Вместо обучения модели на временных рядах обычной практикой является применение преобразования Фурье для извлечения частот, а затем обучение модели.
Для этого вам нужно выбрать скользящее окно для вычисления БПФ. Чем шире скользящее окно, тем выше число частот. Недостатком является то, что вы получите меньше меток времени, потеряв временное разрешение данных. При уменьшении размера окна получаем обратное: меньше частот, но выше временное разрешение. Тогда размер окна должен зависеть от задачи.

Для графика, показанного ниже, я выбрал временное окно из 64 данных. Следовательно, частота варьируется от 1 до 32 Гц.

3.4. Энтропия
Визуализация информации и энтропии — полезный инструмент в машинном обучении, поскольку они являются основой для выбора многих функций, построения деревьев решений и подгонки моделей классификации.
Расчет энтропии выглядит следующим образом:
- Нормализуйте частотное распределение

- Вычислить энтропию

Наименьшая энтропия рассчитывается для случайной величины, которая имеет одно событие с вероятностью 1,0, достоверность. Наибольшая энтропия для случайной величины будет, если все события равновероятны.

3.5. Снижение размерности
При наличии нескольких датчиков всегда интересно реализовать метод уменьшения размерности, чтобы получить 1, 2 или 3 основных компонента, которые содержат большую часть информации.
Для этого примера я применил анализ основных компонентов (PCA). Это процесс вычисления основных компонентов и их использования для изменения базы данных.
Коэффициент объясненной дисперсии — это процент дисперсии, приписываемый каждому из выбранных компонентов.

Затем для первых компонентов PCA можно нанести данные на график и визуально проверить, есть ли связь между аномалиями и временными рядами.

3.6. Автокорреляция
Наконец, и особенно для задач прогнозирования, интересно построить автокорреляцию данных. Этот представляет собой степень сходства между данным временным рядом и его запаздывающей версией в течение последовательных интервалов времени.
Autocorrelation is: 0.024363541344977133

В отношении автокорреляции существует расширенный статистический тест Дики-Фуллера, используемый для проверки того, является ли данный временной ряд стационарным или нет.
sensor_00: (-4.288982026391745, 0.00046413778677505943, 13, 10067, {'1%': -3.4309997435394877, '5%': -2.861827148204747, '10%': -2.5669228438492597}, -31804.0714734676)
pca1: (-3.7298433193954073, 0.003712434586758542, 5, 10075, {'1%': -3.430999227482557, '5%': -2.8618269201630375, '10%': -2.566922722462425}, 44790.129278286884)
Если вам понравился этот пост, рассмотрите возможность подписаться. Вы получите доступ ко всему моему контенту и ко всем остальным статьям на Medium от замечательных авторов!
Рекомендации
[1] GitHub, Обнаружение аномалий
[2] Open Risk, 21 способ визуализации таймсерии