我是一名医生,试图将药物建模到酶数据库,并开始使用我用来将数据加载到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并创建图表?
非常感谢。
答案 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。看起来您的用例可以通过使用Drug
或Cytochrome
标记您的节点而受益。
以下是您的用例的可能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子句不执行任何操作。