Вы находитесь на странице: 1из 8

Escuela Superior Politécnica del Litoral

Fundamentos de Programación
Proyecto Primer Parcial
2019 – 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 un proyecto en python que contiene los siguientes archivos:


 sitiosturisticos.csv, contiene la información de los lugares turísticos del país
 clima.csv, contiene la cantidad de precipitación y temperatura promedio de varios cantones
del país por mes y año.
 principal.py, contiene la implementación del programa principal.
 lecturarchivos.py, contiene la implementación de algunas funciones
 funciones.py, contiene la implementación de sus funciones en el proyecto.

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

Código, Nombre, Tipo de Lugar, 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 ¨;¨
Puntuación Calificación promedio dada por los usuarios al sitio, entre 1 y 5.

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 clima.csv corresponde a la temperatura y precipitación de un cantón de la


provincia del ecuador y continene la siguiente información:
año, mes, provincia, cantón, precipitación, temperatura prom.

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


Nombre Campo Descripción
año Año de la medición.
mes Mes de la medición.
provincia Provincia del país en la que está el cantón en la que se hizo la medición.
cantón Cantón del país donde en la que se hizo la medición.
precipitación Cantidad de lluvia que cayó en el cantón en el mes de la medición.
temperatura prom Temperatura promedio del cantón en el mes de la medición.

El archivo lecturadatos.py contiene la implementación de la siguiente función:


 leer_archivo: Esta función recibe como parámetro el nombre de un archivo, lee el archivo y
retorna una lista donde cada elemento es de tipo cadena de caractes y corresponde una línea
del archivo leído.

datos = leer_archivo(“sitiosturisticos.csv”)
print(datos)
Salida:
[
'1,Río Santa Bárbara,Rio,Azuay,Gualaceo,-29.047956,-
78.778787,senderismo;picnic;ciclismo,3', '2,Represa de Paute,Represa,Azuay,Cuenca,-
2.586111,-78.558333,mirador; educativo,2.5', '3,El Turi,Mirador,Azuay,Cuenca,-
2.9223567,-79.0103607,mirador; cultural; religioso,4'
….
]

datos = leer_archivo(“clima.csv”)
print(datos)
Salida:
[
'2000,Enero,Imbabura,Otavalo,115.2,9.2,', '2000,Febrero,Imbabura,Otavalo,113.3,9.2,',
'2000,Marzo,Imbabura,Otavalo,121.7,9.8,', '2000,Abril,Imbabura,Otavalo,290.7,10.1,'
]

El archivo funciones.py tendrá las funciones que usted implemente para llevar a cabo el proyecto. Por
el momento solo tiene la función procesarDatos que usted debe terminar de implementar. La función
procesarDatos debe leer el contenido del archivo de sitios turísticos y retornar una lista donde cada
uno de los elementos es una lista con la información de un sitio turístico. El objetivo de esta función
es procesar la lista préstamo para hacer futuras búsquedas más rápidas. A continuación, un ejemplo de
la lista que devuelve la función:

[['1', 'Río Santa Bárbara', 'Rio', 'Azuay', 'Gualaceo', [-29.047956,


-78.778787], ['senderismo', 'picnic', 'ciclismo'], 3.0], ['2',
'Represa de Paute', 'Represa', 'Azuay', 'Cuenca', [-2.586111, -
78.558333], ['mirador', ' educativo'], 2.5], ['3', 'El Turi',
'Mirador', 'Azuay', 'Cuenca', [-2.9223567, -79.0103607], ['mirador',
' cultural', ' religioso'], 4.0]]

NOTA: Fíjese que el puntaje se almacena como tipo de dato float y que la ubicación como una
lista [latitud,longitud]
[codigo, nombre, tipolugar, provincial, ciudad, ubicación, actividades, puntaje]

El archivo principal.py por el momento lo único que hace es importar la librería funciones.py,
invocar a la función procesar_datos, almacenar el valor devuelto en la variable
sitiosturisticos e imprimir el valor devuelto

Después de llamar a la función procesar_datos, el programa debe mostrar un menú


