Anda di halaman 1dari 9

print(matriz[tipo matriz[:,0]])

Escuela Superior Politécnica del Litoral


Fundamentos de Programación
Proyecto Segundo Parcial
2018 – 1T

Descripción:
Se le ha pedido a usted que desarrolle un programa para explorar los atractivos turísticos que tiene el
Ecuador. El programa permite consultar los lugares turísticos del ecuador filtrando los resultados por
algunos criterios, recomendar lugares turísticos a usuarios basándose en su perfil, consultar lugares
turísticos cerca de usted y realizar un análisis estadístico de los atractivos del país.

A usted se le proporciona los siguientes archivos


 sitios_turisticos.csv, con la información de los lugares turísticos del país
 aeropuertos.csv, con la información de los aeropuertos del país
 reseñas.txt, con las reseñas que los turistas han hecho a sitios del país.

Cada línea del archivo sitios_turistico.csv corresponde a un punto turístico del ecuador y contiene
información la siguiente información:

Codigo, Nombre, TipoLugar, Provincia, Ciudad, Latitud, Longitud, Actividades

En la Tabla 1 a continuación se presenta una descripción de cada campo

Tabla 1 – Descripción de los campos del archivo sitios_turisticos.csv


Nombre Campo Descripción
Código Código numérico del lugar
Nombre Nombre descriptivo del lugar turístico
Tipo Lugar Tipo de lugar (Rio, Represa, Mirador, Cascada, Parque Nacional, Reserva,
Iglesia, Montaña, Volcán, Complejo Arquelógico, Laguna, Museo,
Cementerio, Reserva Ecologica, Archipielago, Balneario, Isla, Playa,
Atractivo Turistico, Parque, Zoologico, Acuario, Bosque, Selva)
Provincia Provincia del país en la que está ubicado el punto
Ciudad Ciudad del país donde está ubicado el punto
Latitud Latitud geográfica del lugar turísticos
Longitud Longitud geográfica del lugar turístico
Actividades Actividades que se pueden realizar en el lugar separadas por ¨;¨

Un ejemplo de unas líneas del archivo sitio_turistico.csv se muestra a continuación


1, Laguna Grande,Laguna,Sucumbíos,Cuyabeno,-0.0554326,-79.2607628 paseo bote
2, Baños De Agua Santa,Balneario,Tungurahua,Baños,-1.3928344,-78.4268758,ciclismo; mirador; rafting; pase caballo
3, Parque Nacional de los Llanganates,Parque Nacional,Tungurahua,Baños de Agua Santa,-1.1945173,-
78.3613482,senderismo; ascenso montaña
4, Rio Bomboscaro,Rio,Zamora Chimchipe,Zamora,-4.0620941,-78.948623 senderismo; paseo bote

Imagen 1- Ejemplo archivo con lugares turísticos

Cada línea del archivo aeropuertos.csv corresponde a un aeropuerto del ecuador y contiene
información la siguiente información:
Id, Nombre, Ciudad, Latitud, Longitud
En la Tabla 2 a continuación se presenta una descripción de cada campo

Tabla 2 – Descripción de los campos del aeropuertos.csv


Nombre Campo Descripción
Id Código numérico del aeropuerto
Nombre Nombre del aeropuerto
Provincia Provincia del país en la que está ubicado el punto
Ciudad Ciudad del país donde está ubicado el aeropuerto
Latitud Latitud geográfica del lugar turísticos
Longitud Longitud geográfica del lugar turístico

El reseñas.txt tiene el siguiente formato:

Codigo: 39
Puntaje: 5
Comentario: Buen lugar para pasear en familia o solitario.

Codigo: 18
Puntaje: 4
Comentario: Viaje en tren es de 40 minutos de ida y 40 de regreso. Uno se queda 1 y poco más en la
parte baja . Buenas vistas. Buenas fotos

