NetworksCon R Igraph
NetworksCon R Igraph
igraph
Diciembre, 2017
Algunos programas y paquetes para el analisis de redes
complejas
I Gephi: Programa para la visualizacion y exploracion de todo
tipo de grafos y redes (https://gephi.org/).
I igraph: paquete disponible para R, python y C/C++
(http://igraph.org/redirect.html).
I muxviz: Analisis multinivel y plataforma de visualizacion.
Basado en R y GNU Octave.
I NetworkX: paquete de python para la creacion, manipulacion
y estudio de estructuras, dinamicas y funciones de redes
complejas.
I pajek: Programa para el analisis y visualizacion de grandes
redes.
I SocNetv:Programa para el analisis de redes sociales y su
visualizacion.
I Otros: SNAP, NetMiner, UCINet, GUESS, ORA, Cytoscape,
Orgnet, Polinode, Keyhubs, KeyLines, KXEN, Keynetiq,
Linkurious
igraph
if (!require("igraph")) install.packages("igraph")
library("igraph")
Primeros Ejemplos
Creamos un objeto tipo grafo con 7 vertices y arcos especificados
por los siguientes pares.
#preguntar
is.simple(g)
is.connected(g)
is.connected(gdir,mode="weak") #con. si direcciones ignoradas
is.connected(gdir,mode="strong")#con. por caminos con direcci
#recuperar la matriz de adyacencias
get.adjacency(g)
#extraer subgrficos
h<-induced.subgraph(g, 1:5)
#incluir (o excluir) vertices o arcos a los existentes
h<-h+vertices(6:10)
h<-h+edges(c(6,7),c(7,9),c(7,8),c(8,9), c(7,6))
h<-h-vertices(6,10) #elimina tambi'en los arcos incidentes
h<-h-edges(c(7,8))
#obtener vecinos
neighbors(g,5)
Algunas funciones basicas
Una vez creado el objeto podemos:
g.full<-graph.full(6)
g.ring<-graph.ring(6)
g.tree<-graph.tree(7,children=2,mode="undirected")
g.star<-graph.star(6,mode="undirected")
par(mfrow=c(2, 2))
plot(g.full); plot(g.ring); plot(g.tree); plot(g.star)
g.lattice<-graph.lattice(length=5,dim=2)
plot(g.lattice, layout=as.matrix(expand.grid(1:5, 1:5)))
Aleatorios
mi.layout<-function(g,r,s){
n<-length(V(g))
id<-1:n
angle<-2*pi*(id-1)/n
cbind((1+r*sin(angle*s))*cos(angle),
(1+r*sin(angle*s))*sin(angle))
}
g<-sample_pa(50, m = 2, directed=FALSE)
plot(g,layout=mi.layout(g,0.2,s=2))
plot(g,layout=mi.layout(g,0.2,s=4))
plot(g,layout=mi.layout(g,0.2,s=10))
Embelleciendo las graficas
g<-sample_pa(100, m = 2, directed=FALSE)
plot(g)
gb<-barabasi.game(n=10,power=1)
plot(gb,
layout=layout.fruchterman.reingold,
vertex.size=10, # default is 15
vertex.label.cex=0.7,# tamao de etiquetas
edge.arrow.size=0.9 # tamao de cabezas de fechas
)
Embelleciendo las graficas
arcos.enron<-read.table("Email-Enron.txt",sep="\t",
skip=3)
dim(arcos.enron)
tt<-(as.matrix(arcos.enron)+1)[1:1000,]
enron<-graph_from_edgelist(tt)
plot(enron,
vertex.size=6,
vertex.label=NA,
edge.arrow.size=0.9
)