numérico con las siguientes opciones:

1. Agregar Nuevo Sitio Turísticos


2. Recomendar Sitios Turísticos
3. Consultar Sitios Cercano
4. Análisis Estadísticos Atractivos Turísticos
5. Recomendar Mejor Fecha de Visita
6. Salir

El menú debe ejecutarse de forma continua. El usuario ingresa una opción, se realiza la
opción y se regresa al menú principal.

A continuación, la descripción de que hace cada opción:

1. Agregar nuevo sitio turístico.


Esta opción le permite al usuario ingresar la información de un nuevo sitio turísticos al
programa. El programa debe asignar un código numérico incremental al lugar. Ejemplo, si el
último código de la base es 85 al lugar se le asignaría 86.

Se deben realizar las validaciones del caso para evitar que el programa se caiga o que se ingrese
datos basura. No puede haber dos sitios con el mismo nombre, se debe validar la existencia de
las provincias y el tipo de lugar (el tipo de lugar deber ser uno de los listados en la tabla 1).
Cada lugar debe tener al menos una actividad y si tiene más de una actividad está deben ser
ingresadas separadas por punto y coma “;”. El puntaje debe estar entre 1 y 5. El programa no
distingue entre mayúsculas y minúsculas al momento de comprobar la existencia de un lugar,
provincia y tipo lugar.

El sitio ingresado debe agregarse al final de la lista sitiosturisticos

2. Recomendar Sitios Turísticos


Esta opción le pide al usuario el tipo lugar en el que está interesado, la provincia y actividades
que está interesado en realizar (una o varias separadas por comas) y muestra los lugares
turísticos dentro del criterio de búsqueda, ordenadas del que tiene mayor puntaje al que tiene menor
puntaje. 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: Parque Nacional
Actividades: snorkeling, nadar
Provincia: Manabí
Cod Lugar Provincia Ciudad Puntuación 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)
Puntaje: 4.7

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. Ver la
descripción de la función 4 más abajo para ver más detalles de cómo usar la librería.

3. Consultar sitios cercanos


Esta opción le debe pedir al usuario su ubicación actual y una distancia máxima y debe 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. Para esto el programa debe calcular la distancia desde
el punto ingresado a cada uno de los sitios turísticos y luego mostrar solo aquellos que están
dentro de la distancia máxima.
La opción debe mostrar el id, nombre del lugar, provincia, ciudad y distancia al sitio.

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

Ingrese Opción del menú: 3


Ingrese ubicación actual: -2.193916,-79.8973638
Distancia máxima: 5

Cod Lugar Provincia Ciudad Distancia


39 Malecon 2000 Guayas Guayaquil 0.0007
37 El Faro Guayas Guayaquil 0.5491
40 Museo Histórico De Abdón Calderón Guayas Guayaquil 0.9333
38 Parque Historico De Guayaquil Guayas Guayaquil 1.4348
….

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

4. Análisis estadísticos atractivos del país (numpy)


Esta función permite realizar un análisis estadístico de los sitios turísticos del país. La
función debe mostrar la siguiente información.

o Número de atractivos turísticos del país.


o Sitio turístico con mayor y menor puntaje (nombre, tipo y puntaje)
o Por cada tipo de atractivo turístico del país mostrar:
 Número de atractivos que existe y puntaje promedio para los
atractivos de ese tipo
o El tipo de atractivo turístico más abundante del país.

Para realizar este análisis debe usar arreglos de numpy paralelos con los datos del
nombre, tipo y puntaje de cada atractivo del país.
anombre = np.array([‘Rio SantaBarbara’, ‘El Turi’,..])
atipo = np.array([‘Rio’, ‘Mirador’,…])
apuntaje = np.array([3.0, 4.0,…])

5. Mejor época de visita (numpy)


En esta opción responderemos la pregunta de cuándo es el mejor mes del año para
visitar un atractivo turístico basado en un análisis de la temperatura y precipitación
del cantón en el que se encuentra el sitio y el tipo al que pertenece el sitio del que se
consulta

