我有一个如下所示的XML文件:
<rebase>
<Organism>
<Name>Aminomonas paucivorans</Name>
<Enzyme>M1.Apa12260I</Enzyme>
<Motif>GGAGNNNNNGGC</Motif>
<Enzyme>M2.Apa12260I</Enzyme>
<Motif>GGAGNNNNNGGC</Motif>
</Organism>
<Organism>
<Name>Bacillus cellulosilyticus</Name>
<Enzyme>M1.BceNI</Enzyme>
<Motif>CCCNNNNNCTC</Motif>
<Enzyme>M2.BceNI</Enzyme>
<Motif>CCCNNNNNCTC</Motif>
</Organism>
</rebase>
我想将此XML数据可视化为图形格式。连接性使得很多enzymes
可以包含公共motifs
,但没有organims
可以包含类似的enzymes
。我看了d3.js,但我不认为它有我想要的东西。我对于neo4j
似乎提供的可视化感到非常兴奋,但我需要从头开始学习它。但是,我没有遇到任何通过XML数据集在neo4j
中导入或创建图表的好教程。我知道在编程世界中任何事情都是可能的,所以我想知道我可以将数据(最好使用python
)导入neo4j数据库以使其可视化的可能方式。
更新
我尝试了这个answer(在这个问题下的第二个答案)。我创建了他建议的2 CSV
个文件。但是,查询有很多语法错误,例如:
Invalid input 'S': expected 'n/N' (line 6, column 2)
"USING PERIODIC COMMIT"
WITH is required between CREATE and LOAD CSV (line 6, column 1)
"MATCH (o:Organism { name: csvLine.name}),(m:Motif { name: csvLine.motif})"
我的cypher
查询技能非常有限,我无法让任何imports
工作,因此我自己修复查询确实非常困难。任何帮助都将受到高度赞赏
答案 0 :(得分:2)
还有一系列帖子如何将XML导入Neo4j。
首先,您应该将数据的外观建模为图形,您的用例和语义连接需要哪些实体。
一般情况下,如果您可以在python中加载数据,可以使用py2neo或neo4jrestclient(请参阅http://neo4j.org/develop/python)将数据导入模型。
答案 1 :(得分:1)
为此我建议直接使用gephi。至少一年前它完美无缺,它直接支持xml / csv数据格式导入,不需要使用neo4j
作为预处理器。
修改强>
噢,我现在看到了,虽然连接已经包含在内了。在这种情况下,您必须将xml中的所有数据创建为单独的节点 - 每个enzyme
和motif
以及每个organism
的新节点(带参数name
)。那些enzyme
nad motif
个节点必须是唯一的 - 即没有重复。在创建organism
节点时,您可以通过关系将organism
连接到其enzyme
和motif
节点。完成此操作后,查询/可视化类似节点没有问题,因为公共节点共享至少一个enzyme/motif
。
我不知道将数据xml
导入neo4j的任何智能方法,但将它转换为两个csv
文件应该没有问题。该csv的格式将是:
第一个文件:
name,enzyme
Aminomonas paucivorans,M1.Apa12260I
Aminomonas paucivorans,M2.Apa12260I
Bacillus cellulosilyticus,M1.BceNI
Bacillus cellulosilyticus,M2.BceNI
第二个文件(我不明白为什么motif
是重复的想法):
name,motif
Aminomonas paucivorans,GGAGNNNNNGGC
Aminomonas paucivorans,GGAGNNNNNGGC
Bacillus cellulosilyticus,CCCNNNNNCTC
Bacillus cellulosilyticus,CCCNNNNNCTC
现在我们将执行import,这会创建唯一节点和关系(因此上面的重复motifs
只会转换为1个唯一关系)(如果需要) ,也可以与同一个motif
节点建立多个关系:
(我不确定这个导入但它应该有效):
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file1.csv" AS csvLine
MATCH (o:Organism { name: csvLine.name}),(e:Enzyme { name: csvLine.enzyme})
CREATE (o)-[:has_enzyme]->(e) //or maybe CREATE UNIQUE?
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file2.csv" AS csvLine
MATCH (o:Organism { name: csvLine.name}),(m:Motif { name: csvLine.motif})
CREATE (o)-[:has_motif]->(m) //or maybe CREATE UNIQUE?
这将创建具有2个生物节点,4个酶节点和2个基序节点的图。每个生物体节点都应与其酶和基序有关系。完成此操作后,您可以继续前进到开头描述的可视化部分。