Chapter 4 流程分析

4.1 控制流

4.1.1 计算活动的出现频率

library(bupaverse)
## 
## .______    __    __  .______      ___   ____    ____  _______ .______          _______. _______
## |   _  \  |  |  |  | |   _  \    /   \  \   \  /   / |   ____||   _  \        /       ||   ____|
## |  |_)  | |  |  |  | |  |_)  |  /  ^  \  \   \/   /  |  |__   |  |_)  |      |   (----`|  |__
## |   _  <  |  |  |  | |   ___/  /  /_\  \  \      /   |   __|  |      /        \   \    |   __|
## |  |_)  | |  `--'  | |  |     /  _____  \  \    /    |  |____ |  |\  \----.----)   |   |  |____
## |______/   \______/  | _|    /__/     \__\  \__/     |_______|| _| `._____|_______/    |_______|
##                                                                                                 
## ── Attaching packages ─────────────────────────────────────── bupaverse 0.1.0 ──
## ✔ bupaR         0.5.3     ✔ processcheckR 0.1.4
## ✔ edeaR         0.9.1     ✔ processmapR   0.5.2
## ✔ eventdataR    0.3.1     
## ── Conflicts ────────────────────────────────────────── bupaverse_conflicts() ──
## ✖ bupaR::filter()          masks stats::filter()
## ✖ processmapR::frequency() masks stats::frequency()
## ✖ edeaR::setdiff()         masks base::setdiff()
## ✖ bupaR::timestamp()       masks utils::timestamp()
## ✖ processcheckR::xor()     masks base::xor()
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.0     ✔ purrr   1.0.2
## ✔ tibble  3.2.1     ✔ dplyr   1.1.3
## ✔ tidyr   1.3.0     ✔ stringr 1.5.0
## ✔ readr   2.1.3     ✔ forcats 0.5.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::contains() masks tidyr::contains(), processcheckR::contains()
## ✖ dplyr::filter()   masks bupaR::filter(), stats::filter()
## ✖ dplyr::lag()      masks stats::lag()
patients %>% activity_presence() %>%
    plot

4.1.2 计算活动出现的次数

patients %>%
    activity_frequency("activity")
## # A tibble: 7 × 3
##   handling              absolute relative
##   <fct>                    <int>    <dbl>
## 1 Registration               500   0.184 
## 2 Triage and Assessment      500   0.184 
## 3 Discuss Results            495   0.182 
## 4 Check-out                  492   0.181 
## 5 X-Ray                      261   0.0959
## 6 Blood test                 237   0.0871
## 7 MRI SCAN                   236   0.0867

4.1.3 开始/结束活动

patients %>%
    start_activities("resource-activity")
## # A tibble: 1 × 5
##   employee handling     absolute relative cum_sum
##   <fct>    <fct>           <int>    <dbl>   <dbl>
## 1 r1       Registration      500        1       1
patients %>%
    end_activities("resource-activity")
## # A tibble: 5 × 5
##   employee handling              absolute relative cum_sum
##   <fct>    <fct>                    <int>    <dbl>   <dbl>
## 1 r7       Check-out                  492    0.984   0.984
## 2 r6       Discuss Results              3    0.006   0.99 
## 3 r2       Triage and Assessment        2    0.004   0.994
## 4 r5       X-Ray                        2    0.004   0.998
## 5 r3       Blood test                   1    0.002   1

4.1.4 轨迹 trace

  1. Trace Coverage 度量显示了不同活动序列(即跟踪)的数量与它们所覆盖的案例数量之间的关系。
patients %>%
    trace_coverage("trace") %>%
    plot()

在患者日志中,只有7个不同的痕迹,其中2个几乎覆盖了事件日志的100% 。

  1. Trace Length
patients %>%
    trace_length("log") %>%
    plot

可以看出,在这个简单的事件日志中,大多数情况下的跟踪长度为5或6,而少数情况下的跟踪长度小于5。

4.3 性能表现

可以计算出三种不同的时间指标:

4.3.1 吞吐时间

吞吐时间: 从案例的第一个事件到最后一个事件之间的时间

吞吐量时间是从案例的第一个事件到最后一个事件的时间。可以计算它的级别是日志、跟踪或大小写。

patients %>%
    throughput_time("log") %>%
    plot()

4.3.2 处理时间

处理时间: 所有活动实例持续时间的总和

处理时间可以通过级别日志、跟踪、大小写、活动和资源活动来计算。只有当活动实例同时具有开始和结束时间戳时才能计算。

patients %>% 
    processing_time("activity") %>%
    plot

4.3.3 空闲时间

空闲时间: 没有活动实例处于活动状态的时间

空闲时间是指案例或资源中没有活动的时间。只有当活动实例同时具有开始和结束时间戳时才能计算。它可以在跟踪、资源、大小写和日志等级进行计算,并使用不同的时间单位。

patients %>%
    idle_time("resource", units = "days")
## # A tibble: 7 × 2
##   employee idle_time    
##   <fct>    <drtn>       
## 1 r7       464.4199 days
## 2 r1       450.2124 days
## 3 r4       442.6260 days
## 4 r5       430.1764 days
## 5 r3       429.1064 days
## 6 r6       425.5362 days
## 7 r2       214.7436 days
patients %>%
    idle_time("resource", units = "days") %>%
    plot()

4.4 组织角度

4.4.1 资源频率

资源频率度量允许在日志、大小写、活动、资源和资源活动的级别上计算资源的数量/频率。

patients %>%
    resource_frequency("resource")
## # A tibble: 7 × 3
##   employee absolute relative
##   <fct>       <int>    <dbl>
## 1 r1            500   0.184 
## 2 r2            500   0.184 
## 3 r6            495   0.182 
## 4 r7            492   0.181 
## 5 r5            261   0.0959
## 6 r3            237   0.0871
## 7 r4            236   0.0867

4.4.2 资源参与

资源参与是指涉及资源的案例数量的概念。它可以在大小写、资源和资源活动的级别进行计算。

patients %>%
    resource_involvement(level = "resource") %>% plot

这个例子表明所有情况下只有 r1和 r2参与,大多数情况下 r6和 r7参与,而其他的只参与了一半的情况,或多或少。

4.4.3 资源专用化

资源专门化度量表明资源是否专门用于某些活动。它可以根据日志、案例、资源和活动的级别进行计算。

patients %>%
    resource_specialisation("resource")
## # A tibble: 7 × 3
##   employee absolute relative
##   <fct>       <int>    <dbl>
## 1 r1              1    0.143
## 2 r2              1    0.143
## 3 r3              1    0.143
## 4 r4              1    0.143
## 5 r5              1    0.143
## 6 r6              1    0.143
## 7 r7              1    0.143

在简单的患者事件日志中,每个资源正好执行一个活动,因此是100% 专门化的。

4.4.4 Handover-of-work network - 工作交接网络

可以使用 resource _ map 函数创建工作切换网络,它具有与 process _ map 函数相同的参数。

patients %>%
    resource_map()