我是一名医生,试图对药物到酶的数据库进行建模,并从一个CSV文件开始,我使用它将数据加载到Gephi图形布局程序中。我知道图形数据库的威力,但我对cypher一无所知:
当前CSV的格式如下:
source;target;arc_type; <- this is an header needed for Gephi import
artemisinin;2B6;induces;
...
amiodarone;1A2;represses;
...
3A457;carbamazepine;metabolizes;这些示例记录显示了三种类型的关系。药物能抑制或增强细胞色素,细胞色素能代谢药物。
有没有办法使用这个CSV来加载到neo4j中并创建图形?
非常感谢。
发布于 2018-02-05 09:45:46
在neo4j术语中,一个relationship必须有“类型”,一个节点可以有任意数量的labels。看起来您的用例可以从使用Drug或Cytochrome标记您的节点中受益。
以下是适用于您的用例的可能的neo4j数据模型:
(:Drug)-[:MODULATES {induces: false}]->(:Cytochrome)
(:Cytochrome)-[:METABOLIZES]->(:Drug)induces属性有一个布尔值,指示药物是诱导(true)还是抑制(false)相关的细胞色素。
下面是一个从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后面的值为null,则FOREACH子句不执行任何操作。
发布于 2018-02-04 18:41:46
是的,这是可能的,但你需要安装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)https://stackoverflow.com/questions/48606320
复制相似问题