Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ya completo #1

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
82 changes: 49 additions & 33 deletions Lab2_Pruebas.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,6 @@ def CrearDataSet():

nuevo_data

#%%
import folium
import pandas as pd
import networkx as nx
from geopy.distance import geodesic

# Cargar el dataset en un DataFrame
data = pd.read_csv("flights_clean.csv")
Expand All @@ -54,29 +49,39 @@ def CrearDataSet():
# Crear un diccionario para almacenar la información de los aeropuertos
aeropuertosS = {}
aeropuertosD = {}


# Diccionario con todos los aeropuertos y su respectiva información
aeropuertos = {}

# Itera a través de las filas del DataFrame para agregar información de aeropuertos al diccionario
for index, row in data.iterrows():
codigo = row['Source Airport Code']
latitud = row['Source Airport Latitude']
longitud = row['Source Airport Longitude']
aeropuertos[codigo] = {'latitud': latitud, 'longitud': longitud}
name = row['Source Airport Name']
city = row['Source Airport City']
country = row['Source Airport Country']
aeropuertos[codigo] = {'latitud': latitud, 'longitud': longitud, 'nombre': name,
'ciudad': city, 'pais': country}

codigo2 = row['Destination Airport Code']
latitud2 = row['Destination Airport Latitude']
longitud2 = row['Destination Airport Longitude']
name2 = row['Destination Airport Name']
city2 = row['Destination Airport City']
country2 = row['Destination Airport Country']

if codigo2 not in aeropuertos:
aeropuertos[codigo2] = {'latitud': latitud2, 'longitud': longitud2}

aeropuertos[codigo2] = {'latitud': latitud2, 'longitud': longitud2, 'nombre': name2,
'ciudad': city2, 'pais': country2}
# Itera a través de las claves y valores del diccionario para agregar nodos al grafo
for codigo_aeropuerto, atributos in aeropuertos.items():
G.add_node(codigo_aeropuerto, **atributos)

# lista que contendra los aeropuertos en los que hay vuelos
conexiones = []
# Iterar a través de las filas del DataFrame para agregar nodos al grafo

# Iterar a través de las filas del DataFrame para agregar aristas ponderadas al grafo
for index, row in data.iterrows():
codigo = row['Source Airport Code']
codigo2 = row['Destination Airport Code']
Expand All @@ -103,17 +108,10 @@ def CrearDataSet():

# El grafo G contiene la información de los aeropuertos y las conexiones con el peso de distancia.


#Crear mapa
mapa = folium.Map()

def ConstruirGrafoConAristasMapa():
for nodo in G.nodes():
latitud = G.nodes[nodo]['latitud']
longitud = G.nodes[nodo]['longitud']

# Agregar un marcador para cada ubicación
folium.Marker([latitud, longitud], popup=nodo).add_to(mapa)

def DibujarAristas():
for u, v in G.edges():
latitud_u = G.nodes[u]['latitud']
longitud_u = G.nodes[u]['longitud']
Expand All @@ -125,12 +123,26 @@ def ConstruirGrafoConAristasMapa():
folium.PolyLine([(latitud_u, longitud_u), (latitud_v, longitud_v)],
color='blue', weight=2.5,
popup=f'Distancia: {peso} km').add_to(mapa)

#Agrega al mapa todas las ubicaciones incluendo las conexiones (muy lento)
def MostrarNodosMapa():
for nodo in G.nodes():
latitud = G.nodes[nodo]['latitud']
longitud = G.nodes[nodo]['longitud']

# Agregar un marcador para cada ubicación
folium.Marker([latitud, longitud], popup=nodo).add_to(mapa)

#DibujarAristas()

mapa.save("mapa.html")

#Ejemplo de prueba para la variable que recibe el codigo del aeropuerto
code = 'MIA'

def Crear10Caminos():
# Utiliza el algoritmo de Dijkstra para encontrar los caminos mínimos desde el vértice de inicio
longitudes_caminos = nx.single_source_dijkstra_path_length(G, "BOG")
longitudes_caminos = nx.single_source_dijkstra_path_length(G, code)

# Ordena el diccionario por las longitudes de los caminos
longitudes_caminos_ordenadas = dict(sorted(longitudes_caminos.items(), key=lambda item: item[1], reverse=True))
Expand All @@ -139,27 +151,24 @@ def Crear10Caminos():
aeropuertos_mas_lejanos = list(longitudes_caminos_ordenadas.keys())[:10]