La opción pide al usuario el nombre del sitio turístico que desea visitar y el programa
muestra lo siguiente
o Temperatura promedio por mes del cantón donde se encuentra el sitio
o Precipitación promedio por mes del cantón donde se encuentra el sitio
o Mes del año más caliente y menos caliente del cantón donde se encuentra el
sitio
o Mes del año con más lluvia y menos lluvias del cantón donde se encuentra el
sitio
o Las mejores condiciones para realizar una visita de acuerdo a un tipo se
muestran a continuación:

Atractivo sitio turístico Mejores condiciones


Playa días despejados y sin lluvia, con
temperaturas percibidas entre 24
°C y 32 °C
Ciudades de la costa días despejados y sin lluvia con
temperaturas percibidas entre 18
°C y 27 °C
Ciudades en la sierra Días sin lluvia, temperaturas bajas.
Carnaval (Generalmente Febrero)
Amazonía Pocas precipitaciones lluvia,
temperatura bajas
Islas Galápagos Época lluvias (ya que llueve ligero)

Para realizar este análisis debe usar arreglos de numpy paralelos con los datos de la
provincia, cantón, mes, temperatura y precipitación promedio.
6. Salir
Termina la ejecución del programa

Para llevar a cabo el proyecto en el archivo funciones.py usted debe obligatoriamente


implementar las siguientes funciones:

1. La función procesar_datos, la cual ya fue descrita al inicio de este documento.

2. Escriba una función que reciba la lista sitios_turisticos y retorne una lista con los tipos
de sitios atractivos que tiene el país sin repetir.

3. Una función llamada filtrar_sitios que recibe la lista de lista sitiosturisticos, un tipo de
lugar, una lista con actividades y el nombre de una provincia y retorna el código de las
provincias que cumplen con los criterios de búsquedas. Si uno de los criterios de
búsqueda es todos, ese criterio no se toma en cuenta. En el caso de las actividades se
debe retornar los sitios en donde se puedan realizar al menos una de las actividades
pasada.

4. Una función llamada ordenar_porpuntaje que reciba la lista de sitiosturisticos y


retorne una lista con los códigos de los sitios ordenados por su puntaje del que tiene
mayor puntaje al que tiene menor puntaje.

5. Una función que permita graficar en un mapa la ubicación de sitios turísticos del país
La función recibe la lista sitiosturisticos y una lista con códigos de sitios turísticos que
se desean ver en el 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 en su computadora.
A continuación, un ejemplo que muestra cómo crear un mapa con dos marcadores (uno
en quito y otro en Guayaquil).

6. Una función que reciba como parámetro dos coordenadas geográficas y retorne la
distancia en kilómetros entre ambos puntos. Cada coordenada es una lista que tiene
dos valores (lat, long). Para calcular la distancia entre dos coordenas geográficas de la
tierra podemos usar la fórmula de distancia Harvesine. 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 base de datos están en grados
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.

Para mayor información puede consultar el siguiente post


https://www.youtube.com/watch?v=fal7dwsUJVU

7. Cree una función llamada obtener_arreglos que reciba la lista de sitios_turisticos y


retorne tres arreglos de numpy con la información del nombre, tipo y puntaje de cada
atractivo turístico del país.

anombre, atipo, apuntaje = obtener_arreglos(sitios_turisticos)


print(anombre)
#anombre = np.array([‘Rio SantaBarbara’, ‘El Turi’,..])
print(atipo)
#atipo = np.array([‘Rio’, ‘Mirador’,…])
print(apuntaje)
#apuntaje = np.array([3.0, 4.0,…])

8. Escriba una función que lea el archivo clima.csv y retorne cinco arreglos de numpy de
una dimensión con los datos del mes, provincia, cantón, temperatura y cantidad de
precipitación que se encuentran en el archivo.

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.
 Se valorará la presentación del proyecto y su interacción. Por buena presentación podrá
tener 1 punto extra. (Revisar https://docs.python.org/3/library/string.html#formatstrings)
 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.

Вам также может понравиться