En esta parte, utilizaremos los datos de Origen
y Destino
y la frecuencia de de viaje de un lugar a otro, es decir la cantidad de veces que un Origen
esta relacionado con un Destino
.
Para esto, vamos a utilizar grafos, y los visualizaremos tanto con grafos dirigidos como grafos no dirigidos. Estos se ara con las librerias del paquete ggraph
.
# Corro las librerias necesarias
library(ggraph)
library(ggplot2)
# library(ggthemes)
library(dplyr)
library(igraph)
# Leo el csv con los datos
df.vuelos <- read.csv("./csv/vuelos_2021.csv")
df.vuelos
El dataset
ya esta ordenado por Origen y Destino.
Ahora, añadimos una columna contando la frecuencias de estos viajes.
frec.viajes <- df.vuelos %>% select(Origen, Destino) %>% group_by(Origen,Destino) %>% summarise(n=n())
`summarise()` has grouped output by 'Origen'. You can override using the `.groups` argument.
frec.viajes
Habiendo tomado las freciencias de los viajes segun origen y destino, ya tenemos la información necesaria para podes visualizar lo que pasa con algun tipo de grafo.
Tomemos los datos y produscamos un grafo no dirigido donde el ancho del hilo de unión entre dos aeropuertos represente la cantidad de vuelos que hay entre estos dos aeropuertos.
# Tomo el dataframe del grafo y pido que no sea dirigido
grafo <- graph.data.frame(frec.viajes, directed = F)
plot.igraph( grafo,
vertex.frame.color = "Forestgreen",
vertex.size=degree(grafo, mode = "out"),
vertex.label.cex=c(2,2.5,3),
vertex.label.dist=0,
edge.color="black",
edge.curved = F,
edge.width = E(grafo)/30)
En el grafo se puede visualizar que la mayoria de los viajes salen o de EZE
o de AER
. Entonces, tendria sentido preguntarse si hay alguna diferencia entre los vuelos que salen de EZE
(o llegan) y los de AER
.
Hagamos el grafo, pero tomando un origen y viendo que pasa con cada uno de estos.
## La idea de este codigo es que cuando ustedes lo tengan a mano
## si oueden correrlo con , fig.show='animate' ouedan ver la
## Secuencia de como esta cada uno relacionado con todos.
## A mi me falto tener instalado ffmep en windows cosa
## que se me complico instalar antes de la entrega
grafica.grafo.origen <- function(df, filtro){
# Filtra el dataset
dt <- df %>% filter(Origen == filtro)
# crea el grafo
gf <- graph.data.frame(dt, directed = F)
# Dibuja el grafo
plot.igraph( gf,
vertex.frame.color = "Forestgreen",
vertex.label.cex=c(1.5,1,0.5),
vertex.label.dist=0,
edge.color="black",
edge.curved = F,
edge.width = E(gf)/30)
}
nombres <- names(table(frec.viajes$Origen))
for (i in (1:4)){
grafica.grafo.origen(frec.viajes, nombres[i])
}
NA
Necesitaria agregar las coordenadas de origenes y destino.
coord.origen <- df.vuelos %>% select(Origen, long.origen, lat.origen)
orig <- table(coord.origen$Origen)
longs <- table(coord.origen$long.origen)
dim(orig)
[1] 35
dim(longs)
[1] 36
orig
AER BAR BCA CAT CBA CHP CRR CRV DOZ DRY ECA ESQ EZE GAL GRA IGU JUA JUJ MDP NEU OSA PAR
5458 1645 149 21 1504 138 115 348 1022 11 486 80 4693 226 83 519 187 311 338 659 51 50
POS ROS SAL SDE SIS SRA SVO TRC TRE TUC UIS USU VIE
210 352 675 151 174 68 56 52 268 513 68 681 65
longs
-72.0530451840514 -71.1593078789764 -71.1406808520164 -71.136651782164 -69.3079189026267 -68.7938610497928
486 1638 138 79 226 1021
-68.4187752541459 -68.4031998682355 -68.3081049861187 -68.1544361990665 -67.7530829770762 -67.4655327946096
183 71 684 673 83 347
-66.7923488935793 -66.3562805328339 -65.7527107900176 -65.4843872446955 -65.2686989064158 -65.1034976908493
2 70 21 677 269 11
-65.1022544666745 -65.0991094243988 -64.3100211158383 -64.2748450739449 -64.2692882582764 -64.2082032341871
512 315 150 51 53 1482
-62.9992672145635 -62.1537984793454 -60.8118014885171 -60.7852315547043 -60.480481255287 -59.0572367358005
71 147 58 352 52 180
-58.7620000607308 -58.5424618655614 -58.413428 -57.5740449979357 -55.9712220853889 -54.4758314486937
117 4697 5435 340 211 525
Vemos que, al parecer, tenemos algunos problemas con las coordenadas, pues no tenemos iguales longitudes de origenes con longitudes de origenes (Deberiamos ver porque pasa esto).
Tomemos entonces el archivo viejo sobre coordenadas en ANAC para unirlo con el dataset de frecuencias.
data.coordenadas <- read.csv("./csv/sna_abril_2021_fixed_encoding.csv", encoding = 'UTF-8')
data.coordenadas <- data.coordenadas %>%
select(fna, ana, x, y) %>%
rename(
aeropuerto = fna,
codigo.ANAC = ana,
longitud = x,
latitud = y
)
df.origen <- merge( x=frec.viajes, y=data.coordenadas,
by.x='Origen', by.y='codigo.ANAC')
df.destino <- merge(x=frec.viajes, y=data.coordenadas,
by.x='Destino', by.y='codigo.ANAC')
df.destino <- df.destino %>% arrange(Origen, n )
df.origen <- df.origen %>% arrange(Origen, n )
new.df.frec.viajes <- df.origen %>%
mutate(
lat.des = df.destino$latitud,
long.des = df.destino$longitud
) %>%
rename(
lat.or = latitud,
long.or = longitud,
)
new.df.frec.viajes
Ahora si tenemos todo como queriamos. Sabiendo que tenemos \(35\) Origenes posibles, intentemos armar los grafos para cada aeropuerto representandolo en un mapa. Esto nos permitira visualizar de una mejor manera lo que pasa entre los enlaces de aeropuetos.
colors()[1]
[1] "white"
library(ggmap)
library(maps)
library(mapdata)
library(geosphere)
# Tomo datos coordenados de argentina, segun el dataframe dado por map_data
arg <- map_data("world", region = "Argentina")
# Limites coordenados aproximados de Argentina
# los calculo como el maximo y el minimo de las coordenadas en el dataframe
xlim <- c(min(arg$long), max(arg$long))
ylim <- c(min(arg$lat), max(arg$lat))
# Origen (string) identificara el origen segun el dataframe que tenemos
# El color (string) sera un color que represente a este origen
ploteo <- function(origen, color) {
df.Origen <- new.df.frec.viajes %>%
filter(
Origen == origen
) %>%
select( long.or, lat.or, long.des, lat.des, n)
for (i in (1:length(df.Origen$long.or))){
inter <- gcIntermediate(c(df.Origen$long.or[i], df.Origen$lat.or[i]),
c(df.Origen$long.des[i], df.Origen$lat.des[i]),
n = df.Origen$n[i]*3,
addStartEnd=TRUE,
breakAtDateLine=T
)
lines(inter, col=color, lwd=df.Origen$n[i]/100)
}
}
# Creo un mapa para la Argentina
map( 'world', col="#cfcfcf", fill=TRUE, bg="white", lwd=0.05, xlim=xlim, ylim=ylim)
# Creo un vector con los origenes segun la variable orig usada mas arriba
vec.origenes <- names(orig)
for (i in (1:length(vec.origenes))){
ploteo(vec.origenes[i], colors()[i+7])
cat("Origen: ", vec.origenes[i], "color identificador : ", colors()[i+10], "\n")
}
Origen: AER color identificador : aquamarine3
Origen: BAR color identificador : aquamarine4
Origen: BCA color identificador : azure
Origen: CAT color identificador : azure1
Origen: CBA color identificador : azure2
Origen: CHP color identificador : azure3
Origen: CRR color identificador : azure4
Origen: CRV color identificador : beige
Origen: DOZ color identificador : bisque
Origen: DRY color identificador : bisque1
Origen: ECA color identificador : bisque2
Origen: ESQ color identificador : bisque3
Origen: EZE color identificador : bisque4
Origen: GAL color identificador : black
Origen: GRA color identificador : blanchedalmond
Origen: IGU color identificador : blue
Origen: JUA color identificador : blue1
Origen: JUJ color identificador : blue2
Origen: MDP color identificador : blue3
Origen: NEU color identificador : blue4
Origen: OSA color identificador : blueviolet
Origen: PAR color identificador : brown
Origen: POS color identificador : brown1
Origen: ROS color identificador : brown2
Origen: SAL color identificador : brown3
Origen: SDE color identificador : brown4
Origen: SIS color identificador : burlywood
Origen: SRA color identificador : burlywood1
Origen: SVO color identificador : burlywood2
Origen: TRC color identificador : burlywood3
Origen: TRE color identificador : burlywood4
Origen: TUC color identificador : cadetblue
Origen: UIS color identificador : cadetblue1
Origen: USU color identificador : cadetblue2
Origen: VIE color identificador : cadetblue3
points(x=new.df.frec.viajes$long.des,
y=new.df.frec.viajes$lat.des,
col="slateblue", cex=2, pch=20)
text(new.df.frec.viajes$Destino,
x=new.df.frec.viajes$long.des,
y=new.df.frec.viajes$lat.des,
col="#ff8142", cex=1, pos=4)
Faltaria emprolijar.