在Neo4j中创造代谢途径

Vic*_*art 5 neo4j cypher

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

glycolysis_bioentities.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
Run Code Online (Sandbox Code Playgroud)

glycolysis_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
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

...使用此密码(传递给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)
  );
Run Code Online (Sandbox Code Playgroud)

我想创建一个完全连接的路径,在所有节点上都有字幕.建议?

在此输入图像描述

cyb*_*sam 3

[更新]

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

  1. 第二个MERGE应该被删除,因为它创建了孤立节点。关系类型不应调整为节点Glycolysis,并且此类节点永远不会连接到任何其他节点。
  2. 第 1 和第 3MERGE子句必须对源节点和目标节点使用相同的属性名称(例如name),否则相同的化学物质最终可能会产生 2 个节点(具有不同的属性键)。这就是为什么您最终得到的节点没有所有预期的连接。
  3. APOC 过程apoc.cypher.doIt可用于在某种程度上简化MERGE与动态名称的关系。
  4. 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;
Run Code Online (Sandbox Code Playgroud)