Информационное письмо
Образец оформления статьи
Анкета автора
06.03.2017

Использование языка Python как инструмента визуализации данных временных рядов

Демьянов Руслан Сергеевич
магистрант 2 курса, кафедра информатики, Санкт-Петербургский государственный экономический университет, г. Санкт-Петербург, Российская Федерация
Аннотация: Анализ временных рядов является основным шагом в построении модели прогнозирования, но очень важно рассмотреть данные временных рядов с различных сторон. Так же анализ помогает выявить различные признаки и параметры рассматриваемого временного ряда. Именно поэтому визуализация данных является сильным инструментом на этапе формирования модели прогнозирования.
Ключевые слова: визуализация, временные ряды, python, ящик с усами, тепловая карта, график автокорреляции
Электронная версия
Скачать (1.11 Mb)

Введение

Данные временных рядов отлично визуализируются на обычном графике Линейные графики наблюдений относительно времени очень популярны, но также есть набор других методов визуализации, при использовании которых можно больше узнать изучаемых данных.

Чем более глубокое изучение набора данных, тем более точную модель прогнозирования можно реализовать.

Визуализация временных рядов

Визуализация играет очень важную роль в анализе временных рядов и прогнозировании. С помощью графика исходных данных можно выявить временные структуры, такие как: тренды, циклы и сезонности, которые могут влиять на выбор модели. Проблема заключается в том, что не всегда используют полный спектр инструментов визуализации, останавливаясь только на линейном графике.

На самом деле инструментов визуализации данных достаточно много, но в данном исследовании рассмотрено шесть основных видов визуализации:

  • Линейный график
  • Гистограммы и график плотности распределения
  • Ящик с усами (Диаграмма размаха)
  • Тепловая карта
  • Диаграмма рассеяния
  • График автокорреляции

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

Для демонстрации инструментов визуализации выбран набор данных минимальной дневной температуры за 10 лет (1981-1990) в городе Мельбурн, Австралия. Единица измерения в Цельсиях, самих же наблюдений 3650. Источником данного набора является Австралийское бюро метрологии.

Для того чтобы проверить корректно ли загрузились данные необходимо открыть файл и в качестве проверки вывести первые пять значений (рисунок 1).

Рисунок 1 – Проверка загруженных данных

Рисунок 1 – Проверка загруженных данных

Линейный график временного ряда

Первый и наиболее популярный способ визуализировать временной ряд является линейный график. На графике (рисунок 2) представлена зависимость температуры от года.

Рисунок 2 – Пример линейного графика (зависимость температуры от года)
Рисунок 2 – Пример линейного графика (зависимость температуры от года)

Линейный график достаточно плотный, поэтому иногда очень полезно изменить его стиль на пунктир или точки. Для того чтобы изменить стиль линий на черные точки, достаточно добавить аргумент style=’k.’ в функцию plot(). На рисунке 3 представлен измененный график. 

Рисунок 3 – Линейный график с измененным стилем линей на точки

Рисунок 3 – Линейный график с измененным стилем линей на точки

Так же важно иметь возможность сравнивать линейные графики одинакового интервала. Минимальное деление рассматриваемого набора данных предполагает деление на годы, поэтому можно сгруппировать данные по годам и сформировать график минимальной дневной температуры для каждого года отдельно.

Для этого необходимо сгруппировать наблюдения по годам, а далее пронумеровать группы и сохранить каждую как колонку в новом блоке данных. На рисунке 4 показан финальный результат, который создает 10 линейных графиков для каждого года.

Рисунок 4 – Демонстрация графика сгруппированного набора данных

Рисунок 4 – Демонстрация графика сгруппированного набора данных

Гистограммы временных рядов и графики плотности распределения

Другой очень важный способ визуализации является график распределения данных временных рядов. Это график средних значений без упорядочивания по времени.

Некоторые методы прогнозирования временных рядов предполагают хорошую производительность на данных нормального распределения. Данную гипотезу можно проверить очень быстро, используя график распределения. Так же преимуществом данного инструмента анализа является, то что данную проверку можно произвести как на необработанных данных, так и на преобразованных данных.

На рисунке 5 создана гистограмма используемого набора данных.

Рисунок 5 – Реализация гистограммы временного ряда
Рисунок 5 – Реализация гистограммы временного ряда

На графике видно Гауссово распределение. Необходимо отметить, что функция построения графика автоматически выбирает размер столбца в зависимости от разброса значений в данных.

Однако, можно получить более полное представление о форме распределения наблюдений с использованием графика плотности. Сам график подобен гистограмме за исключением того, что используется функция сглаживания результатов для общения этого распределения. [1]

Для того что бы получить график изображенный на рисунке 6, необходимо в функции plot() добавить аргумент kind=’kde’.

Рисунок 6 – График распределения с использованием функции сглаживания
Рисунок 6 – График распределения с использованием функции сглаживания

Диаграмма размаха по интервалам

Гистограммы и графики плотности дают представление о распределении всех данных в общем, но что если необходимо сформировать наглядный график распределения значения по интервалам времени?

В данном случае необходимо воспользоваться диаграммой размаха, так же известной как ящик с усами. На графике распределения с использованием функции сглаживания (рисунок 6) изображен прямоугольник между 25-ой и 75-ой перцентилями данных, который фиксирует среднее 50 % наблюдений. Линия, изображенная на 50-ой перцентиле – медиана, а усы, расположенные выше и ниже прямоугольника для демонстрации минимального и максимального значения выборки, и также выбросы.

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

