Время прочтения: 3 мин.

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

  1. Плохо структурированные данные
  2. Непонимание реального процесса
  3. Отсутствие должных it компетенций для работы с данными

Зачастую, этим заняты глубокопогруженные в процесс аналитики, затрачивая на это много времени. Современные инструменты способны облегчить им работу и обеспечить надежность выводов. Одним из таких инструментов является набор алгоритмов Process Mining. Направление, имеющее некоторую популярность в кругах аналитиков, реализовано на различных платформах. В этой статье мы рассмотрим, как просто построить граф процесса на python, используя библиотеку pm4py.

Предполагается, что на Вашем устройстве уже установлено соответствующее виртуальное окружение. О том, как это сделать, можете прочитать тут.

В первую очередь необходимо из данных извлечь три составляющие:

  • case:concept:name. Порядковый номер одного экземпляра Вашего процесса.
  • time:timestamp. Время и дата события в формате timestamp.
  • concept:name. Id события в рамках одного кейса.

Пример будет выглядеть примерно так:

# Импортируем пакет pandas
import pandas as pd
# Загружаем лог
pData = pd.read_csv('test_2012.csv', sep=';') 
# Визуализируем первые пять строк файла
pData.head()

Вам нужно перевести дату и время в формат timestamp что бы получилось примерно следующее.

  time:timestamp EventID case:concept:name
0 01.01.2000 13:00 1 Клиент пришел
1 01.01.2000 13:05 1 Клиент подал заявку
2 01.01.2000 13:06 2 Клиент пришел
3 01.01.2000 13:07 1 Клиент получил решение
4 01.01.2000 13:10 3 Клиент пришел

Далее необходимо преобразовать дату:

# Преобразование поля time:timestamp из строки в datetime
pData['time:timestamp'] = pd.to_datetime(pData['time:timestamp'])  
# Преобразование поля time:timestamp в timestamp float
pData['time:timestamp'] = pData['time:timestamp'].astype(np.int64) // 10**9
# Преобразование поля time:timestamp в int
pData['time:timestamp'] = pData['time:timestamp'].astype(np.int)
pData.head() 

После преобразований таблица должна выглядеть следующим образом:

  time:timestamp EventID case:concept:name
0 946731600 1 Клиент пришел
1 946731900 1 Клиент подал заявку
2 946731960 2 Клиент пришел
3 946732020 1 Клиент получил решение
4 946732200 3 Клиент пришел

Следующим шагом необходимо отсортировать Ваши данные по времени. Это необходимо для корректной работы алгоритмов. Если в Ваши логи не отсортированы, сделать это можно так:

pData.sort_values('time:timestamp')

Теперь данные готовы для подачи в пакет pm4py.

from pm4py.objects.conversion.log import factory as log_conv
log = log_conv.apply(pData)

После того как лог сформирован – можно переходить к формированию графа процесса. Ниже будет приведен пример эвристического майнера. Полый список и описание алгоритмов можете посмотреть тут.

from pm4py.algo.discovery.heuristics import factory as heuristics_miner
heu_net = heuristics_miner.apply_heu(log) 

После формирования графа, последнее что остается – визуализировать его. Для этого нам потребуется утилита GraphViz.

from pm4py.visualization.heuristics_net import factory as hn_vis_factory
gviz = hn_vis_factory.apply(heu_net)
hn_vis_factory.view(gviz)

Вот и все. Граф готов.