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

如何将Neo4j图数据库数据导入Jupyter Notebook用于深度学习?

从Neo4j提取图数据到Jupyter Notebook用于深度学习的可行方案

1. 使用Neo4j官方Python驱动直接查询导出

这是最灵活的方式,适合自定义数据提取逻辑,直接在Jupyter中连接Neo4j并获取节点、关系数据,再转换成深度学习框架兼容的格式。

步骤示例:

  • 安装依赖:
    pip install neo4j pandas torch torch_geometric
    
  • 连接Neo4j并提取数据:
    from neo4j import GraphDatabase
    import pandas as pd
    
    # 配置连接信息
    uri = "bolt://localhost:7687"
    user = "neo4j"
    password = "你的密码"
    
    # 初始化驱动
    driver = GraphDatabase.driver(uri, auth=(user, password))
    
    # 定义查询函数
    def fetch_graph_data():
        with driver.session() as session:
            # 获取所有节点(含ID、标签、属性)
            nodes = session.run("MATCH (n) RETURN id(n) AS node_id, labels(n) AS labels, properties(n) AS props").data()
            # 获取所有关系(含源节点ID、目标节点ID、关系类型、属性)
            rels = session.run("MATCH (n)-[r]->(m) RETURN id(n) AS source, id(m) AS target, type(r) AS rel_type, properties(r) AS rel_props").data()
        return nodes, rels
    
    # 提取数据
    nodes, rels = fetch_graph_data()
    
    # 转换成DataFrame方便后续处理
    nodes_df = pd.DataFrame(nodes)
    rels_df = pd.DataFrame(rels)
    
    # 关闭驱动连接
    driver.close()
    
  • 转换成PyTorch Geometric(深度学习常用图框架)的Data对象:
    import torch
    from torch_geometric.data import Data
    
    # 提取节点特征(假设属性均为数值类型,按需调整)
    node_features = torch.tensor([list(n["props"].values()) for n in nodes], dtype=torch.float)
    # 构建边索引(PyG要求边索引为2xN的张量)
    edge_index = torch.tensor([[r["source"], r["target"]] for r in rels], dtype=torch.long).t().contiguous()
    
    # 创建可用于深度学习的图数据对象
    graph_data = Data(x=node_features, edge_index=edge_index)
    

2. 使用Neo4j GDS Python客户端(graphdatascience)

如果你已经熟悉Neo4j GDS,可以直接在Jupyter中调用GDS算法(如Node2Vec、GraphSAGE)生成嵌入,再导出到本地用于深度学习训练。

步骤示例:

  • 安装客户端:
    pip install graphdatascience torch
    
  • 连接GDS并导出嵌入:
    from graphdatascience import GraphDataScience
    
    # 连接Neo4j GDS
    gds = GraphDataScience(uri, auth=(user, password))
    
    # 投影图到GDS内存(按需调整节点/关系筛选条件)
    G, _ = gds.graph.project(
        "my-graph",
        "*",  # 包含所有节点标签
        "*"   # 包含所有关系类型
    )
    
    # 运行Node2Vec算法并将嵌入写入Neo4j节点属性
    gds.node2vec.write(
        G,
        writeProperty="node2vec_emb",
        embeddingDimension=128,
        walkLength=80,
        numWalks=10
    )
    
    # 从Neo4j导出嵌入数据
    embedding_results = gds.run_cypher("MATCH (n) RETURN id(n) AS node_id, n.node2vec_emb AS embedding").data()
    
    # 转换成PyTorch张量用于深度学习
    embeddings = torch.tensor([res["embedding"] for res in embedding_results], dtype=torch.float)
    
    # 清理投影图
    G.drop()
    gds.close()
    

3. 导出为CSV/JSON后读取

对于结构简单的图,可直接在Neo4j中导出节点和关系为CSV文件,再在Jupyter中用Pandas读取处理。

步骤示例:

  • 在Neo4j Browser中运行导出命令(需先安装APOC插件):
    // 导出所有节点到CSV
    CALL apoc.export.csv.query("MATCH (n) RETURN id(n) AS node_id, labels(n) AS labels, properties(n)", "nodes.csv", {})
    
    // 导出所有关系到CSV
    CALL apoc.export.csv.query("MATCH (n)-[r]->(m) RETURN id(n) AS source, id(m) AS target, type(r) AS rel_type, properties(r)", "rels.csv", {})
    
  • 在Jupyter中读取并处理:
    import pandas as pd
    
    nodes_df = pd.read_csv("nodes.csv")
    rels_df = pd.read_csv("rels.csv")
    
    # 后续可根据需求转换为图框架兼容格式
    

选择建议

  • 若需自定义数据筛选/转换逻辑,优先用Neo4j Python驱动;
  • 若需要先运行图算法生成嵌入,推荐用GDS Python客户端;
  • 小图或快速原型验证,可选择CSV导出方式。

内容的提问来源于stack exchange,提问作者Utkarsh Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:25:20