Самым простым примером применения данного графика для тестовых данных является отображение по годам. На таком графике с интервалом в год можно увидеть различную информацию о временном ряде, такую как: тренды, сезонности и другую структурную информацию, которую необходимо смоделировать.

Но для наглядности и демонстрации гибкости применения данного метода визуализации используем график ящик с усами для формирования распределения знаний по месяцам в течении одного года. На рисунке 7 изображено 12 графиков ящиков с усами, один для каждого месяца наблюдения в 1990 году.

Рисунок 7 – Ящик с усами для месяцев последнего года наблюдений

Рисунок 7 – Ящик с усами для месяцев последнего года наблюдений

Тепловая карта временных рядов

Матрица значений температур может быть сформирована в качестве представления, где значение в каждой ячейке матрицы может присваивать определенный цвет [2]. Данный график называется тепловой картой, где чем больше значение в наблюдении, тем теплее цвета и наоборот.

Как и на диаграмме размаха, на тепловой карте возможно сравнить наблюдения между интервалами. Например, представленные тестовые данные были сформированы в матрицу, где каждый год – это столбец, 
а день – это строка (См. Рисунок 8).

Рисунок 8 – Тепловая карта тестовых данных
Рисунок 8 – Тепловая карта тестовых данных

Диаграмма рассеяния

Модель временных рядов предполагает существование взаимосвязей между текущим и предыдущим наблюдением. Предыдущим наблюдением временного ряда называется лаг. Именно поэтому полезным инструментов визуализации в данном случае является диаграмма рассеивания, в которой демонстрируются отношения между наблюдением и лагом.

В библиотеке pandas реализована функция lag_plot(), которая полностью удовлетворяет всем вышеперечисленным требованиям. С помощью данной функции можно построить график со временными интервалами по абсциссе и лагами (t – 1) по ординате. Расположение точек на графике имеет различный характер.

Таким образом, если точки расположены вдоль диагонали с левого нижнего угла до правого верхнего, то у данного набора данных положительная корреляция и если наоборот, то отрицательная корреляция.

Так же установлено, что чем меньше расстояние между точками, тем более сильная взаимосвязь между наблюдениями.

На рисунке 9 представлен график рассеяния, на котором хорошо демонстрируется положительная корреляция и сильная связь между наблюдениями.

Рисунок 9 – График рассеяния тестовых данных

Рисунок 9 – График рассеяния тестовых данных

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

График автокорреляции

Для анализа временных рядов так же полезно количественно оценить силу и тип взаимоотношений между наблюдениями и их лагов. В статистике это называется корреляцией, и при расчете зависимости от значений лагов во временных рядах, так же известна как автокорреляция.

Значение корреляции рассчитывается между двумя группами чисел, таких как наблюдения и лаги, результатом является число между -1 и 1. Знак результата показывает на отрицательную или положительную корреляцию, а значение близкое к нулю указывает на слабую корреляцию и наоборот. [3]

Для построения автокорреляционного графика проще всего воспользоваться функцией autocorrelation_plot(). На рисунке 10 продемонстрирован результат построения автокорреляционного графика.

Рисунок 10 – График автокорреляции
Рисунок 10 – График автокорреляции

Как видно из рисунка 10, на примере присутствуют циклы как положительных, так и отрицательных корреляций. Данный результат отображает взаимосвязь наблюдений с предыдущими в одинаковые и противоположные времена года. Синусоида в примере является признаком сезонности в наборе данных.

Выводы

В настоящее время построение сложных графиков не составляет много времени благодаря уже готовому набору реализаций различных библиотек. На основе скриптового языка Python возможно очень быстро построить графики любой сложности, а использование данного мощного инструмента существенно сокращает время анализа данных и позволяет глубже понимать проблему исследуемого временного ряда.

Установлено, что представленные способы визуализации временных рядов помогают выявить множество различных скрытых параметров, которые необходимы для дальнейшей реализации модели прогнозирования.

Список литературы:

1. Woodward, W.A., Gray, H. L. & Elliott, A. C. Applied Time Series Analysis // CRC Press. – 2012. – С. 63-64.

2. Айвазян С. А., Бухштабер В. М., Енюков И. С., Мешалкин Л. Д. Прикладная статистика: Классификация и снижение размерности. — М.: Финансы и статистика, 1989. — 607 с.

3. Мишулина О.А. Статистический анализ и обработка временных рядов. // М.: МИФИ, 2004. – С. 38.

4. George E. P. Box, Gwilym M. Jenkins, Gregory C. Reinsel. Time Series Analysis: Forecasting and Control // Wiley Series in Probability and Statistics. ISBN 1118619064, 9781118619063. – 2013. – С. 92 – 161.

5. Айвазян С.А. Прикладная статистика. Основы эконометрики. Том 2. // М.: Юнити-Дана, ISBN 5-238-00305-6. – 2001. — C. 432.

6. Магнус Я.Р., Катышев П.К., Пересецкий А.А. Эконометрика. Начальный курс. // М.: Дело, ISBN 978-5-7749-0473-0. – 2007. — C. 504.

7. Эконометрика. Учебник / Под ред. Елисеевой И.И. — 2-е изд. // М.: Финансы и статистика, ISBN 5-279-02786-3. – 2006. — С. 576.

8. Hyndman Rob J., Athanasopoulos G. Forecasting: principles and practice // University of Western Australia. ISBN-13: 978-0987507105 – 2013. – С. 14 – 32.

9. Shasha, D. High Performance Discovery in Time Series // Springer – 2004. – С. 3 – 7.

10. Cowpertwait P.S.P., Metcalfe A.V. Introductory Time Series with R // Springer – 2009. – С. 27 – 43.