pm4py使用指南(非机翻)

目录

  • 1. 日志数据读取及预处理
    • (1)查看case和event数量
    • (2)查看起始事件和结束事件
    • (3)时间戳格式的问题
  • 2. 日志数据过滤
  • 3. 流程发现
  • 4. 模型转化
  • 5. 模型可视化

1. 日志数据读取及预处理

通过 pandas库 读取csv文件,每一行代表一条活动记录,一般必须要有的信息是 case_id 事件id , activity_name 活动名称,time 时间戳,此外还可以包含 事件类型、活动成本等额外的信息以供进一步分析。pm4py官网提供了一个小样本数据集可用于探索该库的使用。

case_id;activity;timestamp;costs;resource
3;register request;2010-12-30 14:32:00+01:00;50;Pete
3;examine casually;2010-12-30 15:06:00+01:00;400;Mike
3;check ticket;2010-12-30 16:34:00+01:00;100;Ellen
3;decide;2011-01-06 09:18:00+01:00;200;Sara
3;reinitiate request;2011-01-06 12:18:00+01:00;200;Sara

(1)查看case和event数量

数据读取完成之后,可以获取该事件日志的一些基本信息。注意:这里 case/ trace 表示一个案例,即一次完整的流程,每个case_id 对应了很多可分隔的步骤(也即具体的 事件event / 活动activity 。后面不再强调这一点,但都会按照这种方式进行叙述,因此需要明确区分 case 和 event 。

event_log = pandas.read_csv(file_path, sep=';')  # 读取日志文件
num_events = len(event_log)                      # 获取日志文件的活动数目
num_cases = len(event_log.case_id.unique())      # 查看有多少次完整的案例记录

(2)查看起始事件和结束事件

此外,通过pm4py提供的函数还可以查看开始活动和结束活动都是哪些。

# 指定case_id,activity_key,timestamp_key分别对应哪个数据列
event_log = pm4py.format_dataframe(event_log, case_id='case_id', activity_key='activity',timestamp_key='timestamp')start_activities = pm4py.get_start_activities(event_log)   # 起始事件
end_activities = pm4py.get_end_activities(event_log)       # 结束事件
print("Start activities: {}\nEnd activities: {}".format(start_activities, end_activities))

pm4py.format_dataframe 将数据表转换为pm4py中的通用格式,它会创建事件日志的副本,并将分配的列重命名为pm4py中使用的标准列名,列case_id会重命名为case:concept:name,activity 列重命名为concept:name,timestamp列重命名为time:timestamp

pm4py.get_start_activitiespm4py.get_end_activities 函数返回一个字典,给出起始事件及结束事件分别出现在第一个和最后一个的次数。

(3)时间戳格式的问题

PM4Py利用内置的panda函数自动检测输入数据中的时间戳格式。但是,pandas 会孤立地查看每一行中的时间戳值。这就存在一些问题,如果提供的值是2020-01-18,即,首先是年份,然后是月份,然后是日期,在某些情况下,2020-02-01的值可能被错误地解释为1月2日,即,而不是2月1日。为了解决这个问题,可以向format_dataframe()方法提供一个额外的参数 times_format 。在本例中,时间戳格式为%Y-%m-%d%H:%m:%S%z。通常建议指定时间戳格式。

2. 日志数据过滤

现实中的日志数据通常是复杂、多变、有噪声的,为了得到良好的过程模型,有必要对数据进行仔细的过滤,PM4Py中有各种预构建的过滤器来实现这个需求。

  • filter_start_activities(log, activities, retain=True) :此函数根据给定的起点事件过滤事件日志对象。 activities 用于指定所关注的 起始事件 的集合; retain 设置为True 表示 保留所有以 activities 中的事件开头的case,为 False 则删除所有以 activities 中的事件开头的case。 activities 和 retain这两个参数在其他函数中也是一样的,因此后面不再介绍。
  • filter_end_activities(log,activities,retain=True):根据给定的终点事件过滤事件日志对象。
  • filter_event_attribute_values(log,attribute_key,values,level=“case”,retain=True):根据事件属性过滤事件日志。attribute_key 是表示要筛选的属性键的字符串,values 参数指定一组允许的值。如果level参数设置为“case”,表示在case-level进行属性值的过滤,一个case所包含的多个event中,至少一个event的属性值满足要求,那么整个case的所有事件都将被保留。如果level参数值设置为“event”,则只保留属性为指定值的事件。
  • filter_trace_attribute_values(log,attribute_key,values,retain=True):仅保留(如果retain设置为False,则删除)具有所提供attribute_key的属性值并列在相应值集合中的跟踪。
  • filter_variants(log,variants,retain=True):保留 满足特定执行顺序 的轨迹。例如,在大型日志中,我们希望保留描述执行序列“a”、“b”、“c”的所有轨迹。variations 参数是活动名称列表的集合,例如 variations=[['a','b','c']]
  • filter_directly_follows_relation(log,relationship,retain=True):此函数筛选包含指定“直接跟随关系”的所有轨迹。这样的关系只是一对活动,例如 ('a', 'b') 表示在轨迹中’a’后面直接跟着 ‘b’ ,轨迹<'a','b','c','d'>包含直接跟在后面的对(‘a’,‘b’),(‘b’,‘c’)和(‘c’,‘d’)。relationship 参数是一组元组,包含活动名称。
  • filter_eventually_follows_relation(log,relationship,retain=True):此函数的跟随关系更宽松,允许两个活动之间有其他的活动,只需要这两个活动的前后关系满足要求即可。例如,当我们调用具有关系(“a”, “b”)的函数时,在某个点观察到活动“a”,在之后某个点观察到活动“b”即可。
  • filter_time_range(log, dt1, dt2, mode=’events’) :根据时间戳 dt1 和 dt2 定义的给定时间范围过滤事件日志。时间戳的格式应为datetime.datetime。筛选器有三种模式(默认为“events”):
    • ‘events’:保留在时间范围之内的事件
    • ‘traces_contained’:保留完全在时间范围之内的轨迹
    • ‘traces_intersecting’ :保留至少有一个事件在时间范围之内的轨迹
    filtered = pm4py.filter_start_activities(log, {'register request'})filtered = pm4py.filter_start_activities(log, {'register request TYPO!'})filtered = pm4py.filter_end_activities(log, {'pay compensation'})filtered = pm4py.filter_event_attribute_values(log, 'org:resource', {'Pete', 'Mike'})filtered = pm4py.filter_event_attribute_values(log, 'org:resource', {'Pete', 'Mike'}, level='event')filtered = pm4py.filter_trace_attribute_values(log, 'concept:name', {'3', '4'})filtered = pm4py.filter_trace_attribute_values(log, 'concept:name', {'3', '4'}, retain=False)filtered = pm4py.filter_variants(log, [['register request', 'check ticket', 'examine casually', 'decide', 'pay compensation']])filtered = pm4py.filter_variants(log, [['register request', 'check ticket', 'examine casually', 'decide', 'reject request']])filtered = pm4py.filter_directly_follows_relation(log, [('check ticket', 'examine casually')])filtered = pm4py.filter_eventually_follows_relation(log, [('examine casually', 'reject request')])filtered = pm4py.filter_time_range(log, dt.datetime(2010, 12, 30), dt.datetime(2010, 12, 31), mode='events')filtered = pm4py.filter_time_range(log, dt.datetime(2010, 12, 30), dt.datetime(2010, 12, 31),mode='traces_contained')filtered = pm4py.filter_time_range(log, dt.datetime(2010, 12, 30), dt.datetime(2010, 12, 31),mode='traces_intersecting')

3. 流程发现

流程发现模块用于从事件日志中生成流程模型,pm4py实现了多种流程发现算法,并且可以生成不同种类的过程模型。PM4Py目前支持三种不同的流程建模符号,分别是:

  • BPMN,即 Business Process Modeling Notation;
  • Petri网,Petri网是一种更加数学化的建模表示,Petri网的行为通常更难理解,然而由于其数学性质,Petri网通常不那么模糊。在本教程中,我们将主要关注BPMN模型和流程树。
  • 过程树 Process Tree,过程树表示Petri网的严格子集,并以分层的方式描述过程行为。

pm4py中的流程发现根据所使用的 算法模型 对应着不同的函数,具体如下表所示(表中只是其中部分),然后本文会对这些函数的使用方法和参数进行具体的介绍:

pm4py

  • discover_petri_net_alpha()(这类函数一般都需要下面四个参数,因此后面省略不再介绍)
    • log: Union[EventLog, DataFrame] 事件日志
    • activity_key: str = ‘concept:name’ ,指定活动名称列
    • timestamp_key: str = ‘time:timestamp’,指定表示时间的列
    • case_id_key: str = ‘case:concept:name’) ,指定轨迹 id 列
    • Return type:Tuple[PetriNet, Marking, Marking]
  • discover_petri_net_ilp()
    • alpha(float):序列编码图 (sequence encoding graph)的噪声阈值,1.0=no filtering, 0.0=greatest filtering
    • Return type:Tuple[PetriNet, Marking, Marking]
  • discover_petri_net_inductive()
    • noise_threshold (float) :噪声阈值 (default: 0.0)
    • multi_processing (bool) :boolean that enables/disables multiprocessing in inductive miner(?)
    • discover_petri_net_heuristics()
    • dependency_threshold (float) : dependency threshold (default: 0.5)
    • and_threshold (float): AND threshold (default: 0.65)
    • loop_two_threshold (float) :loop two threshold (default: 0.5)

  • discover_process_tree_inductive()
    • noise_threshold (float) : noise threshold (default: 0.0)
    • multi_processing (bool) :boolean that enables/disables multiprocessing in inductive miner
    • Return type:ProcessTree
  • discover_heuristics_net()
    • dependency_threshold (float) : dependency threshold (default: 0.5)
    • and_threshold (float): AND threshold (default: 0.65)
    • loop_two_threshold (float) :loop two threshold (default: 0.5)
    • min_act_count (int):活动的最小发生次数,大于该阈值才会纳入模型中
    • min_dfg_occurrences (int):活动的最小发生次数,大于该阈值才会被作为DFG的一条弧
    • decoration (str) :弧上的标注 可选 ‘frequency’ 频率 或 ‘performance’ 性能)
    • Return type:HeuristicsNet
  • discover_bpmn_inductive()
    • noise_threshold (float) : noise threshold (default: 0.0)
    • multi_processing (bool) :boolean that enables/disables multiprocessing in inductive miner
    • Return type:BPMN

