%#为示例data.frame()%>%convert event log object select(case_id,活动,生命周期,资源,timestamp)%>%选择相关变量drop na()在本帖中删除na观测。索引的时间范围是一天,因此我们将创建一个日期标识符,伊德日。索引要求我们计算每个资源每天的案例负载。脓毒症变异百分比(日期=as.date(timestamp))%>%变异百分比(“id_day”=group_indexes_u(.,.dots=c(“resource”,“date”))%>%按(id_day)%>%排列(id_day,时间戳)%>%选择(资源,伊德日case_id) %>% mutate(caseload = n_distinct(case_id)) %>% # caseload ungroup() sepsis_df %>% head() ## # A tibble: 6 x 4 ## resource ID_day case_id caseload ## ## 1 A 1 XJ 1 ## 2 A 1 XJ 1 ## 3 A 1 XJ 1 ## 4 A 1 XJ 1 ## 5 A 2 WEA 1 ## 6 A 2 WEA 1 We now calculate the timeblock and then the interuption index.#删除重复行ix%as.posixct(格式=“%h:%m:%s”),#标准化绘图时间=润滑日期::地板日期(时间,“小时”))%>%将时间四舍五入到最近的小时计数(处理,小时)%>%每小时每个活动的实例总数加上\计数(处理,wt=n)%>%每个活动变异的总实例数(百分比=(n/nn)*100))%>%每个活动ggplot的相对频率(aes(小时,处理,填充=percent))+geom_瓷砖(尺寸=0.5,color=“white”)+缩放填充渐变(colors=wessanderson::wes调色板(“zissou1”,20,type=“continuous”))+theme_classic()+labs(x=“24小时制时钟”,“=”title=“患者活动的高峰期和间歇期”,subtitle=“百分比计算是特定活动的相对频率”,fill=“%”)+scale_y_discrete(limits=rev(levels(patients_df$handling)))+y轴变量的反向显示scale_x_datetime(date_breaks=(1 hour)),date_labels=“%h”)仅显示24小时时钟值heatmap显示最常见的签出时间为1700小时,最常见的注册时间为1800小时。这是合乎逻辑的,因为现有的病人需要先出院,医院才能接纳新病人。从0900小时到1600小时,血液测试活动的暖色和冷色连续交替。我假设每小时的波动是由于工作时间内的机械/人力不足。在平静时期,人力和机械以最大容量运行,以处理前一个高峰时期采集的血液。机器/人力不足,无法容纳更多的血液测试,因此进行的血液测试较少。总结上一篇关于过程挖掘的文章,我们研究的是bupar包中没有包含的分析和可视化,但在理解业务操作的工作流方面仍然很有用。我们计算了中断索引,以检查资源处理特定情况时中断的范围。我们还绘制了一张热图,以可视化事件日志中各种活动的繁忙和安静时段。“/>

过程挖掘(第3/3部分):更多分析和可视化

5月1日,二千零一十九
通过

