0% encontró este documento útil (0 votos)
199 vistas15 páginas

NetworksCon R Igraph

Este documento presenta una breve introducción al análisis de redes con R y la librería igraph. Describe algunos programas y paquetes para el análisis de redes complejas como igraph y NetworkX. Explica cómo crear objetos de grafos en R usando igraph, y proporciona ejemplos de funciones básicas como obtener vecinos y el grado de los vértices. También muestra cómo generar grafos especiales, utilizar diferentes layouts, y mejorar la visualización de las redes.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
199 vistas15 páginas

NetworksCon R Igraph

Este documento presenta una breve introducción al análisis de redes con R y la librería igraph. Describe algunos programas y paquetes para el análisis de redes complejas como igraph y NetworkX. Explica cómo crear objetos de grafos en R usando igraph, y proporciona ejemplos de funciones básicas como obtener vecinos y el grado de los vértices. También muestra cómo generar grafos especiales, utilizar diferentes layouts, y mejorar la visualización de las redes.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 15

Breve introduccion al analisis de redes con R y

igraph

L. Leticia Ramrez Ramrez, CIMAT, MEXICO

[email protected]

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

La librera igraph se desarrollo con el objetivo de poder realizar el


analisis de de grandes redes y aprovechar el lenguaje de
progragramacion en el cual estar incrustado con el fin de poner
usarse de forma interactiva.
I igraph es un software que es libre y abierto con licencia GNU
(General Public License)
I igraph esta escrito en ANSI C, lo qeu lo hace portable a varias
plataformas
Lo instalamos desde R con el comando:

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.

g<-graph.formula(1-2, 1-3, 2-3, 2-4, 3-5, 4-5, 4-6,


4-7, 5-6, 6-7)
V(g) #reporta los vrtices
E(g) #reporta los arcos
plot(g)
# alternativamente:
g1 <- graph(edges=c(1,2,2,3,3,1), n=5, directed=F )

gdir<-graph.formula(1-+2, 3-+2, 3++1)


plot(gdir)

# para aadir los nombres:


V(gdir)$name<-c("Eli", "Mary", "Ariel")
# o directamente
gdir.nom <- graph.formula(Eli-+Mary, Ariel-+Mary, Ariel++Eli)
plot(gdir.nom)
Algunas funciones basicas
Una vez creado el objeto podemos:

#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:

#es una red dirigida y sin ciclos?


is.dag(g) #Nota: la ver. no direc. de una DAG puede tener cicl
#saber si dos redes son isomorfas
g2<-g; V(g2)$names<-sample(1:7)
isomorphic(g, g2)
# diametro
diameter(g)
#indagar sobre los componentes conectados
clusters(g)
#cliques
cliques(g,3)
#sucesin de grados (no ordenados)
degree(g) #y cuando g es dirigida:
degree(gdir,mode="in"); degree(gdir,mode="out")
#calcular el dimetro
diameter(g,weight=NA)
Generando algunos grafos especiales
Deterministas

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

g.k.regular<-sample_k_regular(6, 3, directed = FALSE)


g.Gnp<- erdos.renyi.game(20, 0.3)
g.scale.barabasi<-sample_pa(20, m = 2, directed=FALSE)
g.small.WS <- sample_smallworld(1, 20, 3, p=0.05)
par(mfrow=c(2, 2))
plot(g.k.regular); plot(g.Gnp); plot(g.scale.barabasi);
plot(g.small.WS)
Posicion absoluta y relativa de vertices: layouts

plot(g.small.WS, layout=layout_randomly)#aleat. en cuadro


plot(g.small.WS, layout=layout_in_circle) #en circulo
plot(g.small.WS, layout=layout_on_sphere) #en esfera
plot(g.small.WS, layout=layout_with_fr)#Fruchterman-Reingold
plot(g.small.WS, layout=layout_with_kk)
#todas las funciones de posicin disponibles:
layouts <- grep("layout_", ls("package:igraph"),
value=TRUE)[-1]
layouts
Posicion absoluta y relativa de vertices: layouts

Podemos crear nuestro propia funcion de posicion.


Ejemplo

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)

E(g)$color <- "grey"


V(g)$color <- "blue"
V(g)$frame.color <- V(g)$color
V(g)$label <- NA
V(g)$size <- 6
E(g)$width <- 1
plot(g)
V(g)$color[seq(1,length(V(g)),by=2)] <-"red"
plot(g)
Embelleciendo las graficas

Alternativamente, los atributos se pueden especificar dentro de la


funcion plot.

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

# color vertices of the largest component


largest_comp <- function(graph) {
cl <- components(graph)
V(graph)[which.max(cl$csize) == cl$membership]
}
g <- sample_(gnp(100, 2/100),
with_vertex_(size = 3, label = ""),
with_graph_(layout = layout_with_fr)
)
giant_v <- largest_comp(g)
V(g)$color <- "blue"
V(g)[giant_v]$color <- "orange"
V(g)$size[giant_v] <- 7
plot(g)
Graficas interactivas

tkplot(g, canvas.width = 700, canvas.height = 700,


layout=layout_with_fr)
Importando Redes
De la pagina hrefhttps://snap.stanford.edu/data/ pongo disponible
la base Email-Enron.txt con la informacion de correos publicada
por the Feeral Energy Regulation Commision durante su
invetigacion. Los nodeos corresponden a direcciones de correos y si
una direccion envio un correo a otra, se consideran conectados por
un arco (no direccionado).

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
)

También podría gustarte