本节用于介绍pm4py中的统计函数,包括统计轨迹变体、案例持续时间、案例到达时间等。
1.函数概述
本次主要介绍Pm4py中一些常见的统计函数,总览如下表:
函数名 | 说明 |
pm4py.stats.get_start_activities() | 从事件日志中获取开始活动。 |
pm4py.stats.get_end_activities() | 从事件日志中获取结束活动。 |
pm4py.stats.get_event_attributes() | 获取事件的事件级的属性 |
pm4py.stats.get_trace_attributes() | 获取事件轨迹级别的属性 |
pm4py.stats.get_event_attribute_values() | 获取事件中某个属性的值 |
pm4py.stats.get_trace_attribute_values() | 获取轨迹中的属性值 |
pm4py.stats.get_case_arrival_average() | 获取事件的案件到达时间列表 |
pm4py.stats.get_cycle_time() | 获取事件的周期时间 |
pm4py.stats.get_all_case_durations() | 获取事件的案件持续时间列表 |
pm4py.stats.get_case_duration() | 获取日志中特定案例的案例持续时间。 |
pm4py.stats.get_stochastic_language() | 获取事件日志的随机语言 |
2.函数方法介绍
2.1 统计开始活动
pm4py.stats.get_start_activities(log: EventLog | DataFrame, activity_key: str = 'concept:name', timestamp_key: str = 'time:timestamp', case_id_key: str = 'case:concept:name') → Dict[str, int]
说明:返回日志对象的开始活动输入参数:
log–log对象
activity_key(str)–要用于活动的属性
timestamp_key(str)–用于时间戳的属性
case_id_key(str)–要用作案例标识符的属性输出参数:
Dict[str, int]
示例代码:
import pm4py
start_activities = pm4py.get_start_activities(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
2.2 统计日志对象的结束活动
pm4py.stats.get_end_activities(log: EventLog | DataFrame, activity_key: str = 'concept:name', timestamp_key: str = 'time:timestamp', case_id_key: str = 'case:concept:name') → Dict[str, int]
说明:返回日志对象的结束活动
输入参数:
log–log对象
activity_key(str)–要用于活动的属性
timestamp_key(str)–用于时间戳的属性
case_id_key(str)–要用作案例标识符的属性输出参数:
Dict[str, int]
示例代码:
import pm4py
end_activities = pm4py.get_end_activities(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
2.3 统计事件属性
pm4py.stats.get_event_attributes(log: EventLog | DataFrame) → List[str]
说明:统计事件属性输入参数:
log–log对象现可视化效果)
输出参数:List[str]
示例代码:
import pm4py
event_attributes = pm4py.get_event_attributes(dataframe)
2.4 统计轨迹属性
pm4py.stats.get_trace_attributes(log: EventLog | DataFrame) → List[str]
说明:统计轨迹属性输入参数:
log–log对象现可视化效果)
输出参数:List[str]
示例代码:
import pm4py
trace_attributes = pm4py.get_trace_attributes(dataframe)
2.5 统计事件属性值
pm4py.stats.get_event_attribute_values(log: EventLog | DataFrame, attribute: str, count_once_per_case=False, case_id_key: str = 'case:concept:name') → Dict[str, int]
说明:统计事件属性值输入参数:
log–log对象
attribute(str)–attribute
count_once_per_case(bool)–如果为True,则只考虑案例中给定属性值的一次出现(如果有多个事件共享同一属性值,则只计算一次出现)
case_id_key(str)–要用作案例标识符的属性
输出类型:
Dict[str,int]
示例代码:
import pm4py
activities = pm4py.get_event_attribute_values(dataframe, 'concept:name', case_id_key='case:concept:name')
2.6 统计指定轨迹属性的值
pm4py.stats.get_trace_attribute_values(log: EventLog | DataFrame, attribute: str, case_id_key: str = 'case:concept:name') → Dict[str, int]
说明:返回指定跟踪属性的值
输入参数:
log–log对象
attribute(str)–属性
case_id_key(str)–要用作案例标识符的属性
输出类型:
Dict[str,int]
示例代码:
import pm4py
tr_attr_values = pm4py.get_trace_attribute_values(dataframe, 'case:attribute', case_id_key='case:concept:name')
2.7 统计日志变体
pm4py.stats.get_variants(log: EventLog | DataFrame, activity_key: str = 'concept:name', timestamp_key: str = 'time:timestamp', case_id_key: str = 'case:concept:name') → Dict[Tuple[str], List[Trace]]
说明:从日志中获取变体
输入参数:
log–事件日志
activity_key(str)–要用于活动的属性
timestamp_key(str)–用于时间戳的属性
case_id_key(str)–要用作案例标识符的属性
输出类型:
Dict[Tuple[str],List[Trace]]
示例代码:
import pm4py
variants = pm4py.get_variants(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
2.8 统计日志变体2
pm4py.stats.get_variants_as_tuples(log: EventLog | DataFrame, activity_key: str = 'concept:name', timestamp_key: str = 'time:timestamp', case_id_key: str = 'case:concept:name') → Dict[Tuple[str], List[Trace]]
说明:从日志中获取变体(其中键是元组而不是字符串)
输入参数:
log–事件日志
activity_key(str)–要用于活动的属性
timestamp_key(str)–用于时间戳的属性
case_id_key(str)–要用作案例标识符的属性
输出类型:
Dict[Tuple[str],List[Trace]]
示例代码:
import pm4py
variants = pm4py.get_variants_as_tuples(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
2.9 统计活动的自距离
pm4py.stats.get_minimum_self_distances(log: EventLog | DataFrame, activity_key: str = 'concept:name', timestamp_key: str = 'time:timestamp', case_id_key: str = 'case:concept:name') → Dict[str, int]
说明:该算法计算在事件日志中观察到的每个活动的最小自身距离。a在<a>中的自距离为无穷大,a在<a、a>中为0,在<a,b、a>为1,等等。最小自距离是事件日志中观察到的最小自距离值。
输入参数:
log–事件日志(pandas.DataFrame、EventLog或EventStream)
activity_key(str)–要用于活动的属性
timestamp_key(str)–用于时间戳的属性
case_id_key(str)–要用作案例标识符的属性
输出类型:
Dict[str,int]
示例代码:
import pm4py
msd = pm4py.get_minimum_self_distances(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')timestamp')
2.10 统计活动自距离见证人
pm4py.stats.get_minimum_self_distance_witnesses(log: EventLog | DataFrame, activity_key: str = 'concept:name', timestamp_key: str = 'time:timestamp', case_id_key: str = 'case:concept:name') → Dict[str, Set[str]]
说明:此函数导出最小自距离见证人。a在<a>中的自距离为无穷大,a在<a、a>中为0,在<a,b、a>为1,等等。最小自距离是事件日志中观察到的最小自距离值。“见证人”是见证自我距离最小的活动。例如,如果某个日志L中活动a的最小自距离是2,那么,如果轨迹<a,b,c,a>在日志L中,b和c是a的见证。
输入参数:
log–要使用的事件日志
activity_key(str)–要用于活动的属性
timestamp_key(str)–用于时间戳的属性
case_id_key(str)–要用作案例标识符的属性
输出类型:
Dict[str,Set[str]]
示例代码:
import pm4py
msd_wit = pm4py.get_minimum_self_distance_witnesses(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
2.11 统计案例到达时间
pm4py.stats.get_case_arrival_average(log: EventLog | DataFrame, activity_key: str = 'concept:name', timestamp_key: str = 'time:timestamp', case_id_key: str = 'case:concept:name') → float
说明:获取两个连续事例的开始时间之间的平均差值
输入参数:
log–log对象
activity_key(str)–要用于活动的属性
timestamp_key(str)–用于时间戳的属性
case_id_key(str)–要用作案例标识符的属性
返回类型:
float
示例代码:
import pm4py
case_arr_avg = pm4py.get_case_arrival_average(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
2.12 统计返工活动
pm4py.stats.get_rework_cases_per_activity(log: EventLog | DataFrame, activity_key: str = 'concept:name', timestamp_key: str = 'time:timestamp', case_id_key: str = 'case:concept:name') → Dict[str, int]
说明:找出日志中哪些活动发生了返工(该活动的轨迹中出现了多个)。输出是一个字典,将发生返工的案例数量与上述每个活动相关联。
输入参数:
log–log对象
activity_key(str)–要用于活动的属性
timestamp_key(str)–用于时间戳的属性
case_id_key(str)–要用作案例标识符的属性
返回类型:
Dict[str,int]
示例代码:
import pm4py
rework = pm4py.get_rework_cases_per_activity(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
2.13 统计日志的周期时间
pm4py.stats.get_cycle_time(log: EventLog | DataFrame, activity_key: str = 'concept:name', timestamp_key: str = 'time:timestamp', case_id_key: str = 'case:concept:name') → float
说明:计算事件日志的周期时间。
所遵循的定义是在中提出的定义:https://www.presentationeze.com/presentations/lean-manufacturing-just-in-time/lean-manufacturing-just-in-time-full-details/process-cycle-time-analysis/calculate-cycle-time/#:~:text=Cycle%20time%20%3D%20Average%20time%20between,is%2024%20minutes%20on%20average。
因此:周期时间=单位完成之间的平均时间。
网站上的例子:考虑一个制造厂,它每40小时生产100个产品。平均吞吐率为每0.4小时1台,即每24分钟1台。因此,周期时间平均为24分钟。
输入参数:
log–log对象
activity_key(str)–要用于活动的属性
timestamp_key(str)–用于时间戳的属性
case_id_key(str)–要用作案例标识符的属性
返回类型:
float
示例代码:
import pm4py
cycle_time = pm4py.get_cycle_time(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
2.14 统计案例的持续时间
pm4py.stats.get_all_case_durations(log: EventLog | DataFrame, business_hours: bool = False, business_hour_slots=[(25200, 61200), (111600, 147600), (198000, 234000), (284400, 320400), (370800, 406800)], activity_key: str = 'concept:name', timestamp_key: str = 'time:timestamp', case_id_key: str = 'case:concept:name') → List[float]
说明:获取事件日志中事例的持续时间
输入参数:
log–事件日志
business_hours(bool)–启用/禁用基于营业时间的计算(默认值:False)
business_hour_slots–公司的工作时间表,以元组列表的形式提供,其中每个元组表示一个工作时间段。一个槽,即一个元组,由一个开始时间和一个结束时间组成,以秒为单位,从周开始,例如[(7*60*60,17*60*60],((24+7)*60*60%,(24+12)*60=60),((24/13)*60*60,(24+17)*60*50],这意味着营业时间为周一07:00-17:00,周二07:00-12:00和13:00-17:00
activity_key(str)–要用于活动的属性
timestamp_key(str)–用于时间戳的属性
case_id_key(str)–要用作案例标识符的属性
返回类型:List[float]
示例代码:
import pm4py
case_durations = pm4py.get_all_case_durations(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
2.15 统计特定案例的持续时间
pm4py.stats.get_case_duration(log: EventLog | DataFrame, case_id: str, business_hours: bool = False, business_hour_slots=[(25200, 61200), (111600, 147600), (198000, 234000), (284400, 320400), (370800, 406800)], activity_key: str = 'concept:name', timestamp_key: str = 'time:timestamp', case_id_key: str | None = None) → float
说明:获取事件日志中特定事例的持续时间
输入参数:
log–事件日志
business_hours(bool)–启用/禁用基于营业时间的计算(默认值:False)
business_hour_slots–公司的工作时间表,以元组列表的形式提供,其中每个元组表示一个工作时间段。一个槽,即一个元组,由一个开始时间和一个结束时间组成,以秒为单位,从周开始,例如[(7*60*60,17*60*60],((24+7)*60*60%,(24+12)*60=60),((24/13)*60*60,(24+17)*60*50],这意味着营业时间为周一07:00-17:00,周二07:00-12:00和13:00-17:00
activity_key(str)–要用于活动的属性
timestamp_key(str)–用于时间戳的属性
case_id_key(str)–要用作案例标识符的属性
返回类型:List[float]
示例代码:
import pm4py
duration = pm4py.get_case_duration(dataframe, 'case 1', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
2.16 统计活动位置次数
pm4py.stats.get_activity_position_summary(log: EventLog | DataFrame, activity: str, activity_key: str = 'concept:name', timestamp_key: str = 'time:timestamp', case_id_key: str = 'case:concept:name') → Dict[int, int]
说明:给定一个事件日志,返回一个字典,其中总结了活动在事件日志的不同情况下的位置。例如,如果一个活动在位置1发生1000次(案例的第二个事件),在位置2发生500次(案件的第三个事件)时,则返回的字典为:{1/1000,2:500}
输入参数:
log–事件日志对象/Pandas数据帧
activity(str)–要考虑的活动
activity_key(str)–要用于活动的属性
timestamp_key(str)–用于时间戳的属性
case_id_key(str)–要用作案例标识符的属性
返回类型:Dict[int, int]
示例代码:
import pm4py
act_pos = pm4py.get_activity_position_summary(dataframe, 'Act. A', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
2.17 获取随机语言
pm4py.stats.get_stochastic_language(*args, **kwargs) → Dict[List[str], float]
说明:从提供的日志对象中获取随机语言
输入参数:
args–Pandas数据帧/事件日志/接受Petri网/过程树
kwargs–关键字参数返回类型:
Dict[List[str], float]
示例代码:
import pm4py
log = pm4py.read_xes('tests/input_data/running-example.xes')
language_log = pm4py.get_stochastic_language(log)
print(language_log)
net, im, fm = pm4py.read_pnml('tests/input_data/running-example.pnml')
language_model = pm4py.get_stochastic_language(net, im, fm)
print(language_model)
如需了解更多,欢迎加入流程挖掘交流群QQ:671290481.