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

如何使用Python/R为带时间戳的数据生成指定ID的流程图

解决方案

以下分别提供Python和R语言的可直接落地的实现方案,支持传入ID参数自动生成对应流程图,也可扩展支持批量生成所有ID的流程图。

Python 实现方案

基于pandas处理结构化数据,graphviz库生成流程图,适配性强,可自定义节点样式、布局规则。

依赖安装

  • 安装Python依赖包:pip install pandas graphviz
  • 安装graphviz运行时:Windows可从官网下载安装包并添加到系统环境变量,macOS执行brew install graphviz,Linux执行sudo apt install graphviz

示例代码

import pandas as pd
from graphviz import Digraph

# 示例数据,实际使用时替换为读入你的全量数据集
df = pd.DataFrame({
    "ID": [1, 1, 1],
    "year": [2015, 2016, 2015],
    "feature1": ["A", "A", "B"],
    "feature2": [40, 50, 60]
})

def generate_id_flowchart(target_id, save_path="./flow_chart"):
    # 筛选目标ID的数据,按年份排序
    id_data = df[df["ID"] == target_id].sort_values("year").reset_index(drop=True)
    if id_data.empty:
        print(f"未找到ID为{target_id}的对应数据")
        return
    
    # 初始化流程图,设置横向布局
    dot = Digraph(name=f"ID_{target_id}_flow", format="png")
    dot.attr(rankdir="LR", size="8,5")
    
    used_nodes = set()
    # 遍历数据添加节点和边
    for _, row in id_data.iterrows():
        # 年份节点
        year_node = f"year_{row['year']}"
        if year_node not in used_nodes:
            dot.node(year_node, str(row["year"]), shape="box", style="filled", color="#f0f0f0")
            used_nodes.add(year_node)
        # 特征节点
        feature_node = f"feat_{row['feature1']}_{row['feature2']}_{row['year']}"
        if feature_node not in used_nodes:
            dot.node(feature_node, f"{row['feature1']}\n{row['feature2']}", shape="ellipse")
            used_nodes.add(feature_node)
        # 关联年份和特征
        dot.edge(year_node, feature_node)
    
    # 同一年份的节点放在同一层级
    for year in id_data["year"].unique():
        with dot.subgraph() as sub:
            sub.attr(rank="same")
            sub.node(f"year_{year}")
            for _, row in id_data[id_data["year"] == year].iterrows():
                sub.node(f"feat_{row['feature1']}_{row['feature2']}_{row['year']}")
    
    # 渲染保存
    dot.render(save_path, cleanup=True)
    print(f"ID {target_id} 流程图已保存至 {save_path}.png")

# 调用示例
generate_id_flowchart(target_id=1)

R 实现方案

基于dplyr处理数据,DiagrammeR库生成流程图,支持输出PNG、PDF、HTML等多种格式。

依赖安装

install.packages(c("dplyr", "DiagrammeR", "DiagrammeRsvg", "rsvg"))

示例代码

library(dplyr)
library(DiagrammeR)
library(DiagrammeRsvg)
library(rsvg)

# 示例数据,实际使用时替换为读入你的全量数据集
df <- tibble(
  ID = c(1, 1, 1),
  year = c(2015, 2016, 2015),
  feature1 = c("A", "A", "B"),
  feature2 = c(40, 50, 60)
)

generate_id_flowchart <- function(target_id, save_path = "./flow_chart.png") {
  # 筛选目标ID的数据
  id_data <- df %>% filter(ID == target_id) %>% arrange(year)
  if(nrow(id_data) == 0) {
    message(paste0("未找到ID为", target_id, "的对应数据"))
    return
  }
  
  # 初始化节点和边数据框
  nodes <- create_node_df(n = 0, style = "filled", fillcolor = "white")
  edges <- create_edge_df()
  
  # 遍历年份添加节点
  years <- unique(id_data$year)
  for (y in years) {
    # 添加年份节点
    nodes <- add_node(nodes, label = as.character(y), fillcolor = "#f0f0f0", shape = "box")
    year_node_id <- nrow(nodes)
    # 添加对应年份的特征节点
    year_feat <- id_data %>% filter(year == y)
    for(i in 1:nrow(year_feat)) {
      feat_label <- paste0(year_feat$feature1[i], "\n", year_feat$feature2[i])
      nodes <- add_node(nodes, label = feat_label, shape = "ellipse")
      feat_node_id <- nrow(nodes)
      # 添加关联边
      edges <- add_edge(edges, from = year_node_id, to = feat_node_id)
    }
  }
  
  # 构建流程图,设置横向布局
  graph <- create_graph(nodes_df = nodes, edges_df = edges) %>%
    add_global_graph_attrs(attr = "rankdir", value = "LR", attr_type = "graph")
  
  # 导出保存
  export_graph(graph, file_name = save_path, file_type = "png")
  message(paste0("ID ", target_id, " 流程图已保存至 ", save_path))
}

# 调用示例
generate_id_flowchart(target_id = 1)

批量生成说明

如果需要批量生成所有ID的流程图,只需遍历所有唯一ID列表循环调用上述函数即可,单张图生成速度为毫秒级,支持万级ID的批量处理。

内容的提问来源于stack exchange,提问作者Tanmey Rawal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 15:06:04