library(ggraph)
library(ggthemes)
library(dplyr)
library(igraph)
library(pander)

Dataset

Se tiene un dataset que presenta los viajes de unas aerolineas. Se hará mayor enfoque en la información a cerca de los países de origen y destino para la creación de los grafos.

Origen Destino
SFO RDU
ORD MSY
ITO LAX
JAC ORD
MCI IAH
LGA ORD
base_usoo=base_uso %>% group_by(Origen, Destino) %>% summarise(n=n()) %>% arrange(-n)
base_uso2=base_usoo[base_usoo$n>500,]
pander(head(base_uso2))
Origen Destino n
SFO LAX 1420
LAX SFO 1400
JFK LAX 1138
LAX JFK 1138
LGA ORD 994
ORD LGA 984

Primero. Grafo no dirigido

Se mirará un grafo cuyo ancho de las aristas será proporcional a la frecuencia con que se toma esos trayectos de origen a destino. Es decir, entre más cantidad de veces se viaja de un país a otro más ancha será la linea que los une.

g=graph.data.frame(base_uso2,directed = F)

plot.igraph(g,
            edge.curved =T, # Aristas curvas
            edge.color = "black", # Color de aristas
            edge.width = (E(g)-min(E(g)))/12) # Ancho de aristas

A continuación, se elimina los nodos o vertices cuyo grado es menor o igual a 2, es decir no se tendrá en cuenta aquellos nodos que se conectan a otros nodos con solo dos aristas o menos.

new.g<-delete.vertices(graph = g,v = V(g)[degree(graph = g)<=2])

plot.igraph(new.g,edge.curved=T,# Aristas curvas
            edge.color="black", # Color de aristas
            vertex.color="azure3",# Color de nodos o vertices
            edge.width=(E(g)-min(E(g)))/12, # ancho de arista
            layout=layout.auto, # layout es la forma del grafo
            vertex.label.color="black") # color de las etiquetas de los nodos


Segundo. Grafo dirigido

gd=graph.data.frame(d = base_uso2,directed = T)
new_gd=delete.vertices(graph = gd,v = V(graph = gd)[degree(graph = gd,mode = "all")<=2])

A continuación, se presenta un grafo dirigido que tendrá el tamaño de sus nodos proporcional al grado de dicho nodo según número de aristas entrantes. Lo que quiere decir que los países cuyo vertice sea más grande más han sido elegidos como lugar de destino.

plot.igraph(new_gd,
            vertex.size=degree(gd,mode = "in")*2, # Tamaño de nodo
            edge.arrow.size=0.2, # tamaño de flecha de la arista
            edge.arrow.width=0.6, # ancho de flecha de la arista
            edge.color="black", # color de arista
            edge.curved = T, # arista curva
            vertex.label.cex=0.8, # tamaño de las etiquetas de los nodos
            main="Vuelos de Origen a Destino", 
            vertex.label.color="black", # color de las etiquetas de los nodos
            vertex.color="coral", # color de nodos
            #vertex.label.family="arial"
            )


Algunas métricas

Grado de los nodos según aristas de entrada. En orden descendente se muestra los países que más han sido elegidos como destino por los viajeros.

degree(gd,mode = "in") %>% as.data.frame()  %>% arrange(-.) %>% head(5)
##      .
## LAX 12
## ATL 12
## SFO 11
## ORD 11
## DEN  9

Intermediación o betweennes. Es una medida que cuantifica el número de veces que un nodo actua como un puente a lo largo del camino más corto entre otros dos nodos. Lo que quiere decir que los países con mayor valor de esta medida, son los que más han actuado como enlace entre dos países.

betweenness(graph = gd)  %>% as.data.frame()  %>% arrange(-.) %>% head(5)
##            .
## LAX 366.7667
## ATL 301.4000
## SFO 225.2667
## ORD 210.7667
## HNL 174.0000