我可以使用此CSV加载带有密码的neo4j图吗?

时间:2018-02-04 08:49:12

标签: graph neo4j cypher

我是一名医生,试图将药物建模到酶数据库,并开始使用我用来将数据加载到Gephi图形布局程序中的CSV文件。我理解图表数据库的强大功能但是对于密码是文盲:

当前的CSV格式如下:

source;target;arc_type; <- this is an header needed for Gephi import
artemisinin;2B6;induces;
...
amiodarone;1A2;represses;
...
3A457;carbamazepine;metabolizes;

这些示例记录显示了三种类型的关系。药物可以抑制或增加细胞色素,细胞色素可以代谢药物。

有没有办法按原样使用此CSV加载到neo4j并创建图表?

非常感谢。

2 个答案:

答案 0 :(得分:1)

是的,但是您需要安装APOC:Neo4j的有用存储过程列表。您可以在此处找到它:https://neo4j-contrib.github.io/neo4j-apoc-procedures/

然后你应该把你的CSV文件放到Neo4j的import文件夹中,然后运行这些查询:

第一个在:Node(name)上创建唯一约束:

CREATE CONSTRAINT ON (n:Node) ASSERT n.name IS UNIQUE;

然后这个查询导入你的数据:

USING PERIODIC COMMIT 500
LOAD CSV WITH HEADERS FROM 'file:///my-csv-file.csv' AS line
  MERGE (n:Node {name:line.source})
  MERGE (m:Node {name:line.target})
  CALL apoc.create.relationship(n, line.arc_type,{​}, m)

答案 1 :(得分:1)

在neo4j术语中,relationship必须具有&#34;类型&#34;,并且节点可以具有任意数量的labels。看起来您的用例可以通过使用DrugCytochrome标记您的节点而受益。

以下是您的用例的可能neo4j数据模型:

(:Drug)-[:MODULATES {induces: false}]->(:Cytochrome)
(:Cytochrome)-[:METABOLIZES]->(:Drug)

induces属性有一个布尔值,表示药物是否诱导(真实)或抑制(假)相关的细胞色素。

以下是一个(有点复杂的)查询,它从CSV文件生成上述数据模型:

USING PERIODIC COMMIT 500
LOAD CSV WITH HEADERS FROM 'file:///Drugs.csv' AS line FIELDTERMINATOR ';'
WITH line,
  CASE line.arc_type
    WHEN 'metabolizes' THEN {a: [1]}
    WHEN 'induces' THEN {b: [true]}
    ELSE {b: [false]}
  END AS todo
FOREACH (ignored IN todo.a |
  MERGE (c:Cytochrome {id: line.source})
  MERGE (d:Drug {id: line.target})
  MERGE (c)-[:METABOLIZES]->(d)
)
FOREACH (induces IN todo.b |
  MERGE (d:Drug {id: line.source})
  MERGE (c:Cytochrome {id: line.target})
  MERGE (d)-[:MODULATES {induces: induces}]->(c)
)

如果IN之后的值为空,则FOREACH子句不执行任何操作。