美文网首页数据科学与R语言生物信息学与算法
网络-R语言进行网络分析的基础包 igraph

网络-R语言进行网络分析的基础包 igraph

作者: JeremyL | 来源:发表于2020-09-20 21:56 被阅读0次
    network

    #igraph 包介绍

    igraph是一个用于网络分析的库和R包。

    ##igraph的作用

    igraph库的主要目标是提供一组数据类型和功能,以实现以下目的:1)轻松实现图形算法,2)快速处理具有数百万个顶点和边的大型图形,3)允许通过R语言快速进行网络模型制作。

    ##Igraph中的图

    图有一个类' Igraph '。下面是一个示例,一个使用make_ring创建的环形图:

    IGRAPH U--- 10 10 -- Ring graph
    + attr: name (g/c), mutual (g/x), circular (g/x)
    
    • ' IGRAPH '表示这是一个IGRAPH图。

    • 后面是表示图的类型的四个字符:第一个是' U '表示无向图,' D '表示有向图;第二个是' N '标记命名的图。第三个是“W”表示边设置了权重。第四是二部图的“B表示图是双向的。

    • 再后面的两个数字表示顶点和边的数量。

    • 双破折号之后,图的名字

    如果想查看图形的边,可以使用print_all函数:

    > print_all(g)
    IGRAPH badcafe U--- 10 10 -- Ring graph
    + attr: name (g/c), mutual (g/x), circular (g/x)
    + edges:
    [1] 1-- 2 2-- 3 3-- 4 4-- 5 5-- 6 6-- 7 7-- 8 8-- 9 9--10 1--10
    

    ##创建图

    要创建具有给定结构的小图形,graph_from_literal函数可能是最简单的。它使用R的公式界面,它的手册页包含了许多示例。另一种选择是graph函数,它直接接受数值顶点id。graph.atlas从 Graph Atlas创建图,make_graph 函数可以创建一些特殊的图。

    igraph中有很多用于创建图的函数,有确定性的,也有随机的;随机图构造器称为‘games’。

    要从字段数据创建图,graph_from_edgelist、graph_from_data_frame和graph_from_adjacency_matrix可能是最好的选择。

    igraph包括一些经典的随机图,如Erdos-Renyi GNP and GNM graphs (sample_gnp, sample_gnm),以及一些最近流行的模型,如preferential attachment (sample_pa) and the small-world model (sample_smallworld)。

    对于边也是一样,边id总是在1到m之间,m是图中边的总数。

    ##顶点和边IDs

    顶点和边在igraph中都有数值的顶点id。顶点id从1开始,总是连续的。即对于一个有n个顶点的图,顶点id在1到n之间。如果某些操作改变了图中的顶点数,例如通过induced_subgraph创建了一个子图,那么顶点将重新编号以满足这个条件。

    ##属性

    在igraph中,可以将属性赋给图的顶点或边,或者赋给图本身。igraph提供了基于属性值选择一组顶点或边的灵活构造,有关详细信息,请参阅vertex_attr、V和E。

    一些顶点/边/图属性被特殊处理。其中一个是“name”属性。这用于打印图形,而不是数字id(如果存在)。在所有igraph函数中,顶点名称也可以用来指定一个向量或顶点集。例如,度有一个v参数,它给出了度被计算的顶点。这个参数可以作为顶点名称的字符向量给出。

    边也可以有一个“name”属性,这也是特别处理的。就像顶点一样,边也可以根据它们的名字来选择,例如在delete_edges和其他函数中。

    我们注意到,顶点名称也可以用来选择边。形式“from|to”,其中“from”和“to”是顶点名称,选择一个单一的,可能是有方向的,从“from”到“to”的边。这两种形式也可以在同一个边选择器中混合。

    如果您使用save和load来存储/检索图形,那么所有的属性值都将被保留。

    ##可视化

    igraph提供了三种不同的可视化方法。首先是情节。igraph函数。(实际上你不需要写情节。igraph, plot就够了。这个函数使用常规的R图形,可以与任何R设备一起使用。

    第二个函数是tkplot,它使用一个Tk GUI来进行基本的交互式图形操作。(Tk非常需要资源,所以不要对非常大的图尝试这种方法。)

    第三种方法需要rgl包并使用OpenGL。

    ##文件格式

    igraph可以处理各种图形文件格式,通常用于读写。我们建议对图形使用GraphML文件格式,除非图形太大。对于较大的图形,建议采用更简单的格式。有关详细信息,请参阅read_graph和write_graph。

    #安装

    ## Download and install the package
    install.packages("igraph")
    
    ## \## Load package
    library(igraph)
    

    ##示例

    ## A simple example with a couple of actors
    ## The typical case is that these tables are read in from files....
    #节点名称和属性定义,数据可以先整理成数据框格式。
    > actors <- data.frame(name=c("Alice", "Bob", "Cecil", "David",
                                "Esmeralda"),
                         age=c(48,33,45,34,21),
                         gender=c("F","M","F","M","F"))
                         
    name age gender
    Alice  48      F
    Bob  33      M
    Cecil  45      F
    David  34      M
    Esmeralda  21      F
    
    #构建边的信息,包括起始位置等
    > 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))
                            
    from    to same.dept friendship advice
    Bob Alice     FALSE          4      4
    Cecil   Bob     FALSE          5      5
    Cecil Alice      TRUE          5      5
    David Alice     FALSE          2      4
    David   Bob     FALSE          1      2
    Esmeralda Alice      TRUE          1      3
    
    #使用数据框创建igraph图;directed参数设置是否构建有向图
    > g <- graph_from_data_frame(relations, directed=TRUE, vertices=actors)
    > print(g, e=TRUE, v=TRUE)
    > plot(g)
    
    network
    ## The opposite operation
    as_data_frame(g, what="vertices")
    as_data_frame(g, what="edges")
    

    #参考:

    igraph development team
    igraph Tutorials

    系列文章:
    networkD3 绘制动态网络

    相关文章

      网友评论

        本文标题:网络-R语言进行网络分析的基础包 igraph

        本文链接:https://www.haomeiwen.com/subject/lnapyktx.html