neo4j - 在 Neo4j 中创建代谢途径

标签 neo4j cypher

我正在尝试使用以下数据在 Neo4j 中创建此问题底部图像中显示的糖酵解途径:

糖酵解_生物实体.csv

name
α-D-glucose
glucose 6-phosphate
fructose 6-phosphate
"fructose 1,6-bisphosphate"
dihydroxyacetone phosphate
D-glyceraldehyde 3-phosphate
"1,3-bisphosphoglycerate"
3-phosphoglycerate
2-phosphoglycerate
phosphoenolpyruvate
pyruvate
hexokinase
glucose-6-phosphatase
phosphoglucose isomerase
phosphofructokinase
"fructose-bisphosphate aldolase, class I"
triosephosphate isomerase (TIM)
glyceraldehyde-3-phosphate dehydrogenase
phosphoglycerate kinase
phosphoglycerate mutase
enolase
pyruvate kinase

糖酵解_relations.csv
source,relation,target
α-D-glucose,substrate_of,hexokinase
hexokinase,yields,glucose 6-phosphate
glucose 6-phosphate,substrate_of,glucose-6-phosphatase
glucose-6-phosphatase,yields,α-D-glucose
glucose 6-phosphate,substrate_of,phosphoglucose isomerase
phosphoglucose isomerase,yields,fructose 6-phosphate
fructose 6-phosphate,substrate_of,phosphofructokinase
phosphofructokinase,yields,"fructose 1,6-bisphosphate"
"fructose 1,6-bisphosphate",substrate_of,"fructose-bisphosphate aldolase, class I"
"fructose-bisphosphate aldolase, class I",yields,D-glyceraldehyde 3-phosphate
D-glyceraldehyde 3-phosphate,substrate_of,glyceraldehyde-3-phosphate dehydrogenase
D-glyceraldehyde 3-phosphate,substrate_of,triosephosphate isomerase (TIM)
triosephosphate isomerase (TIM),yields,dihydroxyacetone phosphate
glyceraldehyde-3-phosphate dehydrogenase,yields,"1,3-bisphosphoglycerate"
"1,3-bisphosphoglycerate",substrate_of,phosphoglycerate kinase
phosphoglycerate kinase,yields,3-phosphoglycerate
3-phosphoglycerate,substrate_of,phosphoglycerate mutase
phosphoglycerate mutase,yields,2-phosphoglycerate
2-phosphoglycerate,substrate_of,enolase
enolase,yields,phosphoenolpyruvate
phosphoenolpyruvate,substrate_of,pyruvate kinase
pyruvate kinase,yields,pyruvate

到目前为止,这是我所拥有的

enter image description here

...使用这个密码(传递给 Cyclicypher-shell ):
LOAD CSV WITH HEADERS FROM "file:/glycolysis_relations.csv" AS row
MERGE (s:Glycolysis {source: row.source})
MERGE (r:Glycolysis {relation: row.relation})
MERGE (t:Glycolysis {target: row.target})
FOREACH (x in case row.relation when "substrate_of" then [1] else [] end |
  MERGE (s)-[r:substrate_of]->(t)
)
FOREACH (x in case row.relation when "yields" then [1] else [] end |
  MERGE (s)-[r:yields]->(t)
  );

我想创建完全连接的路径,在所有节点上都有标题。建议?

enter image description here

最佳答案

[更新]

存在多个问题和可能的改进:

  • 第二个MERGE应该删除,因为它会创建孤立节点。不应将关系类型调整为 Glycolysis节点,这样的节点永远不会连接到任何其他节点。
  • 一号、三号MERGE子句必须对源节点和目标节点使用相同的属性名称(例如, name ),否则相同的化学物质可能会以 2 个节点(具有不同的属性键)结束。这就是为什么您最终得到没有所有预期连接的节点的原因。
  • APOC程序apoc.cypher.doIt可以用来稍微简化 MERGE与动态名称的关系。
  • glycolysis_bioentities.csv此用例不需要。

  • 通过上述更改,您最终会得到这样的结果,它将生成一个与您的输入数据匹配的连接图:
    LOAD CSV WITH HEADERS FROM "file:/glycolysis_relations.csv" AS row
    MERGE (s:Glycolysis {name: row.source})
    MERGE (t:Glycolysis {name: row.target})
    WITH s, t, row
    CALL apoc.cypher.doIt(
      'MERGE (s)-[r:' + row.relation + ']->(t)',
      {s:s, t:t}) YIELD value
    RETURN 1;
    

    关于neo4j - 在 Neo4j 中创建代谢途径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49682338/

    相关文章:

    Neo4J 对多个标签的唯一约束

    database - 是否可以优化节点具有可选关系的查询?

    graph - Neo4j/Gremlin/密码 : how to get all nodes until i reach a certain distance (depth) in a map-like setup?

    neo4j - 在neo4j(浏览器)中隐藏中间节点

    java - 解析 Neo4J 节点/与 JSon 的关系

    neo4j - 在 neo4j 中使用 Unwind 和 Dumping 数据 - 查询优化

    neo4j - Cypher 2.0 - MERGE 操作

    database - 是否有任何图形数据库允许您首先定义标签和关系(模式)

    java - getRelationships 并不总是返回关系

    neo4j - 如何通过 bolt 协议(protocol)(可能使用 cypher 命令)获取模式?