Gephi API学习笔记1

记录使用Gephi API的学习笔记。

环境配置

  • 安装好JDK环境
  • 安装NetBeans IDE
  • 将gephi-toolkit-0.9.2-all.jar下载完成

下载与安装

  • JDK的配置

下载安装过程略去,详细可参考其他Java环境安装配置的教程

  • NetBeans IDE的下载与安装

下载链接:https://netbeans.org/downloads/index.html,这里有很多不同的下载包,选择适合自己系统的其中一个即可,这里我选择的是Java EE

安装时,按提示一路安装下去即可。

  • gephi-toolkit-0.9.2-all.jar的下载

下载链接:https://gephi.org/toolkit/

将gephi-toolkit作为jar包导入库

  • 新建一个Java应用程序后,在库(library)里右键添加JAR/文件夹然后找到下载的gephi-toolkit文件的jar包即可

一个简单示例

接下来展示一个简单示例,其中Gephi所需的绘图数据文件需要其他放置到相应文件夹中:

在NetBeans IDE中新建一个Java应用,导入gephi-toolkit.jar包后,创建一个主类,这里我将其命名为GephiTestDemo.java。其代码内容为:

package gephitestdemo;

/**
 * @author Qi
 */
public class GephiTestDemo {
    public static void main(String[] args) {
        GephiDemo g = new GephiDemo();
        g.Run();
    } 
}

继续新建一个Java文件名叫GephiDemo.java其代码内容为:

package gephitestdemo;

import java.io.File;
import org.gephi.graph.api.DirectedGraph;
import org.gephi.graph.api.GraphController;
import org.gephi.graph.api.GraphModel;
import org.gephi.io.importer.api.Container;
import org.gephi.io.importer.api.EdgeDirectionDefault;
import org.gephi.io.importer.api.EdgeMergeStrategy;
import org.gephi.io.importer.api.ImportController;
import org.gephi.io.processor.plugin.AppendProcessor;
import org.gephi.io.processor.plugin.DefaultProcessor;
import org.gephi.project.api.ProjectController;
import org.gephi.project.api.Workspace;
import org.openide.util.Lookup;
import org.openide.util.Utilities;

/**
 *
 * @author Qi
 */
public class GephiDemo {
    
    GephiDemo(){
        
    }
    
    /**
     *运行程序
     */
    public void Run(){
         //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("./resources/Critical Power for Asymptotic Connectivity in Wireless Networks/Nodes.csv").toURI());
            container = importController.importFile(file_node);
            container.getLoader().setEdgeDefault(EdgeDirectionDefault.DIRECTED);   //Force DIRECTED
            container.getLoader().setAllowAutoNode(false);  //create missing nodes
            container.getLoader().setEdgesMergeStrategy(EdgeMergeStrategy.SUM);
            container.getLoader().setAutoScale(true);

            File file_edge = new File(getClass().getResource("./resources/Critical Power for Asymptotic Connectivity in Wireless Networks/Edges.csv").toURI());
            container2 = importController.importFile(file_edge);
            container2.getLoader().setEdgeDefault(EdgeDirectionDefault.DIRECTED);   //Force DIRECTED
            container2.getLoader().setAllowAutoNode(false);  //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((org.gephi.io.importer.api.Container) container, new DefaultProcessor(), workspace);
        importController.process((org.gephi.io.importer.api.Container) 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());
    }
    
}

运行正常的话,这里会输出节点数目与边的数目。

但如果导入节点文件后再导入边文件,会导致最后统计的节点数目为原来的两倍,这里我也不知道为什么。可以尝试只导入边文件来将度为0的节点忽略掉,这样不会导致节点重复的。

参考

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