You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:31:22