Codigo: 39
Puntaje: 2
Comentario: El lugar es muy bonito y podría llegar a ser de los lugares más hermosos del mundo. Es
una pena que no tengan una educación por el respeto a la naturaleza y que todos los lugares estén
sucios, llenos de basura
….

Hay una línea en blanco entre cada nueva reseña.


Para un mismo sitio puede haber múltiples reseñas.
El rating de un sitio es el promedio de las calificaciones de las reseñas para ese sitio.

Programa Principal

Usted debe crear un programa que tenga las siguientes opciones:

1. Recomendar Sitios Turísticos


Esta opción le pide al usuario que ingrese provincia, tipo lugar y actividades en las que está
interesado (una o varias separadas por comas) y muestra los lugares turísticos dentro del
criterio de búsqueda, ordenadas del que tiene mayor ranking al que tiene menor rankings. Si el
usuario ingresa todos para alguno de los criterios, no se filtra para ese criterio.
Después de mostrar la lista, el programa pide al usuario el código del lugar que quiere ver a
detalle o “volver” para regresar al menú anterior.
A continuación, un ejemplo de la ejecución de esta opción.
Ingrese Opción del menú: 1
Tipo Lugar: todos
Actividades: snorkeling, nadar
Provincia: Manabí
Cod Lugar Provincia Ciudad Ranking Actividad
54 Parque Nacional Machalilla Manabí Puerto Machalilla 4.7 senderismo;nadar;snorkeling;paseo
bote;ciclismo
55 Ayampe Manabí Puerto López 4 nadar;snorkeling

Ingrese código del lugar o volver: 54

Descripción detallada ‘Parque Nacional Machalilla’


Tipo Lugar: Parque
Provincia: Manabí
Ciudad: Puerto Machalilla
Actividades: senderismo; nadar; snorkeling; paseo bote; ciclismo
Coordenadas Geográficas: (-1.5202275, -80.715857)

Ingrese código del lugar o volver: volver


Imagen 2 – Ejemplo de ejecución de la opción 2

Además de mostrar los resultados en consola se debe mostrar la ubicación de los


atractivos turísticos en un mapa.
Para generar un mapa que tenga puntos geográficos puede usar la librería folium.
Folium no es parte del core de python por lo que antes de usarla debe instalarla.

A continuación, un ejemplo

Link oficial de la librería: https://python-visualization.github.io/folium/quickstart.html

2. Consultar sitios cercanos


Esta opción le debe pedir al usuario su ubicación actual y una distancia máxima y debe calcular
la distancia desde punto ingresado a cada uno de los sitios turísticos y mostrar los lugares
turísticos que se encuentran a una distancia no mayor a la distancia ingresada ordenados del
más cercano al más lejano.
La opción debe mostrar el id, nombre del lugar, distancia, el nombre del aeropuerto que se
encuentra en la misma ciudad del sitio (si lo hay, si no hay aparecerá vacía) y el tiempo
(hh:mm) en llegar al sitio de acuerdo al tiempo de transportación seleccionado y el link a
google maps Los tipos de transportación válidos son: pie, bicicleta, carro

A continuación, se muestra un ejemplo de ejecución del programa.

Ingrese Opción del menú: 2


Ingrese ubicación actual: malecón, guayaquil
Ingrese distancia máxima (km): 10
Tipo de transportación: bicicleta

Cod Lugar Provincia Ciudad Distancia Tiempo Aeropuerto Link


Link
39 Malecon 2000 Guayas Guayaquil 0.0007 00:00 Jose Juaquin.. ..
37 El Faro Guayas Guayaquil 0.5491 00:07 Jose Juaquin.. ..
40 Museo Histórico De Abdón Calderón Guayas Guayaquil 0.9333 00:11 Jose Juaquin.. ..
38 Parque Historico De Guayaquil Guayas Guayaquil 1.4348 02:52 Jose Juaquin.. ..

Imagen 3 – Ejemplo de ejecución de la imagen 3

a. El link en google maps a una lugar se forma reemplazando “lat,long” en


