• R语言igraph 包-构建网络图


    igaph 是一个项目,目标是建立一条简单,易用的网络分析工具,有 R, python, C/C++ 等语言的具体实现;

    项目主页:

    http://igraph.org/

    在R语言中,对应的就是 igraph 这个R包

    安装:

    install.packages("igraph")

    使用:

    对于图 graph 这种数据结构而言,最基本的元素包括节点(node) 和 边(节点之间的连线,edge);

    igraph 这个R包提供了很多种创建graph的方式,我们先看一个最基本的例子,从数据框创建一个graph;

    我们将要创建的graph 如下:

    可以看到,这个graph 包括5个节点,首先创建一个数据框,这个数据框中的每一行是一个节点,每一列是节点的属性

    代码如下:

    > actors <- data.frame(name=c("Alice", "Bob", "Cecil", "David",
                                "Esmeralda"),
                         age=c(48,33,45,34,21),
                         gender=c("F","M","F","M","F"))
    
    > actors
           name age gender
    1     Alice  48      F
    2       Bob  33      M
    3     Cecil  45      F
    4     David  34      M
    5 Esmeralda  21      F

    actors 这个数据框保存了图中所有节点的信息,共5个节点,有name, age, gender 3种属性;注意节点的属性是自定义的

    接下来创建另外一个数据框,保存边的信息,

    代码如下:

    > relations <- data.frame(from=c("Bob", "Cecil", "Cecil", "David",
    +                                "David", "Esmeralda"),
    +                         to=c("Alice", "Bob", "Alice", "Alice", "Bob", "Alice"),
    +                         same.dept=c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE),
    +                         friendship=c(4,5,5,2,1,1), advice=c(4,5,5,4,2,3))
    > relations
           from    to same.dept friendship advice
    1       Bob Alice     FALSE          4      4
    2     Cecil   Bob     FALSE          5      5
    3     Cecil Alice      TRUE          5      5
    4     David Alice     FALSE          2      4
    5     David   Bob     FALSE          1      2
    6 Esmeralda Alice      TRUE          1      3

    relations 数据框保存了节点之间的连线信息, from, to 两列描述了这条边是从哪个节点到哪个检点,最后的3列是每条边的一些自定义的属性

    当两个数据框创建完成之后,就可以利用 graph_from_data_frame 函数创建一个graph, 代码如下:

    g <- graph_from_data_frame(relations, directed=TRUE, vertices=actors)

    第一个参数是保存edge 信息的数据框,directed 参数控制graph 有无方向,vertices 参数是保存节点信息的数据框

    最后进行一个简单的可视化

    plot(p)

    就可以得到如下所示的图:

     上面只是最基本的可视化的例子,对于graph 而言,有directed graph 和 undirected graph 两种,在可视化的时候,最核心的东西是计算每个节点的位置,对于不同类型的graph, 有不同的自动化的布局算法

     通过layout 参数可以方便的指定,使用不同的布局算法

    代码示例:

    plot(g, layout = layout.fruchterman.reingold)

    效果图如下:

     

    参考资料:

    https://rdatamining.wordpress.com/2012/05/17/an-example-of-social-network-analysis-with-r-using-package-igraph/

    http://kateto.net/networks-r-igraph

  • 相关阅读:
    Java 多线程之CyclicBarrier
    数据库事务隔离级别
    Java SE之Map接口
    (二)Shiro之一些重要的组件和工具类
    (一)Shiro之简介
    Datatables后端分页
    Spring之BeanFactory中Bean的生命周期
    Servlet之生命周期
    设计模式之单例设计模式
    day041 前端HTML CSS基本选择器(未整理完毕)
  • 原文地址:https://www.cnblogs.com/xudongliang/p/6944413.html
Copyright © 2020-2023  润新知