【Pm4py第八讲】关于Statistics

8 篇文章 0 订阅
1 篇文章 0 订阅

本节用于介绍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 | DataFrameattribute: strcount_once_per_case=Falsecase_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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北冥有鱼zsp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值