Process Mining и Дракула, или как строить интерактивные графы в браузере?
При разработке программного решения зачастую приходится задумываться о переносимости результатов не только с одной платформы на другую, но и с одного компьютера на другой. Графы процессов, построенные с использованием технологии Process Mining, не являются исключением. Предлагаем решение – веб-приложение, поддерживающее методы Process Mining и работающее для просмотра и взаимодействия с полученными графами на любом компьютере.
Порой, полученные графы необходимо передать профильному специалисту, на компьютере которого нет специализированных программ для просмотра (python, graphviz, proM и т.д), в связи с чем встал вопрос о разработке приложения, поддерживающего методы Process Mining и работающем для просмотра и взаимодействия с полученными графами на любом компьютере. Решение – написать веб-приложение. Лог файл методами Process Mining будет обрабатываться на компьютере IT-специалиста с помощью python, а вот в построении графа процесса нам поможет Дракула! Но не спешите нести осиновые колья, это всего лишь javascript библиотека!
Для визуализации графа процесса необходимо предварительно извлечь необходимую информацию из предоставленных логов, а также обогатить её новыми данными (количеством переходов между событиями, средним временем и т.д).
В начале работы импортируем необходимую для обработки табличных данных библиотеку Pandas:
Считаем данные из нашего excel-файла, указав имя листа для чтения и требуемую кодировку (указание кодировки не является обязательным, но поможет избежать проблем с отображением информации в дальнейшем):
Далее необходимо отсортировать данные нашего лог-файла по id случая и дате событий для каждого из id (так же необходимо найти список уникальных id, для дальнейшей работы):
Далее сформируем из наших данных цепочки событий, как показано на рисунке ниже:
Для дальнейшей работы необходимо сформировать список уникальных цепочек событий, применив метод drop_duplicates, в качестве уникальных значений для subset указав первое и второе событие.
Далее, определим количество переходов между нашими событиями:
Так же при анализе графов событий, довольно часто необходимо узнать среднюю продолжительность времени, прошедшего между двумя действиями, для чего необходимо запустить следующий код:
С помощью метода apply мы можем применить указанную функцию to_days, к элементам из указанного столбца (в данном случае преобразуем данные столбца time_delta из секунд в дни).
Сформируем итоговый DataFrame объединив все наши данные с помощью метода merge, в качестве ключей для объединения будем использовать наши «цепочки».
Из полученного DataFrame формируем js-файл с двумя переменными:
Итоговый js-файл будет содержать переменные:
Далее, полученный js-файл будет использоваться для построения графа в будущем веб-приложении. Приступим к этапу работы с Dracula.
Dracula.js – это набор инструментов для отображения и компоновки интерактивных связанных графов и сетей, а также различных связанных алгоритмов из области теории графов. Название библиотеки навеяно игрой слов – Граф Дракула (Dracula Graph Library).
Cоздадим html-файл со структурой, указанной ниже:
Методы, необходимые для формирования графа и его отображения на рабочей области, будут храниться в файле graph_maker.js.
Для отрисовки графа задаём функцию, которая будет выполняться при загрузке страницы в браузере (window.onload)
Ширина и высота рабочей области в этом примере задается исходя из ширины и высоты страницы в браузере.
r.rect задает свойства прямоугольной области, в которой будет храниться информация о событии (размер, текст внутри области, цвет заливки и т.д).
В цикле перебираем элементы из списка json1 и создаём вершины нашего графа, используя функцию addNode
Перебираем элементы из переменной json2, соединяем ребрами вершины графа, согласно цепочкам событий и указываем информацию о них (количество переходов, среднее время переходов)
Инициализируем рабочую область, на которой будет нарисован наш граф и задаём для нее параметры
Открыв наш html-файл в браузере, мы сможем увидеть результат:
Стоит отметить, что изображенные на холсте объекты поддерживают технологию «Drag-and-drop», что позволяет изменять вид полученного графа в реальном времени. Также код в файле graph_maker.js может быть изменён в зависимости от требований к представлению процесса, при этом формирование нового графа будет произведено сразу после обновления страницы браузера.
В итоге у нас получилось разработать приложение, после работы которого может быть сформирован набор скриптов, которые можно переслать профильному сотруднику для просмотра и анализа, не задумываясь о средствах просмотра на его компьютере.