本节用于介绍pm4py中的转换函数,包括日志、事件流、数据块的转换、Petei网、流程树、BPMN的转换、可达图、面向对象日志等。
1.函数概述
本次主要介绍Pm4py中一些常见的转换函数,总览如下表:
函数名 | 说明 |
convert_log_to_networkx(log[,include_df,…]) | 将事件日志对象转换为NetworkX DiGraph对象。 |
convert_log_to_ocel(log[,activity_column,…]) | 将事件日志转换为具有一个或多个对象类型的以对象为中心的事件日志。 |
convert_ocel_to_networkx(ocel[, variant]) | 将OCEL转换为NetworkX DiGraph对象。 |
convert_petri_net_to_networkx(net, im, fm) | 将Petri网转换为NetworkX DiGraph。 |
convert_petri_net_type(net, im, fm[, type]) | 更改Petri网(内部)类型 |
convert_to_bpmn(*args) | 将对象转换为BPMN关系图。 |
convert_to_dataframe(obj, **kwargs) | 将日志对象转换为数据帧 |
convert_to_event_log(obj[, case_id_key]) | 将DataFrame/EventStream对象转换为事件日志对象 |
convert_to_event_stream(obj[, case_id_key]) | 将日志对象转换为事件流 |
convert_to_petri_net(*args) | 将输入模型转换为(可接受的)Petri网。 |
convert_to_process_tree(*args) | 将输入模型转换为流程树 |
2.函数方法介绍
2.1 转换为事件日志
pm4py.convert.convert_to_event_log(obj: Union[DataFrame, EventStream], case_id_key: str = 'case:concept:name', **kwargs) → EventLog
说明:将一个DataFrame/EventStream转换为一个事件日志对象输入参数:
obj – 数据流或者事件流对象;
case_id_key (
str
) – 案例识别属性;返回对象:
事件日志
示例代码:
import pandas as pd
import pm4py
dataframe = pm4py.read_csv("tests/input_data/running-example.csv")
dataframe = pm4py.format_dataframe(dataframe, case_id_column='case:concept:name', activity_column='concept:name', timestamp_column='time:timestamp')
log = pm4py.convert_to_event_log(dataframe)
2.2 转换为事件流
pm4py.convert.convert_to_event_stream(obj: Union[EventLog, DataFrame], case_id_key: str = 'case:concept:name', **kwargs) → EventStream[source]
说明:将事件日志格式转化为事件流输入参数:
obj – 数据流或者事件流对象;
case_id_key (
str
) – 案例识别属性;返回对象:
事件流
示例代码:
import pm4py
log = pm4py.read_xes("tests/input_data/running-example.xes")
event_stream = pm4py.convert_to_event_stream(log)
2.3 转化为DataFrame
pm4py.convert.convert_to_dataframe(obj: Union[EventStream, EventLog], **kwargs) → DataFrame
说明:将事件日志格式转化为DataFrame输入参数:
obj – 数据流或者事件流对象;;输出:
pd.DataFrame
示例代码:
import pm4py
log = pm4py.read_xes("tests/input_data/running-example.xes")
dataframe = pm4py.convert_to_dataframe(log)
2.4 转换为BPMN
pm4py.convert.convert_to_bpmn(*args: Union[Tuple[PetriNet, Marking, Marking], ProcessTree]) → BPMN
说明:将对象转换为BPMN关系图。作为输入,可以提供Petri网(具有相应的初始和最终标记)或流程树。流程树总是可以转换为BPMN模型,从而保证了结果对象的质量。对于Petri网,对流的质量在很大程度上取决于所提供的网络(例如,健全的WF网络可能产生合理的BPMN模型)输入参数:
args –带有初始和结束标记的petri网或者流程树
返回类型:
BPMN
示例代码:
import pm4py
# import a Petri net from a file
net, im, fm = pm4py.read_pnml("tests/input_data/running-example.pnml")
bpmn_graph = pm4py.convert_to_bpmn(net, im, fm)
2.5 转换为Petri网
pm4py.convert.convert_to_petri_net(*args: Union[BPMN, ProcessTree, HeuristicsNet, dict]) → Tuple[PetriNet, Marking, Marking]
说明:将输入模型转换为(可接受的)Petri网。输入对象可以是流程树、BPMN模型或启发式网络。输出是一个三元组,包含Petri网以及初始和最终标记。只有当标记可以从输入模型中合理地导出时,才会返回标记。输入参数:
args – 流程树或者BPMN
返回类型:
Tuple[PetriNet, Marking, Marking]
示例代码:
import pm4py
# imports a process tree from a PTML file
process_tree = pm4py.read_ptml("tests/input_data/running-example.ptml")
net, im, fm = pm4py.convert_to_petri_net(process_tree)
2.6 转化为流程树
pm4py.convert.convert_to_process_tree(*args: Union[Tuple[PetriNet, Marking, Marking], BPMN]) → ProcessTree
说明:将输入模型转换为流程树。输入模型可以是Petri网(标记)或BPMN模型。对于这两种输入类型,转换都不能保证有效,因此,方法的调用可能会产生异常。输入参数:
args – petri net (along with initial and final marking) or BPMN
返回类型:
流程树
示例代码:
import pm4py
# imports a BPMN file
bpmn_graph = pm4py.read_bpmn("tests/input_data/running-example.bpmn")
# converts the BPMN to a process tree (through intermediate conversion to a Petri net)
process_tree = pm4py.convert_to_process_tree(bpmn_graph)
2.7 转化为可达图
pm4py.convert.convert_to_reachability_graph(*args: Union[Tuple[PetriNet, Marking, Marking], BPMN, ProcessTree]) → TransitionSystem
说明:将输入模型转换为可达性图(转换系统)。输入模型可以是Petri网(带标记)、BPMN模型或流程树。输出是模型的状态空间(即可达性图),表示为TransitionSystem对象
输入参数:
args – 带有初始和结束标记的petri网或流程树或BPMN
返回类型:变迁系统
示例代码:
import pm4py
# reads a Petri net from a file
net, im, fm = pm4py.read_pnml("tests/input_data/running-example.pnml")
# converts it to reachability graph
reach_graph = pm4py.convert_to_reachability_graph(net, im, fm)
2.8 转化为面向对象的日志
pm4py.convert.convert_log_to_ocel(log: Union[EventLog, EventStream, DataFrame], activity_column: str = 'concept:name', timestamp_column: str = 'time:timestamp', object_types: Optional[Collection[str]] = None, obj_separator: str = ' AND ', additional_event_attributes: Optional[Collection[str]] = None) → OCEL
说明:将事件日志转换为具有一个或多个对象类型的以对象为中心的事件日志。
输入参数:
og_obj – 日志对象
activity_column (
str
) – 活动列timestamp_column (
str
) –时间戳列object_types – list of columns to consider as object types
obj_separator (
str
) – separator between different objects in the same columnadditional_event_attributes – 额外的事件属性
返回类型:OCEL
2.9 将事件日志对象转换为NetworkX DiGraph对象
pm4py.convert.convert_to_reachability_graph(*args: Union[Tuple[PetriNet, Marking, Marking], BPMN, ProcessTree]) → TransitionSystem
说明:将事件日志对象转换为NetworkX DiGraph对象。图的节点是事件、案例(可能还有日志的属性)。边缘是:-将每个事件连接到相应的事例(BELONGS_to类型)-将每个活动连接到直接跟随的事例(DF类型,如果启用)-将每一个事例/事件连接到给定的属性值(attribute_EDGE类型)
输入参数:
log–日志对象(EventLog、EventStream、Pandas数据帧)
include_df(bool)–在图中包含直接跟随的图关系(bool
case_id_attribute–指定案例级别的哪个属性应被视为案例id(str)
other_case_attributes_as_nodes–指定事例级别的哪些属性应作为节点(事例ID除外)插入到图中(列表,默认为空)
event_attributes_as_nodes–指定事件级别的哪些属性应作为节点插入到图中(列表,默认为空)返回类型:
nx.DiGraph
2.10 将Petri网转换为NetworkX DiGraph
pm4py.convert.convert_petri_net_to_networkx(net: PetriNet, im: Marking, fm: Marking) → DiGraph
说明:将Petri网转换为NetworkX DiGraph。每个库所和变迁都对应于图中的一个节点。
输入参数:
net– Petri net
im – initial marking
fm – final marking
返回类型:
nx.DiGraph
2.11 更改Petri网(内部)类型
pm4py.convert.convert_petri_net_type(net: PetriNet, im: Marking, fm: Marking, type: str = 'classic') → Tuple[PetriNet, Marking, Marking]
说明:更改Petri网(内部)类型。
输入参数:
net– Petri net
im – initial marking
fm – final marking
type (str) – internal type (classic, reset, inhibitor, reset_inhibitor)
返回类型:
Tuple[PetriNet, Marking, Marking]
如需了解更多,欢迎加入流程挖掘交流群QQ:671290481.