728x90

XES 파일은 프로세스 마이닝 로그들이 표현되는 가장 기본적인 포맷이다. 이 XES 파일을 불러 오는 것이 프로세스 마이닝을 시작하는 가장 처음의 단계라고 할 수 있다. 이번 포스팅에서는, 이 XES 파일을 PM4Py에 import하는 방법을 알아볼 것이다.

 

* 이 포스팅은, 기본적인 파이썬 문법을 알고 있다는 가정 하에 진행된다.

 

XES 파일 Import 하기

사실 이것은 정말 쉽다. 우선, 각자의 파이썬 IDE를 켠다. 나는 파이참을 사용했다.

 

1. 다음 코드를 입력해 본다.

 

from pm4py.objects.log.importer.xes import factory as xes_import_factory
import os

input_file_path = os.path.join("tests", "input_data", "running-example.xes")
log = xes_import_factory.apply(input_file_path)

print(log)

2. 다음과 같은 결과가 나온다면 성공이다.

 

그렇다면 여기서, 나만의 XES 파일을 import하려면 어떻게 해야 할까?

답은 간단하다. os.path.join()의 괄호 안 부분을 자신이 원하는 경로와 파일명으로 바꾸어 주면 된다. 한 번 더 예를 들어서 설명해보겠다.

1. pm4py-sorce/tests 폴더 아래에 자신만의 폴더를 하나 만든다.

 

2. 그 폴더 안에 원하는 XES 파일을 넣는다.

 

3. 자신의 IDE에서 원하는 파일 경로를 os.path.join의 괄호 안에 입력해준다.

 

from pm4py.objects.log.importer.xes import factory as xes_import_factory
import os

input_file_path = os.path.join("tests", "import_test", "receipt.xes")
log = xes_import_factory.apply(input_file_path)

print(log)

4. 위의 예시처럼 결과가 잘 나오는 것을 볼 수 있다.

 

XES log 사용하기

기본적으로, XES log는 다음과 같은 구조를 가진다.

  • log[0]은 log 안에서의 첫 번째 trace를 의미하고, log[1]은 log 안에서의 두 번째 trace를 의미한다.
  • log[0][0]은 첫 번째 trace 내에서의 첫 번째 event를, log[0][1]은 첫 번째 trace 내에서의 두 번째 event를 의미한다.

그렇다면, log[5][6]은 무엇을 의미하는 것일까? 바로 log 안에서의 6번째 trace의 7번째 event를 의미한다.

 

이를 이용하여 로그를 한 눈에 보고 싶다면, 다음 코드를 사용할 수 있다. 

from pm4py.objects.log.importer.xes import factory as xes_import_factory
import os

input_file_path = os.path.join("tests", "input_data", "running-example.xes")
log = xes_import_factory.apply(input_file_path)

for i in range(len(log)): #log의 길이만큼 (trace의 개수만큼) 반복
    for j in range(len(log[i])): #각 trace의 길이만큼 (event의 개수만큼) 반복
        print(log[i][j])
    print("    ")

다음과 같은 결과가 나왔다면 성공이다.

위 코드를 다르게 쓰면, 이렇게도 쓸 수 있다. 아래의 형태로 로그 내에서 반복문을 사용하는 것은 정말 자주 쓰이는 방법이다. 이 코드를 돌려도, 위와 같은 결과가 나옴을 알 수 있다.

from pm4py.objects.log.importer.xes import factory as xes_import_factory
import os

input_file_path = os.path.join("tests", "input_data", "running-example.xes")
log = xes_import_factory.apply(input_file_path)


for trace in log:
    for event in trace:
        print(event)
    print("   ")

이렇게 event에 속한 값 전체를 보는 것이 아니라, event 내의 특정 값에만 접근도 가능하다. 그것은 다음과 같은 코드를 사용하면 된다. 이 경우에는 activity의 이름을 print해 보았는데, 다른 값(timestamp, resource 등)에도 같은 방법으로 접근이 가능하다. 

for trace in log:
    for event in trace:
        print(event['concept:name']) #concept:name 부분을 다른 것으로 바꾸면 다른 값에 접근 가능 (timestamp: time:timestamp / resource: org:resource 등)
    print("   ")

 

References

1. PM4Py 공식 홈페이지: pm4py.pads.rwth-aachen.de

300x250
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기