본문 바로가기
IT/pm4py (파이썬 프로세스마이닝)

파이썬(python)으로 구현하는 프로세스 마이닝 (process mining) with pm4py 2.7.0

by 자바라머신러닝 2023. 3. 27.

세상 모든 일은 절차를 갖고 시간순으로 진행됩니다. 여기서 핵심 키워드는 "일", "절차", "시간"입니다. 소위 말하는 프로세스는  "일", "절차", "시간" 속성을 갖고 있으며, 이 3가지 요소를 가지고 프로세스의 반복, 병목, 지연을 찾아내는 기법이 프로세스 마이닝입니다. 그리고 이 프로세스 마이닝을 파이썬으로 구현가능하게 하는 라이브러리가 "pm4py"입니다.
 

프로세스 마이닝 각종 시각화 결과
프로세스 마이닝 각종 시각화 결과

 

설치 : pm4py + Graphviz

필요한 라이브러리는 pm4py 이며 다른 라이브러리와 똑같이 pip instal pm4py 로 설치 가능합니다. 그리고 알고리즘 도식화를 위해 Graphviz를 별도로 다운로드하고 설치합니다. Graphviz설치 시 주의점은 PATH 지정 및 python 재실행합니다.
 

pip show pm4py 로 확인한 버전
pip show pm4py 로 확인한 버전

  • pip install pm4py
    • 다른 라이브러리와 동일한 방법으로 설치
    • 현재 필자의 버전은 2.7.0 (23년 3월 27일 기준)
  • Graphviz 다운로드 및 설치
    • 다운로드 경로 : https://graphviz.org/download
    • 가급적 낮은 버전 
    •  32 또는 64 비트 확인 
    • 설치 시 PATH 자동설정 옵션 선택 
    • python (vs 코드 또는 jupyter 재실행-pc 재부팅 불필요)

설치 시 PATH 자동설정 옵션 선택
설치 시 PATH 자동설정 옵션 선택

예제 실행 위한 과정

필자는 jupyter notebook에서 코드를 실행하였습니다.
 
프로세스 마이닝을 파이썬으로 실행하기 위한 과정은 최소 아래 5단계입니다. 여기서 xes 개념이 있습니다. 간단히 요약하면 xes는 xml 형태이며, 프로세스 마이닝 분석을 위해 "일", "절차", "시간" 등을 입력 포맷에 맞춘 데이터 형태입니다.

 
  1. 각종 라이브러리리 import
  2. csv 파일 읽기
  3. xes 포맷 변경
  4. xes 필터링 (필요시)
  5. 각종 알고리즘 도식화
    • Graphviz 설치되어 있어야 함 (위 내용 참조)
1. 각종 라이브러 import

최근에 pm4py 버전이 변경되면서 없어진 모듈이 있습니다. 아래 코드는 23년 3월 27일 실행한 결과입니다.
 
 

import statistics as stat
import pm4py as pm
import matplotlib.pyplot as plt
import pandas as pd
import datetime as dt

from pm4py.objects.log.importer.xes import importer
from pm4py.objects.conversion.log.converter import to_data_frame
from pm4py.algo.filtering.pandas.attributes import attributes_filter
from pm4py.objects.log.util import interval_lifecycle
from pm4py.statistics.sojourn_time.log import get as soj_time_get
from pm4py.visualization.graphs import visualizer as graphs_visualizer
from pm4py.util import constants
from pm4py.algo.discovery.alpha import algorithm as alpha_miner
from pm4py.algo.discovery.inductive import algorithm as inductive_miner
from pm4py.algo.discovery.dfg import algorithm as dfg_discovery
from pm4py.visualization.dfg import visualizer as dfg_visualization
from pm4py.visualization.petri_net import visualizer as pn_visualizer
from pm4py.visualization.decisiontree import visualizer as tree_visualizer
from pm4py.algo.decision_mining import algorithm as decision_mining

 

2. csv 파일 읽기

필자는 xes 파일을 직접 읽지 않고 흔하디 흔한 csv 파일에서 데이터 분석을 시작합니다. 샘플 csv 파일은 위 과정을 참조하세요. 필자는 running-example.csv을 jupyter 실행 폴더에 저장하여 아래 path에 별도 경로 지정하지 않았습니다. 
 
 

file_path = 'running-example.csv'
event_log_csv = pd.read_csv(file_path, sep=';')
event_log_csv

 
 
실행결과는 아래와 같이 csv 파일 내용을 데이터 프레임 형태로 출력됩니다. 필드명은 case_id, activity, timestamp, costs, resource 5개로 이루어져 있습니다. case_id 가 "일", activity 가 "절차", timestamp 가 "시간"이며, 이 3가지는 기본적으로 존재해야 합니다.

running-example.csv 데이터 프레임 결과
running-example.csv 데이터 프레임 결과

2. xes 포맷 변경

csv 파일을 xes 포맷으로 변경해야 프로세스 마이닝 분석이 가능합니다. "format_dataframe" 메소에 "일"에 해당하는 case_id, "절차"에 해당하는 activity, "시간"에 해당하는 timestamp를 설정값으로 명시합니다. 아래 copy()를 사용한 것은 csv로 읽은 원본 데이터 프레임에 새로운 필드가 생성되어 원본 위지를 위함입니다. 굳이 실행하지 않아도 큰 지장은 없으나 csv 원본과 xes 변환을 비교하기 위해 사용하였습니다. 주의할 점은 pm4py 3.0에서는 format_dataframe 함수가 폐기된다고 합니다.
 
 

event_log_csv_copied = event_log_csv.copy()
event_log_xes = pm.format_dataframe(event_log_csv_copied, case_id='case_id',activity_key='activity', timestamp_key='timestamp')
event_log_xes

 
 
실행결과는 다음과 같으며, 기존  csv 파일 데이터 프레임에 5가지 필드가 추가됩니다. 5개 필드가 추가되는데 프로세스 마이닝 분석을 위한 생성 합니다.

xes 포맷 변경후 데이터 프레임
xes 포맷 변경후 데이터 프레임

3. 필터링 예시 : 추후 포스팅

 
필터링은 필수 과정은 아니므로 별도 포스팅 하겠습니다. 파이썬의 데이터 filttering과 같은 기능을 합니다.
 

4. 각종 분석 결과 시각화

계속 반복되지만, 사전에 Graphviz 설치되어 있어야 합니다. 아래 예시는 예시 코드 + 시각화 결과 순으로 소개합니다.
 
 

# BPMN 모델
process_tree = pm.discover_process_tree_inductive(event_log_xes)
bpmn_model = pm.convert_to_bpmn(process_tree)
pm.view_bpmn(bpmn_model)

bpms 모델 시각화
bpms 모델 시각화

 
 

# Process Tree 모델
process_tree = pm.discover_process_tree_inductive(event_log_xes)
pm.view_process_tree(process_tree)

Process Tree 모델
Process Tree 모델

 
 

# Process Map 모델
dfg, start_activities, end_activities = pm.discover_dfg(event_log_xes)
pm.view_dfg(dfg, start_activities, end_activities)

Process Map 모델
Process Map 모델

 
 

# Heuristics Miner 모델
map = pm.discover_heuristics_net(event_log_xes)
pm.view_heuristics_net(map)

Heuristics Miner 모델
Heuristics Miner 모델

코드 종합

아래 코드에는 데이터 탐색을 위한  플로팅 및 필터링 까지도 포함되어 있습니다.
 

00. pm4py simple
0.43MB

댓글