Skip to content

FP-24-25/LAB-Centros-sanitarios

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

Fundamentos de Programación

Ejercicio de laboratorio: Centros Sanitarios

Autora: Toñi Reina

Revisor: Mariano González


En este proyecto trabajaremos con datos proporcionados por la diputación de Cádiz de centros sanitarios de los municipios con población inferior a 50.000 habitantes de dicha provincia.

Estructura de las carpetas del proyecto

  • /src: Contiene los diferentes módulos de Python que conforman el proyecto.
    • centros.py: Contiene funciones para explotar los datos de los centros sanitarios.
    • centros_test.py: Contiene funciones de test para probar las funciones del módulo centros.py. En este módulo está el main.
    • coordenadas.py: Contiene funciones para trabajar con el tipo Coordenadas.
    • coordenadas_test.py: Contiene funciones de test para probar las funciones del módulo coordenadas.py.
    • mapas.py: Contiene funciones para crear un mapa y representar puntos en él. Requiere tener instalada la librería folium.
  • /data: Contiene el dataset o datasets del proyecto
    • centrosSanitarios.csv: Archivo con los datos de población de diversos paises o agrupaciones de paises en distintos años.

Dependencias

En este ejercicio vamos a trabajar con mapas, para lo que usaremos la librería folium . Para instalar la librería folium abre un terminal y ejecuta el siguiente comando:

pip install folium

Funciones a implementar:

Lee las instrucciones del proyecto que se indican a continuación para tener más detalles de los requisitos que deben cumplir las funciones a implementar.

Módulo coordenadas

  • calcular_distancia: recibe dos coordenadas de tipo Coordenadas(float, float) y devuelve un float que representa la distancia euclídea entre esas dos coordenadas.
  • calcular_media_coordenadas: recibe una lista de Coordenadas(float, float) y devuelve una tupla de tipo Coordenadas(float, float) cuya latitud es la media de las latitudes de la lista y cuya longitud es la media de las longitudes de la lista.

Módulo centros

  • leer_centros: recibe la ruta de un fichero CSV codificado en UTF-8, y devuelve una lista de tuplas de tipo CentroSanitario(str, str, Coordenadas(float, float), str, int, bool, bool) conteniendo todos los datos almacenados en el fichero.

  • calcular_total_camas_centros_accesibles: recibe una lista de tuplas de tipo CentroSanitario y produce como salida un entero correspondiente al número total de camas de los centros sanitarios accesibles para discapacitados.

  • obtener_centros_con_uci_cercanos_a: recibe una lista de tuplas de tipo CentroSanitario; una tupla de tipo Coordenadas, que representa un punto; y un float, que representa un umbral de distancia. Produce como salida una lista de tuplas (str, str, Coordenadas(float, float)) con el nombre, del centro, la localidad y la ubicacion de los centros con uci situados a una distancia de las coordenadas dadas como parámetro menor o igual que el umbral dado. Observe la Figura 3 para entender mejor el resultado de la función. image

  • generar_mapa: recibe una lista de tuplas (str, str, Coordenadas(float, float)) con el nombre, del centro, la localidad y la ubicación del centro; y una cadena, que representa la ruta de un fichero html, que se generará con los centros geolocalizados.

Instrucciones

Los datos de los que partimos en el proyecto están en el fichero centrosSanitarios.csv. Si abres el fichero, comprobarás que es un fichero en formato CSV (los datos están separados por punto y coma). Un extracto del mismo lo puede ver en la Figura 1.

image

Como puedes observar, cada línea del fichero contiene el nombre de un centro sanitario, la localidad, la latitud, la longitud, el estado del centro, el número de camas que tiene, si tiene acceso para discapacitados y si tiene UCI (en ambos casos, el valor false representa que no tiene acceso o no tiene UCI, respectivamente).

En el proyecto tendrás que implementar algunas funciones que nos ayuden a explotar los datos de los que disponemos. El objetivo del ejercicio es que trabajes creando un proyecto desde cero, e implementes tanto las funciones como los tests para comprobar que las funciones trabajan como se espera. El proyecto creado debe tener la estructura indicada en la sección Estructura de las carpetas del proyecto.

Para gestionar las coordenadas en el módulo coordenadas.py se usará la siguiente definición de namedtuple:

Coordenadas = namedtuple('Coordenadas', 'latitud, longitud')

En dicho módulo, implementa las funciones que se indican a continuación, teniendo en cuenta la especificación de las mismas dada en la descripcion del módulo coordenadas; además, una vez implementada una función, implementa su test correspondiente en el módulo coordenadas_test.py y comprueba que funciona como se espera.

  1. calcular_distancia
  2. calcular_media_coordenadas

Para gestionar la información de los centros sanitarios se usará la siguiente definición de namedtuple en el módulo centros.py:

CentroSanitario = namedtuple('CentroSanitario', 'nombre, localidad, ubicacion, estado, num_camas, acceso_discapacitados, tiene_uci')

Implementa las funciones que se especifican a continuación en dicho módulo. Una vez implementada una función, implementa su test correspondiente en el módulo centros_test.py y comprueba que funciona como se espera.

  1. leer_centros
  2. calcular_total_camas_centros_accesibles
  3. obtener_centros_con_uci_cercanos_a
  4. generar_mapa

Para implementar la función generar_mapa ayúdate de las funciones auxiliares que se implementan en el módulo mapas.py. Además, ten en cuenta que:

  1. Primero debes crear un mapa. Usa la media de las coordenadas de las ubicaciones de los centros para centrar el mapa.
  2. Después ve agregando los marcadores al mapa que has creado mediante la función mapas.agrega_marcador.
  3. Una vez añadidos todos los marcadores, guarda el mapa en el archivo html con mapas.guarda_mapa.

El resultado deber ser un fichero con un mapa similar al de la Figura 4, que se abrirá automáticamente en un navegador web.

image

RETO
La fórmula de la distancia euclídea empleada en este proyecto no es la más adecuada cuando se quieren calcular distancias entre dos puntos del globo terrestre, ya que no tiene en cuenta la curvatura de la tierra. Para calcular la distancia entre dos puntos del globo terrestre se usa una aproximación que viene dada por la fórmula de Haversine . Implemente una función distancia_harvesine para que en el proyecto se hagan unos cálculos más realistas.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages