Временные карты. Визуализация дискретных событий в различных временных масштабах

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

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

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

В этой статье мы рассмотрим метод, позволяющий визуализировать на одной диаграмме множество событий в различных временных масштабах без необходимости масштабирования. Этот метод дает аналитику возможность быстро обнаруживать характерные особенности последовательностей событий, независимо от того, наблюдаются они в масштабе миллисекунд или месяцев. Он был заимствован из теории хаоса и первоначально предназначался для изучения проблемы капающего крана. Мы будем называть данный метод визуализации «временной картой» (time map). Также он известен под такими англоязычными названиями, как return map, return-time map, time vs. time plot. Временные карты использовались для визуализации хаотических систем, но при этом не нашли применения в области информационных технологий. Мы покажем, как с помощью временных карт можно получить ценную информацию о характере активности Твиттер-аккаунта, а также идентифицировать активность интернет-бота.

В конце статьи приведен пример кода на Python.

Создание временной карты – несложная задача. Во-первых, представим серию событий в виде точек на оси времени. Временные интервалы между событиями обозначены, как t1, t2, t3, t4 и т.д.

Временная карта представляет собой двумерную точечную диаграмму, где координатами событий являются следующие пары: (t1, t2), (t2, t3), (t3, t4) и т.д. На временной карте фиолетовая точка будет построена следующим образом:

Time Before Event – время до события

Time After Event – время после события

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

Давайте рассмотрим два простых примера:

Временная карта последовательности событий, происходящих через равные интервалы времени (A), содержит одну точку, поскольку координаты всех событий равны. Последовательность B аналогична последовательности A, за исключением незначительных изменений. В результате, временная карта содержит 4 точки, что позволяет легко обнаружить смещение событий во времени. Гистограммы для последовательностей A и B без применения очень крупного масштаба времени были бы абсолютно одинаковыми, скрывая тем самым произошедшие изменения.

Ниже представлена эвристическая диаграмма, помогающая интуитивно понять логику временных карт:

slowing down – замедление

slow & steady – стабильно медленно

fast & steady – стабильно быстро

speeding up – ускорение

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

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

Твиты Белого дома

API Твиттера обеспечивает доступ к 3 200 последним твитам пользователя. С помощью Python-пакета Twython мы загрузили твиты Белого дома (@WhiteHouse), которые в основном написаны сотрудниками администрации президента США. Ниже представлена временная карта твитов, опубликованных в период с января по сентябрь 2015 года:

Time Before Tweet – время до твита

Time After Tweet – время после твита

first tweet of the day – первый твит дня

last tweet of the day – последний твит дня

business as usual – обычные события

major event – важные события

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

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

Поскольку нам трудно подсчитать количество точек в каждой группе, мы преобразовали временную карту в теплокарту (heat map), на которой красный цвет соответствует более высокой плотности точек.

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

Персональные твиты

Твиттер-аккаунтом Белого дома управляют PR-специалисты. Теперь давайте выясним, какие модели поведения характерны для персонального Твиттер-аккаунта. Николас Фелтон (Nicholas Felton) – графический дизайнер, специализирующийся на визуализации различной информации. Одним из направлений деятельности Николаса являются годовые отчеты, визуализирующие данные из его жизни. Ниже представлена временная карта (преобразованная в теплокарту) его твитов:

В данном случае мы не наблюдаем выраженные группы, имевшие место в случае твитов Белого дома. В отличие от менеджеров PR-аккаунтов, владельцы персональных аккаунтов обычно не придерживаются строгого расписания. Тем не менее временная карта отражает общие тенденции. Интервалы между многими твитами составляют как более, так и менее 24 часов. Кроме того, большое количество точек соответствует шаблону «стабильно медленно», что предполагает написание твитов примерно 1 раз в день.

Интернет-бот

Интернет-боты – это компьютерные программы, выполняющие различные автоматизированные задачи в сети Интернет. Бот может незаметно установиться на компьютер при нажатии на ссылку, если пользователь разрешит запуск незнакомого приложения. Без ведома пользователей боты работают на миллионах персональных компьютеров. Один из них может даже работать на вашем компьютере непосредственно в данный момент, когда вы читаете это предложение! Мы проанализировали данные, предоставленные компанией, оказывающей услуги мониторинга различным веб-сайтам. Давайте рассмотрим гистограмму, представленную в начале статьи:

Данная гистограмма визуализирует посещаемость веб-сайта с определенного IP-адреса. Хотя она дает хорошее представление об общем характере поведения, временная карта обеспечивает нам доступ к дополнительной важной информации:

Time Before Visit – время до посещения

Time After Visit – время после посещения

dormant periods between bursts – длительные интервалы между всплесками активности

burst followed by 8-minute lull – 8-минутные интервалы после всплесков активности

8-minute lull followed by burst – 8-минутные интервалы перед всплесками активности

rapid burst – всплески активности (посещения с малыми интервалами)

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

Рассеянные точки в правом нижнем и левом верхнем углах представляют длительные интервалы между всплесками активности. Эти интервалы соответствуют пустым пространствам на гистограмме. Две узкие группы точек представляют 8-минутные интервалы между всплесками активности. Сами всплески активности представлены большой группой точек в левом нижнем углу. Наличие всплесков активности можно подтвердить, проанализировав фрагмент гистограммы в очень крупном масштабе:

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

Создание временных карт на Python

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

import numpy as np
import matplotlib.pylab as plt

# a sample array containing the timings of events in order: [1, 2.1, 2.9, 3.1...]
times = np.cumsum(np.abs(np.random.normal(size=100)))

# calculate time differences:
diffs = np.array([times[i]-times[i-1] for i in range(1,len(times))])

xcoords = diffs[:-1] # all differences except the last
ycoords = diffs[1:] # all differences except the first

plt.plot(xcoords, ycoords, 'b.') # make scatter plot with blue dots
plt.show()

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

import scipy.ndimage as ndi

Nside=256 # this is the number of bins along x and y for the histogram
width=8 # the width of the Gaussian function along x and y when applying the blur operation

H = np.zeros((Nside,Nside)) # a 'histogram' matrix that counts the number of points in each grid-square

max_diff = np.max(diffs) # maximum time difference

x_heat = (Nside-1)*xcoords/max_diff # the xy coordinates scaled to the size of the matrix
y_heat = (Nside-1)*ycoords/max_diff # subtract 1 since Python starts counting at 0, unlike Fortran and R

for i in range(len(xcoords)): # loop over all points to calculate the population of each bin
    H[x_heat[i], y_heat[i]] += 1 # Increase count by 1
    #here, the integer part of x/y_heat[i] is automatically taken

H = ndi.gaussian_filter(H,width) # apply Gaussian blur
H = np.transpose(H) # so that the orientation is the same as the scatter plot

plt.imshow(H, origin='lower') # display H as an image
plt.show()

Код на Python для загрузки твитов и создания временных карт можно найти на GitHub.

Заключение

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

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

По материалам: District Labs

Перевод Станислава Петренко

Добавить комментарий

Ваш e-mail не будет опубликован.

закрыть

Поделиться

Отправить на почту
закрыть

Вход

закрыть

Регистрация

+ =