Para las ciencias de la computación y la matemática, un grafo es una representación gráfica de diversos puntos que se conocen como nodos o vértices, los cuales se encuentran unidos a través de líneas que reciben el nombre de aristas. Al analizar los grafos, los expertos logran conocer cómo se desarrollan las relaciones recíprocas entre aquellas unidades que mantienen algún tipo de interacción.
Para efectos de la práctica se hizo uso de un Data Set que almacena información sobre los vueltos de una aerolínea en México. Dicha actividad a consiste en la creación de un grafo en la que haciendo uso de estos datos y mediante este tipo de grafico se logren visualizar los 10 estados mas concurridos. A continuación, se describe el proceso que se siguió para desarrollar la actividad.
El primer paso para desarrollar el análisis de los datos fue el cargar dos de las librerías que ofrece “R”, estas son igraph y dplyr. Igraph es una librería que ofrece formas sencillas de acceder a vértices y aristas con las funciones V (vertex) y E (edge). Por su parte, dplyr contiene una colección de funciones para realizar operaciones de manipulación de datos comunes como: filtrar por fila, seleccionar columnas específicas, reordenar filas, añadir nuevas filas y agregar datos.
library(igraph)
## Warning: package 'igraph' was built under R version 4.1.3
##
## Attaching package: 'igraph'
## The following objects are masked from 'package:stats':
##
## decompose, spectrum
## The following object is masked from 'package:base':
##
## union
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.1.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:igraph':
##
## as_data_frame, groups, union
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
Después de asignar y cargar las librerías correspondientes, se realizó la carga del DataSet del que se realizaría el análisis. Para ello, se creó la variable “Datos” y mediante la función “read.csv” se asignó el archivo con la ruta en el sistema de archivos del ordenador, posteriormente se especificó que se tomaran en cuenta los títulos y que la separación de los datos se hiciera por medio de una “,”.
datos <- read.csv(file = "c:/R/AEROLINEA.csv",header = TRUE, sep = ",")
Ya que para poder crear el grafico se requería agrupar las columnas de Origen y destino, se llevó el siguiente proceso.
tablaorigen = datos %>% group_by(ï..ORIGEN) %>% summarise(n=n()) %>% arrange(-n)
tablaorigen
## # A tibble: 55 x 2
## ï..ORIGEN n
## <chr> <int>
## 1 MEXICO 49
## 2 TIJUANA 35
## 3 GUADALAJARA 31
## 4 MONTERREY 29
## 5 CANCUN 22
## 6 HERMOSILLO 14
## 7 CHIHUAHUA 13
## 8 CIUDAD JUAREZ 13
## 9 MAZATLAN 11
## 10 QUERETARO 11
## # ... with 45 more rows
tablaDestino = datos %>% group_by(DESTINO) %>% summarise(n=n()) %>% arrange(-n)
tablaDestino
## # A tibble: 55 x 2
## DESTINO n
## <chr> <int>
## 1 MEXICO 49
## 2 TIJUANA 35
## 3 GUADALAJARA 31
## 4 MONTERREY 29
## 5 CANCUN 22
## 6 CHIHUAHUA 13
## 7 CIUDAD JUAREZ 13
## 8 HERMOSILLO 13
## 9 MAZATLAN 11
## 10 SAN LUIS POTOSI 11
## # ... with 45 more rows
Posterior a haber contabilizado y visualizado las ciudades con más número de concurrencias se crearon dos tablas para realizar el filtrado de los datos.
V1Datos = datos %>% summarise(tablaorigen, tablaDestino) %>% arrange(-n)
V1Datos
## ï..ORIGEN n DESTINO
## 1 MEXICO 49 MEXICO
## 2 TIJUANA 35 TIJUANA
## 3 GUADALAJARA 31 GUADALAJARA
## 4 MONTERREY 29 MONTERREY
## 5 CANCUN 22 CANCUN
## 6 HERMOSILLO 13 CHIHUAHUA
## 7 CHIHUAHUA 13 CIUDAD JUAREZ
## 8 CIUDAD JUAREZ 13 HERMOSILLO
## 9 MAZATLAN 11 MAZATLAN
## 10 QUERETARO 11 SAN LUIS POTOSI
## 11 SAN LUIS POTOSI 10 CULIACAN
## 12 CULIACAN 10 LA PAZ
## 13 LA PAZ 10 PUERTO VALLARTA
## 14 PUERTO VALLARTA 10 QUERETARO
## 15 MERIDA 9 MERIDA
## 16 VERACRUZ 8 DEL BAJIO
## 17 DEL BAJIO 8 MEXICALI
## 18 MEXICALI 8 SAN JOSÉ DEL CABO
## 19 SAN JOSÉ DEL CABO 8 VERACRUZ
## 20 LOS MOCHIS 7 LOS MOCHIS
## 21 CIUDAD OBREGON 7 VILLAHERMOSA
## 22 OAXACA 6 CIUDAD OBREGON
## 23 TORREON 6 OAXACA
## 24 TUXTLA GUTIERREZ 6 TAMPICO
## 25 VILLAHERMOSA 6 TORREON
## 26 ACAPULCO 6 TUXTLA GUTIERREZ
## 27 AGUASCALIENTES 5 ACAPULCO
## 28 DURANGO 5 AGUASCALIENTES
## 29 MORELIA 4 DURANGO
## 30 PUEBLA 4 MORELIA
## 31 REYNOSA 4 PUEBLA
## 32 TAMPICO 4 REYNOSA
## 33 CIUDAD DEL CARMEN 3 CIUDAD DEL CARMEN
## 34 Los Cabos 3 Los Cabos
## 35 TAPACHULA 3 TAPACHULA
## 36 TOLUCA 3 TOLUCA
## 37 CHETUMAL 2 CHETUMAL
## 38 COLIMA 2 COLIMA
## 39 HUATULCO 2 HUATULCO
## 40 IXTAPA ZIHUATANEJO 2 IXTAPA ZIHUATANEJO
## 41 LORETO 2 LORETO
## 42 PUERTO ESCONDIDO 2 PUERTO ESCONDIDO
## 43 TEPIC 2 TEPIC
## 44 ZACATECAS 2 ZACATECAS
## 45 CAMPECHE 1 CAMPECHE
## 46 CIUDAD VICTORIA 1 CIUDAD VICTORIA
## 47 COZUMEL 1 COZUMEL
## 48 Ixtepec, Oaxaca 1 Ixtepec, Oaxaca
## 49 LAZARO CARDENAS 1 LAZARO CARDENAS
## 50 MANZANILLO 1 MANZANILLO
## 51 MATAMOROS 1 MATAMOROS
## 52 MINATITLAN 1 MINATITLAN
## 53 NUEVO LAREDO 1 NUEVO LAREDO
## 54 PIEDRAS NEGRAS 1 PIEDRAS NEGRAS
## 55 URUAPAN 1 URUAPAN
2.Tabla dos: Se creo la tabla “V2Datos” haciendo uso de la tabla anteriormente creada para especificar que únicamente se mostraran las 10 primeras ciudades, las cuales, pertenencian a las mas concurridas.
V2Datos = V1Datos[1:10,]
V2Datos
## ï..ORIGEN n DESTINO
## 1 MEXICO 49 MEXICO
## 2 TIJUANA 35 TIJUANA
## 3 GUADALAJARA 31 GUADALAJARA
## 4 MONTERREY 29 MONTERREY
## 5 CANCUN 22 CANCUN
## 6 HERMOSILLO 13 CHIHUAHUA
## 7 CHIHUAHUA 13 CIUDAD JUAREZ
## 8 CIUDAD JUAREZ 13 HERMOSILLO
## 9 MAZATLAN 11 MAZATLAN
## 10 QUERETARO 11 SAN LUIS POTOSI
Después de tener los datos ya filtrados, se realizó la creación del grafo, en donde para desarrollarlo se llevo a cabo el siguiente proceso:
A continuacion se muestra el grafo de los luagres mas concurridos:
colorescluster <- adjustcolor(c("yellow", "pink", "blue"), alpha=.6)
g=graph.data.frame(V2Datos,directed = 1)
plot.igraph(g, vertex.color=colorescluster,
main="Los diez estados de México mas populares para viajar",
edge.curved = F,
vertex.size=V1Datos$n,
edge.arrow.width = 0.6,
edge.color = "black",
edge.arrow.size=0.4,
edge.color="black",
vertex.label.color = "black",
vertex.size = 0.4,)
## Warning in layout[, 1] + label.dist * cos(-label.degree) * (vertex.size + :
## longitud de objeto mayor no es múltiplo de la longitud de uno menor
## Warning in layout[, 2] + label.dist * sin(-label.degree) * (vertex.size + :
## longitud de objeto mayor no es múltiplo de la longitud de uno menor
Dentro del grafo arrojado mediante el análisis y filtrado de datos anteriormente creado, se pueden visualizar en los nodos los nombres de las ciudades con más concurrencia, dentro de las cuales México, Tijuana y Guadalajara ocupan los tres primeros lugares, siguiéndoles Monterrey, Cancún, Hermosillo, chihuahua, ciudad Juárez, Mazatlán y por último Querétaro. En el grafo, cada uno de los nodos enfocado al nombre van conectados a nodos con la cantidad de concurrencia calculada. En base a esto, se puede considerase que el grafico arrojado es un grafo dirigido, ya que cada línea o arco se dirige desde el nodo de origen hasta el nodo de destino.
Con ayuda de un grafo como este, se puede visualizar la relación que hay entre los diferentes estados, así como también ver de una manera más visual cuales son los que tienen más concurrencia prestando principal atención a sus diferentes tamaños y al número del nodo al que van conectados.
Con ayuda de herramientas como R en conjunto con los grafos, se pueden realizar estudios de gran cantidad de datos que nos permitan principalmente ver la relación que existe entre ellos, de forma que, se puedan sacar conclusiones que permitan generar algún tipo de conocimiento.