http://www.google.com/maps?q=lat,lng por la latitud y longitud del punto. Es así que
para Baños de Agua Santa que se encuentra en (-1.3928344,-78.4268758) el link sería
http://www.google.com/maps?q=-1.3928344, -78.4268758

b. Para calcular la distancia entre dos coordenadas geográficas puede usar la Fórmula del
Haversine. La fórmula es

donde
R -> 6378 km
lat2 y long2 -> latitud y longitud del punto de llegada en radianes
lat1 y long1 -> latitud y longitud del punto de partida en radianes
d -> la distancia entre los dos puntos

Nota: Los valores de latitud y longitud dados en la data está en grado centígrados,
por lo que los debe transformar en radianes antes de hallar la distancia.

La librería math de Python contiene la funcione geométricas que se usan en esta


fórmula.

c. Para obtener las coordenadas geográficas de una dirección ingresada usted debe
usar el API de Geocoding de Google Maps. Este API proporciona una forma directa
de obtener las coordenadas geográficas de un lugar a partir de una dirección a
través de una solicitud HTTP.
Request http:// maps.googleapis.com..

HTTP GET Servidor


Cliente
Google
Response
{results 200 ok
:{
….
}}

JSON

Ejemplo de cómo funciona un API

Copie y pegue la siguiente URL en el navegador WEB de su preferencia:


https://maps.googleapis.com/maps/api/geocode/json?address=malecon,+guayaquil

Al hacer esto estamos haciendo una petición GET al servicio identificado por la URL.

Como respuesta a la petición al API, se muestra una página con datos acerca del lugar
que consultamos.

Esta es la información que nos


interesa. Aquí vemos que el
malecón de guayquil se encuentra
en:
Latitud: -2.19373
Longintud: -79.879

La data mostrada está en formato JSON, que es una forma de representar datos, que
se asemeja a un diccionario.

La forma generla del API es:


En formato de salida que usaremos será: json
El API puede recibir varios parámetros, pero los único obligatorios son: address ,
.

 address: Es la dirección de la cual quiere obtener la ubicación


 key: Es el API key dado a usted como desarrollador

Para obtener su API Key consulte el documento adjunto que dice como obtenerlo.

El módulo request de Python permite realizar peticiones http. Este módulo no es parte
de la librería por lo que tiene que instalarlo para poder usarla.

El móduclo json permite fácilmente leer JSON data (cuál es una forma de organizar
data en diccionarios).

Referencias:
 http://docs.python-requests.org/en/latest/
 https://developers.google.com/maps/documentation/geocoding/intro/

3. Agregar nuevo sitio turístico.


Esta opción le permite al usuario ingresar la información de un nuevo sitio turísticos.
Los sitios ingresados deben estar presentes en las siguientes ejecuciones del
programa.

4. Generar itinerario de Visita.


Esta opción recibe un listado de sitios turísticos que la persona está interesado en
visitar y la ubicación actual de la persona y retorna cuál sería la mejor ruta para
visitarlos a todos. La mejor ruta es siempre ir al punto más cercano desde la
ubicación actual.
Esta opción debe mostrar la ruta de visitas con el tiempo estimado de llegar de un
punto a otro para los tres medios de transportación disponibles.

Lugares a visitar: Parque La Familia En Ambato, Casa De Montalvo En Ambato, Baños


De Agua Santa
Punto de Partida: centro de Ambato

Pie Bicicleta Automóvil


Casa De Montalvo En Ambato xxx xxx xxx
Parque La Familia En Ambato xxx xxx xxx
Baños De Agua Santa xxx xxx xxx

5. Hacer Reseña sitio.


Esta opción permite escribir una reseña acerca de un sitio turístico. El usuario ingresa
el nombre del sitio del que quiere hacer la reseña, una puntación entre 1 y 5 y un
comentario acerca del sitio. La información ingresada por el usuario se debe agregar
al archivo de reseñas.

6. Consultar Reseña Sitio


