# knitr::opts_chunk$set(warning = FALSE, message = FALSE, cache = T)
knitr::opts_chunk$set(warning = FALSE, message = FALSE, eval=F)
library(tidyverse)## Error in `library()`:
## ! there is no package called 'tidyverse'
## Error in `library()`:
## ! there is no package called 'formattable'
@Janssenswillen2018 做了一个流程分析的 tutorial。主要有三方面可以学习,
- quality measurement
- exploratory data analysis and
- business process analytics
- 这次学习笔记主要分为四个章节,
- 使用 @bupaR 和 @processmapR 所写的包。
bupaR基于dplyr包开发,processmapR基于diagrammR包开发。 - 数据来自
bupaR包,使用函数data()进行调用。
第一章 Intro to process analysis
- 解释 process analysis 的三个定义
- 给出方法,分析一次业务的流程梳理,基于数据视角
- 给出相应的流程图
流程分析的定义, @Janssenswillen2018 解释得语焉不详,可以直接参考 @Janssenswillen2018pkgdown 给出的解释。 以下是解释的总结, 一个日志数据可以从几个维度来看,
- 从模型层面,这是一个流程,包含了业务的每个环节
- 从事例层面,这是一个用户完成的经过,是整个流程的一个例子,包含了一个用户完成的所有环节
- 从事件层面,一个用户的一个环节的一个动作作为一个样本,这个样本具备不同的特征,比如发生时间、owner、成本等
bupaR包主要的中英文对照表
以医院诊断数据为例,介绍一些功能函数,方便理解。
功能函数
process_map
反馈流程图。 路程图可以查看业务上哪个环节发生频数高或者转化率情况。
eventlog
... %>%
eventlog(
case_id = "patient",
activity_id = "activity",
activity_instance_id = "activity_instance",
lifecycle_id = "status",
timestamp = "timestamp",
resource_id = "resource"
)
构建日志数据
第二章 Analysis techniques
相较于章节 @ref(ch1),章节 @ref(ch2) 会难一些。
这里会从三种视角进行分析
- the control-flow,
- the performance and
- the organizational background.
control-flow
这里主要根据环节、resource进行了分析,旨在发现哪些环节比较突出,耗力。
resource_frequency 资源耗费函数
# Print list of resources
resource_frequency(sepsis,level = "resource") %>%
mutate(relative = percent(relative))- 这里的
resource可以理解为医生,数据是经过脱敏的。 - 这里衡量了不同医生诊断的次数,衡量工作量。
- 这里衡量了不同环节对资源的消耗,也就是有多少医生参与作业,衡量每个环节需要多少工作量。
# Plot Number of executions per resource-activity
resource_frequency(sepsis, level = "resource-activity")# Plot Number of executions per resource-activity
resource_frequency(sepsis, level = "resource-activity") %>% plot()- 这里衡量了不同医生对不同环节工作量的分配。
- 这里可以引用到比如渠道价值的分析等。
resource_involvement 资源完成流程函数
- 这里
resource_involvement函数计算了每个资源,一共介入了多少流程中。 - 当然也可以直接在dplyr内实现。
sepsis %>%
group_by(resource) %>%
summarise(n_distinct = n_distinct(case_id)) %>%
arrange(desc((n_distinct)))resource_frequency函数,计算的单位是环节、任务、tasksresource_involvement函数,计算的单位是流程、cases
activity_presence 查看流程
查看top 10% 的流程类型。
查看一个流程需要多少环节。
查看每个流程出现的概率。
number_of_repetitions 重复环节发生情况函数
# Min, max and average number of repetitions
sepsis %>% number_of_repetitions(level = "log")
# Plot repetitions per activity
sepsis %>% number_of_repetitions(level = "activity") %>% plot
# Number of repetitions per resources
sepsis %>% number_of_repetitions(level = "resource") number_of_repetitions(level = "resource")
衡量了对于一个流程中重复发生的情况,
group_by(first_resource)的重复环节发生情况。
performance analysis
这里主要根据环节用时情况,时间关联情况。
# Create performance map
eat_patterns %>% process_map(type = performance(FUN = median, units = "hours"))
# Inspect variation in activity durations graphically
eat_patterns %>% processing_time(level = "activity") %>% plot
# Draw dotted chart
eat_patterns %>% dotted_chart(x = "relative_day", sort = "start_day", units = "secs")

- 如图,这里衡量每个人(流程)吃饭在时间上的关联情况。
- 这里会发现,
- 吃早饭晚,很可能不吃晚饭了。
- 吃早饭早,午饭前会吃零食。
- 虽然吃早饭晚的但是吃中午饭的时间也比较稳定。
常用函数为
# Time per activity
daily_activities %>% processing_time(level = "activity") %>% plot
# Average duration of recordings
daily_activities %>% throughput_time(level = "log", units = "hours")
# Missing activities
daily_activities %>% idle_time(level = "log", units = "hours")