# Crear un mapa centrado en una ubicación
mapa = folium.Map(location=[aeropuertos["BOG"]['latitud'], aeropuertos["BOG"]['longitud']], zoom_start=6)
folium.Marker(location=[aeropuertos["BOG"]['latitud'], aeropuertos["BOG"]['longitud']],
popup=f'Código: BOG').add_to(mapa)
mapa = folium.Map(location=[aeropuertos[code]['latitud'], aeropuertos[code]['longitud']], zoom_start=6)
folium.Marker(location=[aeropuertos[code]['latitud'], aeropuertos[code]['longitud']],
popup=f'Código: {code}\n Nombre: {aeropuertos[code]["nombre"]}\n Ciudad: {aeropuertos[code]["ciudad"]}\n País: {aeropuertos[code]["pais"]}\n Latitud: {aeropuertos[code]["latitud"]}\n Longitud: {aeropuertos[code]["longitud"]}').add_to(mapa)
# Itera a través de los 10 aeropuertos más lejanos
for aeropuerto in aeropuertos_mas_lejanos:
# Agrega un marcador para cada aeropuerto
folium.Marker(location=[aeropuertos[aeropuerto]['latitud'], aeropuertos[aeropuerto]['longitud']], popup=f'Código: {aeropuerto}').add_to(mapa)
folium.Marker(location=[aeropuertos[aeropuerto]['latitud'], aeropuertos[aeropuerto]['longitud']], popup=f'Código: {aeropuerto}\n Nombre: {aeropuertos[aeropuerto]["nombre"]}\n Ciudad: {aeropuertos[aeropuerto]["ciudad"]}\n País: {aeropuertos[aeropuerto]["pais"]}\n Latitud: {aeropuertos[aeropuerto]["latitud"]}\n Longitud: {aeropuertos[aeropuerto]["longitud"]}').add_to(mapa)

# Calcula la distancia en kilómetros entre el aeropuerto de inicio y el aeropuerto actual
distancia_km = longitudes_caminos_ordenadas[aeropuerto]

latitud = float(aeropuertos[codigo]['latitud'])
longitud = float(aeropuertos[codigo]['longitud'])

# Luego, en folium.PolyLine
"""folium.PolyLine(locations=[(latitud, longitud), (aeropuertos[aeropuerto]['latitud'], aeropuertos[aeropuerto]['longitud'])],
color='blue', weight=2.5, popup=f'Distancia: {distancia_km} km').add_to(mapa)"""
# Luego, en folium.PolyLine
folium.PolyLine(locations=[(aeropuertos["BOG"]['latitud'], aeropuertos["BOG"]['longitud']),
folium.PolyLine(locations=[(aeropuertos[code]['latitud'], aeropuertos[code]['longitud']),
(aeropuertos[aeropuerto]['latitud'], aeropuertos[aeropuerto]['longitud'])],
color='red', weight=2.5, popup=f'Distancia: {distancia_km} km').add_to(mapa)
color='darkcyan', weight=2.5, popup=f'Distancia: {distancia_km} km').add_to(mapa)

# Guarda el mapa en un archivo HTML
mapa.save("mapa.html")
Expand All @@ -173,13 +182,14 @@ def MostrarCaminoMinimo(origen, destino):

# Agregar un marcador para el aeropuerto de origen
folium.Marker(location=[aeropuertos[origen]['latitud'], aeropuertos[origen]['longitud']],
popup=f'Código: {origen}').add_to(mapa)
popup=f'Código: {origen}\n Nombre: {aeropuertos[origen]["nombre"]}\n Ciudad: {aeropuertos[origen]["ciudad"]}\n País: {aeropuertos[origen]["pais"]}\n Latitud: {aeropuertos[origen]["latitud"]}\n Longitud: {aeropuertos[origen]["longitud"]}').add_to(mapa)

# Iterar a través de los aeropuertos en el camino mínimo
for aeropuerto in camino_minimo:
# Agregar un marcador para cada aeropuerto en el camino
folium.Marker(location=[aeropuertos[aeropuerto]['latitud'], aeropuertos[aeropuerto]['longitud']],
popup=f'Código: {aeropuerto}').add_to(mapa)
popup=f'Código: {aeropuerto}\n Nombre: {aeropuertos[aeropuerto]["nombre"]}\n Ciudad: {aeropuertos[aeropuerto]["ciudad"]}\n País: {aeropuertos[aeropuerto]["pais"]}\n Latitud: {aeropuertos[aeropuerto]["latitud"]}\n Longitud: {aeropuertos[aeropuerto]["longitud"]}').add_to(mapa)


# Calcular la distancia en kilómetros entre el aeropuerto actual y el siguiente en el camino
if aeropuerto != destino:
Expand All @@ -190,13 +200,19 @@ def MostrarCaminoMinimo(origen, destino):
# Dibujar una línea entre el aeropuerto actual y el siguiente en el camino
folium.PolyLine(locations=[(aeropuertos[aeropuerto]['latitud'], aeropuertos[aeropuerto]['longitud']),
(aeropuertos[siguiente_aeropuerto]['latitud'], aeropuertos[siguiente_aeropuerto]['longitud'])],
color='blue', weight=2.5, popup=f'Distancia: {distancia_km} km').add_to(mapa)
color='darkcyan', weight=2.5, popup=f'Distancia: {distancia_km} km').add_to(mapa)

# Guardar el mapa en un archivo HTML
mapa.save("mapa.html")

#Ejemplo de el segundo codigo de aeropuerto
code2 = "BVB"

# Llamar a la función para mostrar el camino mínimo desde "BOG" hasta otro aeropuerto
MostrarCaminoMinimo("BOG", "COK")
#MostrarCaminoMinimo(code, code2)
Crear10Caminos()
#MostrarNodosMapa()
#mapa

#Crear10Caminos()

Expand Down
Loading