El usuario debe ingresar el nombre de un sitio y mostrar las reseñas efectuadas por
los usuarios al sitio. Por cada reseña mostrar calificación y comentario. Además, se
debe mostrar la calificación promedio.

En su programa usted debe obligatoriamente implementar las siguientes funciones:

1. Cree una función que reciba el código de un sitio y el nombre del archivo con las
reseñas de los turistas y retorne el rating promedio del sitio pasado como parámetro.
Si para el sitio pasado como parámetro no existe ningún comentario, el rating
devuelto será 5.
2. Cree una función que reciba el nombre del archivo donde se encuentran los sitios
turísticos y retorne un diccionario donde las claves son los nombres de las provincias
y los valores son diccionarios con la información de sitios que pertenecen a cada
provincia. La ubicación del sitio debe almacenarse como una tupla y las actividades
como un conjunto. A continuación, se muestra un ejemplo del diccionario que se debe
generar.
{
'Santo Domindo de los Stáchilas': {
'Bosque La Perla': { 'codigo': 75,
'ciudad': 'Santo Domingo',
'actividades': {'senderismo'},
'ubicacion': (-0.014502, -79.3866092),
'raiting': 4,
'tipo_lugar': 'Bosque'},
'Parque Zacay': { 'codigo': 74,
'ciudad': 'Santo Domingo',
'actividades': {'cultural'},
'ubicacion': (-0.2541717, -79.1688151),
'raiting': 3.9,
'tipo_lugar': 'Parque'}
},
'Napo': {
'Puerto Misahuallí': { 'codigo': 60,
'ciudad': 'Tena',
'actividades': {'paseo bote; cultural'},
'ubicacion': ('-1.0348151', '-77.6670608'),
'raiting': '3.7',
'tipo_lugar': 'Balneario'},
..}
..
}

3. Cree una función que reciba como parámetro dos tuplas con la ubicación de dos
puntos goegráficos y retorne la distancia en kilómetros entre ambos puntos. Cada
tupla tiene los valores (lat, long). Use la fórmula de distancia Harvesine explicada en
el punto 2 para esta función.
4. Cree una función que reciba una dirección y retorne la coordenada geográfica en las
que se encuentra esa dirección.
5. Cree una función que genero un arreglo de una dimensión que las distancias desde un
punto geográfico a cada uno de los sitios turísticos. La función recibe como parámetro
la tupla con la coordenada, el diccionario de sitios y retorna el arreglo de distancias y
la lista de los sitios usadas para generar las distancias.
6. Defina una función que retorne una matriz con todos los tiempos (en minutos) entre
los puntos turísticos y el tiempo que tomaría alcanzarlos desde un punto dado usando
diferentes medios de transportación. El tiempo se define como la relación entre la
distancia y la velocidad.

Los medios de transportación con sus velocidades promedios son:


 A pie: 2 km/h
 Bicicleta: 5 km/h
 Carro: 60 km/h


Ejemplo de la matriz generada (0.933, 14.38)

PIE BICICLETA VEHÍCULO


Museo Histórico De Abdón Calderón 28 11.12 1
Parque Historico De Guayaquil 431 172 14
Consideraciones Finales
 El menú debe ejecutarse continuamente.
 Su programa no se debe caer en medio de la ejecución.
 Debe dividir su programa en funciones. No se aceptarán proyectos que no hagan uso
de funciones y tengan toda la implementación en el menú principal
 Las funciones aquí indicadas son las mínimas necesarias, usted puede definir más
funciones si lo cree necesario (y realmente son necesarias más funciones).
 El proyecto es en grupo de dos personas.
 Si se encuentra copiando y pegando código en varias partes del programa
probablemente debe encapsular ese código en una función.
 Para la calificación del proyecto se considerará el uso adecuado de estructuras.
 En este proyecto se tomará en cuenta para la calificación final la calidad de su
solución:
o Que divida el código en funciones apropiadamente.
o Que use estructuras de control adecuadas.
o Que use nombre de variables apropiados.
o Modularización de su proyecto.

Anda mungkin juga menyukai