栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【R语言实例】igraph — 网络分析与可视化包(1)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【R语言实例】igraph — 网络分析与可视化包(1)

作者简介: 本文作者系大学统计学专业教师,多年从事统计学的教学科研工作,在随机过程、统计推断、机器学习领域有深厚的理论积累与应用实践。

igraph是一套用于网络分析与可视化的r包,它以高效、便捷、使用简单的特点在网络分析研究中广泛采用。igraph可以在R环境下免费下载安装,目前也有Python实现的igraph. 本文将介绍如何使用igraph包进行基础的网络分析与可视化。

1. igraph 网络

首先,清除R环境里的所有对象后,加载igraph包。

# Remove all the objects we created so far.
rm(list = ls())
library(igraph) 
1.1 产生一个网络

我们产生一个有3个结点的无向图。它的结点用1, 2, 3表示,边分别是1–>2, 2–>3, 3–>1.

g1 <- graph( edges=c(1,2, 2,3, 3, 1), n=3, directed=F ) 
# A simple plot of the network
plot(g1)


g1是一个igraph对象。现在,我们生成一个10结点的有向图。

g2 <- graph( edges=c(1,2, 2,3, 3, 1), n=10 )
plot(g2) 

g3 <- graph( c("John", "Jim", "Jim", "Jill", "Jill", "John")) # named vertices
# When the edge list has vertex names, the number of nodes is not needed
plot(g3)

g4 <- graph( c("John", "Jim", "Jim", "Jack", "Jim", "Jack", "John", "John"), 
             isolates=c("Jesse", "Janis", "Jennifer", "Justin") )  
# In named graphs we can specify isolates by providing a list of their names.
plot(g4, edge.arrow.size=.5, vertex.color="gold", vertex.size=15, 
     vertex.frame.color="gray", vertex.label.color="black", 
     vertex.label.cex=0.8, vertex.label.dist=2, edge.curved=0.2) 


下面的代码生成不同风格的图。

plot(graph_from_literal(a---b, b---c)) # the number of dashes doesn't matter

plot(graph_from_literal(a--+b, b+--c))

plot(graph_from_literal(a+-+b, b+-+c)) 

plot(graph_from_literal(a:b:c---c:d:e))

gl <- graph_from_literal(a-b-c-d-e-f, a-g-h-b, h-e:f:i, j)
plot(gl)

1.2 边、结点与网络属性

显示边与结点

E(g4) # The edges of the object

+ 4/4 edges (vertex names):
[1] John->Jim Jim ->Jack Jim ->Jack John->John

V(g4) # The vertices of the object

+ 7/7 vertices, named:
[1] John Jim Jack Jesse Janis Jennifer Justin

显示网络矩阵

g4[]

g4[1,]

V(g4)$name # automatically generated when we created the network.

1.3 图与图模型 空图
eg <- make_empty_graph(40)
plot(eg, vertex.size=10, vertex.label=NA)

完全图
fg <- make_full_graph(40)
plot(fg, vertex.size=10, vertex.label=NA)

星型图
st <- make_star(40)
plot(st, vertex.size=10, vertex.label=NA) 

树型图
tr <- make_tree(40, children = 3, mode = "undirected")
plot(tr, vertex.size=10, vertex.label=NA) 

环形图
rn <- make_ring(40)
plot(rn, vertex.size=10, vertex.label=NA)

Erdos-Renyi 随机图
# ‘n’ is number of nodes, ‘m’ is the number of edges
er <- sample_gnm(n=100, m=40) 
plot(er, vertex.size=6, vertex.label=NA)  
Watts-Strogatz small-world model
# Creates a lattice (with dim dimensions and size nodes across dimension) and rewires edges 
# randomly with probability p. The neighborhood in which edges are connected is nei. 
# You can allow loops and multiple edges.
sw <- sample_smallworld(dim=2, size=10, nei=1, p=0.1)
plot(sw, vertex.size=6, vertex.label=NA, layout=layout_in_circle)

Rewiring a graph

each_edge() 是一个rewiring方法,它以概率prob均匀地随机改变边的终端,即,重新定义边。

rn.rewired <- rewire(rn, each_edge(prob=0.1))
plot(rn.rewired, vertex.size=10, vertex.label=NA)

未完待续

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/918696.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号