(本文首次发表于 R标记,并对 188bet appR博主

简介

一周前,哈瓦德商业评论发表了一篇关于过程挖掘的文章,并为公司采用它提供了理由。如果您需要更新流程挖掘的概念,你可以参考我的第一职位.利用R’s进行工艺开采很容易。布巴包裹。布巴允许您在分析事件日志时创建各种可视化。它包括地面工作流可视化然后将它们与理论模型进行比较,以发现偏差。然而,有些分析和可视化不包括在布巴.我将在最后一篇关于过程挖掘的文章中介绍这些内容。(本帖中使用的数据集与医疗保健相关。)

破裂指数

中断索引度量资源在完成案例之前必须在案例之间切换多少,而不是在继续下一个案例之前完成案例的所有活动。在不完整案例之间切换可能是由于许多原因。然而,如果原因是工作流程中断,这将导致效率低下和生产力下降。(如果我所做的事情有适当的术语,请在下面的评论中告诉我)

索引组件

中断指数是两个参数的比值,时间块和案例加载。

时间块是特定资源执行的所有活动实例在定义的时间内按时间顺序排列的位置。对于这个帖子,这将是一天。特定案例的连续活动实例被组合在一起,形成一个时间块。在下面的示例中,有四个时间段。

活动 资源 时间 案例 时间块
办理住院 Z 10:40 AA
办理住院 Z 11:11 BB
X射线 Z 11:30 BB
X射线 Z 12:00 AA
扫描 Z 12:44 AA
前置运算 Z 13∶59 BB

比率中的caseLoad组件是指特定资源在特定日期看到的最大事例数。在上面的例子中,最多有2个案例。因此,比率为2(4/2=2)。最低的分数是1,这意味着案件之间没有切换,一天的中断最少。

计算索引

我将使用脓毒症来自的事件日志布巴说明交互指数的包。

数据集中有26个资源提供者,但为了简化起见,我们将只比较两个资源之间的索引。

#图书馆(plyr)图书馆(tidyverse)图书馆(bupar)主题集(theme_light())n_资源(sepsis)
α〔1〕26

让我们进行一些讨论,以得到一个我们将要使用的数据框架。

#导出所需的df sepsis_df<-sepsis%>%filter_resource(c(“a”,“b”))%>%为示例数据筛选2个资源。frame()%>%Convert Event Log ObjectSelect(case_id,活动,生命周期,资源,时间戳)%>%选择相关变量drop_na()drop na观察

在本文中,索引的时间框架是一天,因此我们将创建一个日期标识符,伊迪日.索引要求我们计算案件审理每种资源的每一天。

脓毒症_df<-脓毒症_df%>%突变(日期=as.日期(时间戳))%>%突变(“id_day”=组_指数(.,.dots=c(“resource”,“date”))%>%按(id_day)%>%排列(id_day,时间戳)%>%选择(资源,伊德日case_id)%>%突变(caseload=n_distinct(case_id))%>%caseload ungroup()败血症_df%>%头())
###一个tibble:6 x 4 resource id诳day case诳id caseLoad##
               
            
                  
             
              ##1 A 1 xj 1 2 A 1 xj 1 3 A 1 xj 1 4 A 1 xj 1 5 A 2 wea 1 6 A 2 wea 1
             
            
           
          

现在我们计算时间块,然后计算中断索引。

#删除重复的rowsix<-c(真,行(尾(脓毒症)-1)==头部(脓毒症)- 1)!=ncol(脓毒症_df))脓毒症_df<-脓毒症_df[ix,]35;转座病例_id柱状脓毒症_df<-ddply(脓毒症_df,(IdayDay.)变换,idx=粘贴(“tb”,1:长度(case_id)sep=“))%>%排列(idx,case_id)计算timeblockssepsis_df<-sepsis_df%>mutate(timeblock=rowums(!is.na(select(,starts_with(“tb”)))%>%select((-starts_with(“tb”))remove reduntant tb variables calculate index sepsis df$interupt index<-sepsis df$timeblock/sepsis df$caseload每个资源的索引样本大小sepsis df<-sepsis df%>%add中断指数)头(脓毒症)
###一个tibble:6 x 6 resource id诳u day caseload timeblock interupt诳u index n##
               
               
                 
                       
               
               
                ##1 A 1 1 1 282 2 A 2 1 1 282 3 A 3 1 1 1 282 4 1 1 282 5 A 5 2 5 2.5 2 6 A 6 1 1 1 1 1 11 282
               
              
             
            
           
          

可视化索引

脓毒症df%>%ggplot(aes(interupt_index,nsize=n))+geom_point()+facet_grid(~资源)

让我们绘制资源A和资源B的中断索引。大多数情况下,资源A和资源B的中断指数为1。换言之,在转到下一个案例之前,他们完成了特定案例的所有活动。资源B的索引为1的天数多于资源A的天数。资源A的中断索引变化较大,最大比率为3。

时间序列热图

布巴有许多奇妙的内置函数来创建各种可视化,以解决工作流上的不同问题。不幸的是,布巴没有创建时间序列热图的功能。我发现时间序列热图有助于确定每个活动的峰值和平静期。发现高峰时期允许管理者分配更多的资源来防止瓶颈的累积。了解间歇期可以释放过剩的产能。

数据争用

我们将使用不同的数据集,患者,演示如何从事件日志创建时间序列热图。

这个患者数据集是患者入院至出院时进行的一系列激活的事件日志。然而,活动变量的当前因子水平,处理不反映患者入院时的预期工作流程。例如,“验血”是第一个活动,“登记”是第五个活动。

patients_df<-data.frame(patients)将“eventlog”对象转换为“data frame”对象级别(patients_df$处理)
##[1]“验血”“检查”“讨论结果”[4]“MRI扫描”“登记”“分类和评估”[7]“X光”

我们需要重新调整活动处理可能在住院时看到的序列。

患者_df<-患者_df%>%突变(处理=fct _relevel(处理,“注册”“分流和评估”,“验血”“X光”,“MRI扫描”,“讨论结果”,“退房”))水平(病患处理费)
##[1]“注册”“分类和评估”“血液测试”[4]“X射线”“MRI扫描”“讨论结果”[7]“检查”

绘制热图

传统上,我将使用等离子体调色板输入比例填充绿色为英雄。然而,自从我遇到这个Tidytuesday推特,我已经领养了日苏1颜色调色板韦森德森我的热天套餐。

患者_df%>%dplyr::mutate(时间=格式(时间,FORMAT=“%h:%m:%s”)%>%as.posixct(FORMAT=“%h:%m:%s”),#标准化绘图时间=润滑日期::地板日期(时间,“小时”))%>%四舍五入到最近的小时计数(处理,小时)%>%每小时每个活动的总实例数(处理,wt=n)%>%每个活动变异的总实例数(百分比=(n/n n)*100))%>%每个活动ggplot的相对频率(aes(小时,处理,填充=percent))+geom_瓷砖(尺寸=0.5,color=“white”)+缩放填充渐变(colors=wessanderson::wes调色板(“zissou1”,20,type=“continuous”))+theme_classic()+labs(x=“24小时制时钟”,“=”title=“患者活动的高峰期和间歇期”,subtitle=“百分比计算是特定活动的相对频率”,fill=“%”)+scale_y_discrete(limits=rev(levels(patients_df$handling)))+y轴变量的反向显示scale_x_datetime(date_breaks=(1 hour)),date_labels=“%h”)仅显示24小时时钟值

热图显示,最常见的退房时间是1700小时,最常见的登记时间是1800小时。这是合乎逻辑的,因为现有的病人需要先出院,医院才能接纳新病人。从0900小时到1600小时,血液测试活动的暖色和冷色连续交替。我假设每小时的波动是由于工作时间内的机械/人力不足。在平静时期,人力和机械以最大容量运行,以处理前一个高峰时期采集的血液。机器/人力不足,无法容纳更多的血液测试,因此进行的血液测试较少。

总结

在上一篇关于过程挖掘的文章中,我们看的是不包含在布巴但在理解业务操作的工作流时仍然有用。我们计算了中断索引,以检查资源处理特定情况时中断的范围。我们还绘制了一张热图,以在事件日志中显示各种活动的繁忙和安静时期。

留下评论作者,请关注他们博客上的链接和评论: R标记.

188bet appR博客提供 每日电子邮件更新金宝搏网址 R新闻与 教程关于以下主题: 数据科学大数据, r作业,可视化(可视化) GGPROTT2箱形图地图动画)程序设计(程序) 演播室斯威夫特乳胶SQL日食吉特哈多普刮网)统计 回归主成分分析时间序列交易还有更多…



如果你走这么远,为什么不 订阅更新 从站点?选择您的口味: 电子邮件推特1188bet app,或 脸谱网

注释已关闭。

搜索R-Blo188bet appggers


赞助商

千万不要错过更新!
订阅R-Bloggers188bet app接收
最新R帖子的电子邮件。
(您将不再看到此消息。)

单击此处关闭(此弹出窗口将不再出现)