Analisis de DataSet para creacion de grafo.

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.

Carga de liberias.

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

Carga de DataSet

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 = ",")

Filtrado de datos por columna “Origen” y “Destino”

Ya que para poder crear el grafico se requería agrupar las columnas de Origen y destino, se llevó el siguiente proceso.

  1. Columna origen: Para determinar cuáles son las ciudades con más concurrencia, inicialmente se creó el filtrado de la columna Origen, la cual, nos muestra las ciudades de las que despegan los vuelos. Para ello, se creó la variable “tablaorigen” y mediante la función “group_by” se especifico que se agruparan el conjunto de filas de la columna Origen, y que además, estas se vallan contabilizando (mediante la función “summarise”) para que postriomente se reordenen (con la funcion arrange). Por último, se imprimen los valores para visualizar las ciudades y el número de estas que hay dentro del conjunto de datos.
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
  1. Columna Destino: Para determinar cuáles son las ciudades con más concurrencia, se genero el filtrado de la columna Destino, la cual, nos muestra las ciudades a las que hay mas vuelos. Para ello, se creó la variable “tabladestino” y mediante la función “group_by” se especifico que se agruparan el conjunto de filas de la columna Destino, y que además, estas se vallan contabilizando (mediante la función “summarise”) para que postriomente se reordenen (con la funcion arrange). Por último, se imprimen los valores para visualizar las ciudades y el número de estas que hay dentro del conjunto de datos.
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

Creacion de tablas de datos ya filtados.

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.

  1. Tabla 1: Se creó la variable “V1Datos” a la cual se le asigno el conjunto de datos y mediante se función “summarise” se juntaron los datos de las columnas origen y destino, para asi, visualizar la cantidad de coincidencias que había en los mismos,y ademas, mediante la funcion “arrange” especificar que los datos se ordenaran.Posteriormente se mostró la tabla.
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

Creacion de grafo.

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:

  1. Creación de un “ColorClúster” para asignar diferentes colores.
  2. Se crea la variable “g” para asignar la tabla que se utilizaría para la realización del gráfico, en este caso “V2Valores”.
  3. Mediante las funciones que ofrece la librería igraph se asignan las características que tendrá el grafo, tales como los colores (asignados mediante el colorcluster), el título, la forma, el tamaño de los nodos (en base a la tabla V1Datos de la columna en la que se encuentran las frecuencias o la cantidad de concurrencias), el grosor y color de los vértices (líneas de conexión), el color del texto, etc.

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.