如何将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
相关产品推荐
相关产品推荐