4. 模型转化

在介绍绘图之前,先介绍一下各个流程模型之间的转化。pm4py的convert模块提供了多种函数实现 petri 网,过程树,BPMN等模型的转换。

  • convert_to_bpmn():输入 petri net 或process tree,返回BPMN
  • convert_to_petri_net() :输入BPMN 或process tree,返回 petri net
  • convert_to_process_tree():输入BPMN 或 petri net ,返回process tree
    process_tree = pm4py.discover_process_tree_inductive(log)   # 流程树bpmn_model = pm4py.convert_to_bpmn(process_tree)            # 将流程树转换为BPMN

5. 模型可视化

  • view_petri_net()
    • petri_net (PetriNet):传入要绘制的petri网
    • initial_marking : Initial marking 起始标记 im
    • final_marking:Final marking 终点标记 fm(im和fm在前面使用流程发现函数时会随着petri网一起生成三元组)
    • format (str) :输出图片的格式
    • bgcolor (str) :背景颜色,默认白色(default: white)
    • decorations :与Petri网元素相关的装饰(颜色、标签)
    • debug (bool):启用 / 禁用debug模式
  • save_vis_petri_net()
    • 参数同上,但是多了一个 file_path 用于指定文件保存位置

BPMN,过程树绘制的函数也都类似,view_xxxx() 用于模型可视化展示,save_vis_xxxx() 用于文件保存,一般可以设置 format 文件类型bgcolor背景颜色

net, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
pm4py.view_petri_net(net, im, fm, format='svg')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/103435.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-Java逆天操作

本文章会对Java线性表的相关知识进行讲解&#xff0c;也会以Java代码示例来进行解释 对线性表的讲解分析 定义 线性表是一种数据结构&#xff0c;它是由一系列具有相同类型的元素组成的有序集合。线性表中的元素按照线性的顺序 排列&#xff0c;每个元素只有一个前驱元素和一…

对于pycharm 运行的时候不在cmd中运行,而是在python控制台运行的情况,如何处理?

对于pycharm 运行的时候不在cmd中运行&#xff0c;而是在python控制台运行的情况&#xff0c;如何处理&#xff1f; 比如&#xff0c;你在运行你的代码的时候 它总在python控制台运行&#xff0c;十分难受 解决方法 在pycharm中设置下即可&#xff0c;很简单 选择运行点击…

python爬虫10:selenium库

python爬虫10&#xff1a;selenium库 前言 ​ python实现网络爬虫非常简单&#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点&#xff0c;方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论&#xff0c;并不会对网站产…

LeetCode--HOT100题(34)

目录 题目描述&#xff1a;94. 二叉树的中序遍历&#xff08;简单&#xff09;题目接口解题思路1代码解题思路2代码 PS: 题目描述&#xff1a;94. 二叉树的中序遍历&#xff08;简单&#xff09; 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 LeetCode做…

爆火「视频版ControlNet」开源了!靠提示词精准换画风,全华人团队出品

“视频版ControlNet”来了&#xff01; 让蓝衣战神秒变迪士尼公举&#xff1a; 视频处理前后&#xff0c;除了画风以外&#xff0c;其他都不更改。 女孩说话的口型都保持一致。 正在插剑的姜文&#xff0c;也能“下一秒”变猩球崛起了。 这就是由全华人团队打造的最新视频处理…

性能调优篇 二、Jvm监控及诊断工具-命令行篇

目录 一、概述1、简单命令行工具 二、jps&#xff1a;查看正在运行的Java程序&#xff08;掌握&#xff09;1、是什么&#xff1f;2、测试3、基本语法 三、jstat&#xff1a;查看jvm统计信息&#xff08;掌握&#xff09;1、是什么&#xff1f;2、基本语法3、补充 四、jinfo&am…

