使用bupaR包在流程地图/矩阵中展示均值/中位数/最大值
用bupaR系列包替换流程地图和Precedence Matrix的指标为均值/中位数/最大值
1. 基础准备(解决xy.coords错误的核心前提)
Error in xy.coords(...)大多是因为数据格式不规范导致的:比如时间字段未转为时间类型,或未正确生成bupaR要求的eventlog对象。先做好数据标准化:
# 加载依赖包 library(bupaR) library(processmapR) library(edeaR) library(dplyr) # 导入CSV并转换为标准eventlog event_log <- read.csv("your_event_log.csv", stringsAsFactors = FALSE) %>% # 转换时间字段为POSIXct(替换为你的实际列名) mutate(timestamp = as.POSIXct(timestamp)) %>% # 转为bupaR专属eventlog对象(必填参数要和你的列名对应) eventlog( case_id = "case_id", # 案例ID列 activity_id = "activity", # 活动名称列 timestamp = "timestamp" # 时间戳列 )
2. 计算活动流转的自定义统计量
先算出每对前后活动之间的时间差均值、中位数、最大值:
transition_stats <- event_log %>% # 按案例分组,匹配当前活动与下一个活动 group_by(case_id) %>% mutate( next_activity = lead(activity_id), # 计算当前到下一个活动的时间差(单位:秒,可按需转换) time_diff = as.numeric(lead(timestamp) - timestamp) ) %>% ungroup() %>% # 按活动对分组,计算统计量 group_by(activity_id, next_activity) %>% summarise( mean_sec = round(mean(time_diff, na.rm = TRUE), 2), median_sec = round(median(time_diff, na.rm = TRUE), 2), max_sec = round(max(time_diff, na.rm = TRUE), 2), count = n() ) %>% filter(!is.na(next_activity)) # 过滤无后续活动的行
3. 生成带自定义指标的流程地图
用process_map的edge_label参数指定要显示的统计量:
# 显示均值的流程地图 process_map(event_log, edge_label = transition_stats$mean_sec, edge_label_position = "middle", # 可选:调整样式 node_attrs = list(shape = "box", fontsize = 10), edge_attrs = list(fontsize = 8)) # 显示带单位的友好标签(比如"均值: 123.45s") process_map(event_log, edge_label = paste0("均值: ", transition_stats$mean_sec, "s"), edge_label_position = "middle") # 替换为中位数/最大值只需改变量名:transition_stats$median_sec / transition_stats$max_sec
4. 生成带自定义指标的Precedence Matrix
有两种实现方式,按需选择:
方式1:用edeaR内置函数直接生成
# 生成均值版precedence matrix precedence_matrix(event_log, measure = "processing_time", FUN = mean) # 替换为中位数/最大值:FUN = median / FUN = max
方式2:用自定义统计量生成热图矩阵
# 把统计量转换为宽格式矩阵 transition_matrix <- transition_stats %>% select(activity_id, next_activity, mean_sec) %>% tidyr::pivot_wider(names_from = next_activity, values_from = mean_sec, values_fill = 0) %>% column_to_rownames("activity_id") # 可视化热图 heatmap(as.matrix(transition_matrix), main = "Precedence Matrix(活动间流转均值时间)", xlab = "后续活动", ylab = "当前活动", col = viridis::viridis(10)) # 可选配色包,需提前安装
错误排查补充
如果仍出现xy.coords错误:
- 检查
time_diff是否为纯数值(无NA或字符型值),可加filter(!is.na(time_diff))过滤异常值 - 确认
eventlog的timestamp字段是标准POSIXct类型,无格式错误
内容的提问来源于stack exchange,提问作者PSt
相关产品推荐
相关产品推荐

