XML数据的图形可视化

时间:2014-08-04 00:32:00

标签: python xml neo4j

我有一个如下所示的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个文件。但是,查询有很多语法错误,例如:

  1. Invalid input 'S': expected 'n/N' (line 6, column 2) "USING PERIODIC COMMIT"
  2. WITH is required between CREATE and LOAD CSV (line 6, column 1) "MATCH (o:Organism { name: csvLine.name}),(m:Motif { name: csvLine.motif})"
  3. 我的cypher查询技能非常有限,我无法让任何imports工作,因此我自己修复查询确实非常困难。任何帮助都将受到高度赞赏

2 个答案:

答案 0 :(得分:2)

还有一系列帖子如何将XML导入Neo4j。

首先,您应该将数据的外观建模为图形,您的用例和语义连接需要哪些实体。

一般情况下,如果您可以在python中加载数据,可以使用py2neo或neo4jrestclient(请参阅http://neo4j.org/develop/python)将数据导入模型。

答案 1 :(得分:1)

为此我建议直接使用gephi。至少一年前它完美无缺,它直接支持xml / csv数据格式导入,不需要使用neo4j作为预处理器。

修改

噢,我现在看到了,虽然连接已经包含在内了。在这种情况下,您必须将xml中的所有数据创建为单独的节点 - 每个enzymemotif以及每个organism的新节点(带参数name )。那些enzyme nad motif个节点必须是唯一的 - 即没有重复。在创建organism节点时,您可以通过关系将organism连接到其enzymemotif节点。完成此操作后,查询/可视化类似节点没有问题,因为公共节点共享至少一个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个基序节点的图。每个生物体节点都应与其酶和基序有关系。完成此操作后,您可以继续前进到开头描述的可视化部分。