728x90

 PM4Py는 CSV log 파일을 효율적이고 빠르게 이용하기 위하여 pandas를 이용한다. 이번 포스팅에서는 이렇게 CSV 파일을 판다스 dataframe으로 import하는 방법과 함께, 이 dataframe을 프로세스 마이닝에 적합하게 전처리하는 방법에 대해 간단하게 알아보겠다. 이번 포스팅은 공식 홈페이지 번역과 함께, 개인적으로 이렇게 하면 더 편하겠다 싶은 부분을 추가하였음을 미리 알린다. 개인적인 견해가 들어간 포스팅이기 때문에, 이것이 절대적인 정답이 될 수 없음을 밝힌다. 

 

1. 우선, csv 이벤트 로그 파일을 데이터프레임으로 받아온다.

import os
from pm4py.objects.log.adapters.pandas import csv_import_adapter

input_file_path = os.path.join("input_data", "receipt.csv") #사용할 csv 파일
df = csv_import_adapter.import_dataframe_from_path_wo_timeconversion(input_file_path, sep=',', quotechar=None)

이 때, csv 파일의 크기가 너무 크다면 적당히 일부분만을 받아오기 위해 아래와 같이 nrows 파라미터를 사용한다.

import os
from pm4py.objects.log.adapters.pandas import csv_import_adapter

input_file_path = os.path.join("input_data", "receipt.csv") #사용할 csv 파일
df = csv_import_adapter.import_dataframe_from_path_wo_timeconversion(input_file_path, sep=',', quotechar=None, nrows=1000)

 

2. df의 caseid, activity name, timestamp 컬럼을 지정한다.

 대부분의 csv 형태의 이벤트 로그는 case id, activity name, timestamp 컬럼의 이름이 PM4Py가 원하는 형태대로 되어 있지 않을 것이다. 그렇기 때문에 이를 PM4Py가 원하는 형태대로 바꾸어 준다. 

df.rename(columns={'기존 case id 컬럼명': 'case:concept:name', '기존 activity name 컬럼명': 'concept:name',
'기존 timestamp 컬럼명': 'time:timestamp'}, inplace=True, axis='columns')

위 코드에서 기존 case id 컬럼명, 기존 activity name 컬럼명, 기존 timestamp 컬럼명에 각각 원래의 csv 파일 컬럼명을 넣어 주면 된다.

 

3. timestamp 컬럼을 가공한다.

 만약 timestamp 컬럼이 string 타입이라면, 이를 PM4Py 분석에서 적절하게 활용하기 위해 datetime 형태로 바꾸어 주어야 한다. 이를 위해 다음 코드를 실행한다.

TIMEST_COLUMNS = ["time:timestamp"]
TIMEST_FORMAT = "%Y-%m-%d %H:%M:%S" # 기존 df에서의 timestamp 컬럼의 데이터 형태

df = csv_import_adapter.convert_timestamp_columns_in_df(df, timest_columns=TIMEST_COLUMNS,
                                                               timest_format=TIMEST_FORMAT)

4. df가 제대로 가공되었는지 확인한다.

이 때 확인해야 할 점은 각 case id, activity name, timestamp 컬럼의 이름이 적절하게 변경되었는지, timestamp 컬럼의 datatype이 적절하게 바뀌었는지이다. 이의 확인을 위해 다음 코드를 입력한다.

print(df['concept:name'][0])
print(df['case:concept:name'][0])
print(df['time:timestamp'][0])
print(type(df['time:timestamp'][0]))

그 결과, 위의 세 줄이 에러 없이 출력되고 마지막 코드의 결과가 다음과 같이 나오면 성공이다.

<class 'pandas._libs.tslibs.timestamps.Timestamp'>

이제 이에 대해 다양한 PM4Py의 알고리즘 적용이 가능하다.

 

 이번 포스팅에서는 pm4py에서 csv를 import할 때 pandas dataframe을 이용하는 방법과 함께 이에 대한 간단한 전처리 방법들에 대해 알아보았다. 이외에도 필요 없는 컬럼, 덜 중요한 컬럼을 제거하거나 missing value들을 채워 넣는 등의 데이터 마이닝의 기본적인 전처리부터 PM4Py에서의 dataframe에 대한 필터링 등 다양한 전처리가 가능하다. 이에 대해서는 다음 포스팅에서 알아보겠다. 

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