记录Taro大坑2丢失api无法启动

现象 解决方案 看了很多。很多说要改成一致的版本号。其实没什么用。 正确方案 再新建一个模板跑起来对比config的配置&#xff0c;以及package.json发现关闭预编译即可。预编译导致api丢失

javaWeb差缺补漏(一)【针对于自身知识点掌握情况】

前端三大件部分 1、a标签的target属性iframe标签的name属性 2、textarea标签&#xff1a;表示多行文本输入。起始标签和结束标签中的内容是默认值。 rows&#xff1a;属性设置可以显示多少行。 cols&#xff1a;属性设置每行显示多少列。 3、form表单的action提交的时候&a…

使用proxman对iOS真机进行抓包

1 打开手机的safari 输入地址 http://proxy.man/ssl 2 下载证书代开设置页面&#xff0c;安装证书 设置信任证书 打开手机设置 &#xff0c;点击通用 点击关于本机、 点击证书信任设置 打开信任设置开关 4 设置手机代理 查看需要设置的代理地址 打开界面 在手机中按…

Redis过期数据的删除策略

1 介绍 Redis 是一个kv型数据库&#xff0c;我们所有的数据都是存放在内存中的&#xff0c;但是内存是有大小限制的&#xff0c;不可能无限制的增量。 想要把不需要的数据清理掉&#xff0c;一种办法是直接删除&#xff0c;这个咱们前面章节有详细说过&#xff1b;另外一种就是…

React基础入门之虚拟Dom

React官方文档&#xff1a;https://react.docschina.org/ 说明 重要提示&#xff1a;本系列文章基础篇总结自尚硅谷课程&#xff0c;且采用类式写法&#xff01;&#xff01;最新的函数式组件写法见高级篇。 本系列文档旨在帮助vue同学更快速的学习react&#xff0c;如果你很…

【SpringCloud技术专题】「Gateway网关系列」(2)微服务网关服务的Gateway功能配置指南分析

Spring Cloud Gateway简介 Spring Cloud Gateway是Spring Cloud体系的第二代网关组件&#xff0c;基于Spring 5.0的新特性WebFlux进行开发&#xff0c;底层网络通信框架使用的是Netty&#xff0c;所以其吞吐量高、性能强劲&#xff0c;未来将会取代第一代的网关组件Zuul。Spri…

【分享】小型园区组网场景

小型园区组网图 在小型园区中&#xff0c;S2700&S3700通常部署在网络的接入层&#xff0c;S5700&S6700通常部署在网络的核心&#xff0c;出口路由器一般选用AR系列路由器。 接入交换机与核心交换机通过Eth-Trunk组网保证可靠性。 每个部门业务划分到一个VLAN中&#…

Verilog语法学习——边沿检测

边沿检测 代码 module edge_detection(input sys_clk,input sys_rst_n,input signal_in,output edge_rise,output edge_down );//存储上一个时钟周期的输入信号reg signal_in_prev;always (posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n)signal_in_pre…

【ARM】Day9 cortex-A7核I2C实验(采集温湿度)

1. 2、编写IIC协议&#xff0c;采集温湿度值 iic.h #ifndef __IIC_H__ #define __IIC_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" #include "led.h" /* 通过程序模拟实现I2C总线的时序和协议* GPIOF ---> AHB4* I2C1_S…

STM32 进不了main 函数

1. 我用的是STM32L151C8T6 的芯片&#xff0c;在github 上找了个别人的例程&#xff0c;拿来当模板改&#xff0c;由于他用的是HSE 外部晶振&#xff0c;我用的是内部晶振HSI&#xff0c;所以需要改系统时钟&#xff0c;改完后debug&#xff0c; 一直进不了main 函数&#xff0…

SQL地址门牌排序,字典序转为数字序

页面有一批地址数据查询&#xff0c;结果字符排序默认是字典序的&#xff0c;所以造成了门牌3号在30号之前&#xff0c;影响用户体验&#xff1b; id, road_code, road_name, address_fullname, address_name 102 10086 人民一路 北江省南海市西湖区人民一路3号 3号 103 10086…

Docker Desktop 笔记

https://blog.csdn.net/qq_39611230/article/details/108641842 https://blog.csdn.net/KgdYsg/article/details/118213499 1、修改配置 {"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://…

【FAQ】视频云存储/安防监控EasyCVR视频汇聚平台如何通过角色权限自行分配功能模块?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

C++中机器人应用程序的行为树(ROS2)

马库斯布赫霍尔茨 一、说明 以下文章为您提供了对机器人应用程序或框架中经常使用的行为树的一般直觉&#xff1a;ROS&#xff0c;Moveit和NAV2。了解行为 Tress &#xff08;BT&#xff09; 框架的原理为您提供了在游戏领域应用知识的绝佳机会。BT可以与Unity或Unreal集成。 由…