使用java中的gephi toolkit导入节点和边缘CSV

时间:2017-06-07 03:31:14

标签: toolkit gephi

我需要在Java中使用gephi toolkit开发图形。我有CSV格式的节点和边缘数据。所有工具包教程都具有导入gml或gexf格式的语法。既然我有2个CSV文件可以告诉我使用gephi toolkit jar在Java中导入这个csv的语法吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试通过gephi-tool-kit和gephi同时导入csv文件,看看是否有任何问题,现在我将向您展示导入csv文件的方式通过gephi-toolkit一步一步。

我将NetBeans IDE 8.2gephi-toolkit-0.9.2-all.jar一起使用,并参考github中的几个演示。

在创建一个新的Java项目和一个新的Java类之后,我的测试类名为 Transfer95 ,当然你还需要将gephi-toolkit jar文件添加到你的库中。根据gephi-toolkit的教程和javadoc,使用新工具包有很多变化,似乎可以使用导入方法导入几种不同类型的文件,如gexf和csv文件。

前几行代码与init项目和获取控制器或容器的公共代码相同。

//Init a project - and therefore a workspace
ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);
pc.newProject();
Workspace workspace = pc.getCurrentWorkspace();

//Get controllers and models
ImportController importController = Lookup.getDefault().lookup(ImportController.class);

//Get models and controllers for this new workspace - will be useful later
GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel();

//Import file
Container container;
try {
    File file_node = new File(getClass().getResource("/resourceason2/club_1_1995.csv").toURI());
    container = importController.importFile(file_node);
    container.getLoader().setEdgeDefault(EdgeDirectionDefault.DIRECTED);   //Force DIRECTED
    container.getLoader().setAllowAutoNode(true);  //create missing nodes
    container.getLoader().setEdgesMergeStrategy(EdgeMergeStrategy.SUM);
    container.getLoader().setAutoScale(true);

} catch (Exception ex) {
    ex.printStackTrace();
    return;
}

这里我只是尝试在 ImportExport HeadlessSimple 的演示中使用gexf的相同importController方法导入节点csv文件,并且它工作正常,但在这里我们还需要将边缘csv文件导入网络,我终于找到了 GenerateGraph 演示的答案,它可以将新容器附加到当前工作空间,因此导入csv文件的代码是

    //Init a project - and therefore a workspace
    ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);
    pc.newProject();
    Workspace workspace = pc.getCurrentWorkspace();

    //Get controllers and models
    ImportController importController = Lookup.getDefault().lookup(ImportController.class);

    //Get models and controllers for this new workspace - will be useful later
    GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel();

    //Import file
    Container container,container2;
    try {
        File file_node = new File(getClass().getResource("/resourceason2/club_1_1995.csv").toURI());
        container = importController.importFile(file_node);
        container.getLoader().setEdgeDefault(EdgeDirectionDefault.DIRECTED);   //Force DIRECTED
        container.getLoader().setAllowAutoNode(true);  //create missing nodes
        container.getLoader().setEdgesMergeStrategy(EdgeMergeStrategy.SUM);
        container.getLoader().setAutoScale(true);

        File file_edge = new File(getClass().getResource("/resourceason2/transfer_1_1995.csv").toURI());
        container2 = importController.importFile(file_edge);
        container2.getLoader().setEdgeDefault(EdgeDirectionDefault.DIRECTED);   //Force DIRECTED
        container2.getLoader().setAllowAutoNode(true);  //create missing nodes
        container2.getLoader().setEdgesMergeStrategy(EdgeMergeStrategy.SUM);
        container2.getLoader().setAutoScale(true);

    } catch (Exception ex) {
        ex.printStackTrace();
        return;
    }

这里我们需要将新容器附加到像

这样的工作区
    //Append imported data to GraphAPI
    importController.process(container, new DefaultProcessor(), workspace);
    importController.process(container2, new AppendProcessor(), workspace); //Use AppendProcessor to append to current workspace

最后检查您的网络是否正确

    //See if graph is well imported
    DirectedGraph graph = graphModel.getDirectedGraph();
    System.out.println("Nodes: " + graph.getNodeCount());
    System.out.println("Edges: " + graph.getEdgeCount());

这就是为什么我建议你同时用gephi和gephi-toolkit测试csv文件导入的原因。这是我的虚拟代码,希望它能帮助你,并且可能有更好的答案。

<强>参考