728x90

간만의 theory에서 벗어난 포스팅. theory 글을 한 편 쓰고 나면 공부한 것 같아서 힘이 쭉 빠진다. 

 

 XES 파일은 프로세스 마이닝 로그들이 표현되는 가장 기본적인 포맷이다. 하지만 분석해야 할 데이터는 XES 파일 형식으로 표현되어 있지 않은 경우가 많다. 이런 경우에, 두 가지 해결책이 있을 것이다. 데이터 자체를 XES 형태로 바꾸어 주는 것. 혹은 해당 데이터 형식의 import를 툴에서 지원해주는 경우. 앞의 해결책은 여간 귀찮은 일이 아닐 수 없다. 그래서 PM4Py는 이 귀찮음을 해결해주기 위해 CSV의 Import를 지원한다. 이번 포스팅에서는, CSV 파일의 PM4Py import하는 방법과 함께 이를 log로 변환하는 방법에 대해 알아볼 것이다. 또한 pandas dataframe 형태를 어떻게 log로 바꿀 수 있는지 또한 알아볼 것이다. 

 

* 이 포스팅은, pm4py의 설치가 완료되어 있고, 기본적인 파이썬 문법을 알고 있다는 가정 하에 진행된다.

 

2019/05/09 - [Tools/pm4py] - PM4Py 소개 및 설치 방법 (파이썬으로 프로세스 마이닝 하기)

 

PM4Py 소개 및 설치 방법 (파이썬으로 프로세스 마이닝 하기)

PM4Py 소개 PM4Py는 event log의 import/export, Petri net의 생성과 import/export, Process Discovery (event log로부터 프로세스 모델을 도출하는 것), Conformance Checking (event log가 프로세스 모델에, 혹..

process-mining.tistory.com

CSV 파일 Import 하기

각자의 파이썬 IDE를 켠다. 나는 파이참을 사용했다.

 

1. 다음 코드를 입력한다.

import os
from pm4py.objects.log.importer.csv import factory as csv_importer

event_stream = csv_importer.import_event_stream(os.path.join("tests", "input_data", "running-example.csv"))

for event in event_stream:
    print(event)

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

 

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

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

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

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

 

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

import os
from pm4py.objects.log.importer.csv import factory as csv_importer

event_stream = csv_importer.import_event_stream(os.path.join("tests", "import_test", "receipt.csv"))

for event in event_stream:
    print(event)

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

CSV log 사용하기

 event stream 형태로 저장된 csv 파일을 로그로 사용하려면, 이를 한 번 더 로그로 만들어주는 작업이 필요하다.

 

0. csv 파일의 case id가 case:concept:name으로 되어 있는지 확인하고, 이것이 다른 경우 case id의 컬럼명(header)을 case:concept:name으로 바꾸어 준다.

 

1. 다음 코드를 입력한다. (간단히 trace별로 한 줄씩 띄워서 print하도록 했다.)

import os
from pm4py.objects.log.importer.csv import factory as csv_importer
from pm4py.objects.conversion.log import factory as conversion_factory

event_stream = csv_importer.import_event_stream(os.path.join("tests", "import_test", "receipt.csv"))
log = conversion_factory.apply(event_stream)

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

 

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

 이제 이 log를 활용해서 process discovery 등의 다양한 프로세스마이닝을 할 수 있다.

 

pandas dataframe을 log로 변환하기

 데이터 분석을 하다 보면, csv 파일을 pandas dataframe으로 받아 와서 사용하는 경우가 많다. csv 파일을 한 번 더 import하지 않고, dataframe으로부터 바로 log로 변환할 수 있다면 편리할 것이다. pm4py는 이러한 기능을 제공한다.

 

1. 다음 코드를 입력한다.

import os
from pm4py.objects.log.adapters.pandas import csv_import_adapter
from pm4py.objects.conversion.log import factory as conversion_factory

dataframe = csv_import_adapter.import_dataframe_from_path(os.path.join("tests", "input_data", "running-example.csv"), sep=",") #필요한 파일 경로 입력
log = conversion_factory.apply(dataframe) #dataframe을 log로 받아옴

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

2. dataframe을 log로 바로 받아온 모습을 볼 수 있다.

 

 이번 포스팅에서는 csv 파일을 import하고, 이 csv 파일의 event stream과 더불어 pandas dataframe을 log 형태로 변환하는 방법에 대해 알아 보았다. 이렇게 pm4py가 csv 파일을 dataframe 형태로 저장해 pandas를 활용하여 전처리 등을 진행한 후에 log로 바로 변환하여 프로세스 마이닝으로 활용하는 것을 가능하게 한 것이다! 

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