我需要在Java中使用gephi toolkit开发图形。我有CSV格式的节点和边缘数据。所有工具包教程都具有导入gml或gexf格式的语法。既然我有2个CSV文件可以告诉我使用gephi toolkit jar在Java中导入这个csv的语法吗?
答案 0 :(得分:0)
您可以尝试通过gephi-tool-kit和gephi同时导入csv文件,看看是否有任何问题,现在我将向您展示导入csv文件的方式通过gephi-toolkit一步一步。
我将NetBeans IDE 8.2与gephi-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文件导入的原因。这是我的虚拟代码,希望它能帮助你,并且可能有更好的答案。
<强>参考强>