Enunciado Proyecto N4 IP 20221
Enunciado Proyecto N4 IP 20221
Enunciado Proyecto N4 IP 20221
Instrucciones generales
Esta sección le permitirá conocer el alcance, las funcionalidades esperadas y lo que debe realizar en este proyecto.
Tenga en cuenta que, a lo largo de dicha sección encontrará el título "ATENCIÓN" con indicaciones para conseguir que
el resultado de su proyecto corresponda con lo esperado. Es importante que las siga cuidadosamente. Antes de
empezar, le sugerimos leer con atención todo el proyecto. Mientras lo lee, trate de reconocer los conceptos del curso
que tendrá que poner en práctica. Recuerde que este proyecto debe realizarse de forma completamente individual.
Con el fin de monitorear la situación ecológica del país, se han dispuesto diferentes dispositivos a lo largo del territorio
nacional para medir la calidad del aire y otras variables climatológicas. La calidad ambiental del país es un tema de vital
importancia para la toma de decisiones de planeación territorial tanto en las zonas urbanas como rurales. Con este
propósito, el país ha invertido en un sistema de medición de estas variables desde el año 2011 para poder cumplir los
estándares de la Organización Mundial de la Salud. Estos datos son públicos y se han puesto a la disposición de la
ciudadanía de manera libre y abierta.
En este proyecto, trabajará con datos de calidad del aire en Colombia para el periodo entre 2011 y 2018. Estos datos
se encuentran registrados en el portal de datos del gobierno colombiano (https://www.datos.gov.co/Ambiente-y-
Desarrollo-Sostenible/DATOS-DE-CALIDAD-DEL-AIRE-EN-COLOMBIA-2011-2018/ysq6-ri4e). En el archivo
“calidad_aire.csv” encuentra una versión simplificada y filtrada de los datos originales: suprimimos algunas entradas
incompletas y columnas que no vamos a utilizar en este proyecto. Con este conjunto de datos podrá analizar
información esencial para entender cómo ha evolucionado la situación ambiental en el territorio nacional.
ATENCIÓN: cuando esté estudiando el problema y el archivo, recuerde que las funciones describe(), unique() y filter()
pueden serle de utilidad. La función describe() aplicada sobre un DataFrame retorna información estadística de todas
las columnas numéricas. La función unique() aplicada sobre una columna retorna una lista con los valores únicos que
aparezcan en esa columna.
ATENCIÓN: Tenga en cuenta que para el ejemplo se usó el rango de 2014 a 2018.
Requerimiento 3: Top 5 departamentos con mediciones de O3 mayores a un valor
En este requerimiento se quieren conocer los 5 departamentos con mayor número de mediciones de O3 superiores a
la concentración ingresada por el usuario. Por ejemplo, para una concentración de O3 de 100𝜇𝑔/𝑚3 se debe mostrar
un diagrama de barras horizontal como el que se encuentra a continuación:
ATENCIÓN: Tenga en cuenta que para el ejemplo se ingresó una concentración de O3 de 100𝜇𝑔/𝑚3.
Requerimiento 4: Diagramas de caja y bigotes de CO por año
En este requerimiento se quiere mostrar la distribución de las concentraciones de CO para un año ingresado por
parámetro. Para este requerimiento utilice únicamente las mediciones con un tiempo de exposición de 8. El diagrama
debe verse como el que se muestra a continuación:
NOTA: La matriz mostrada anteriormente es un ejemplo y NO hace referencia a los valores que usted obtendrá al
construir la matriz. Cada posición (f,c) en la matriz contiene el número de medidas tomadas que pertenecen al
departamento f y que tiene la calidad c (Buena, Aceptable, etc.). Por ejemplo, si Amazonas está en la fila 1 y Aceptable
en la columna 3, el número de medidas aceptables en el departamento de Amazonas sería el valor en la casilla (1,3).
Así mismo, se propone la construcción de 2 diccionarios para la referencia de las filas y las columnas. La llave de los
diccionarios hace referencia al índice de la fila o columna de la matriz y el valor hace referencia al departamento o ICA
correspondiente. A continuación, se muestran los diccionarios para las filas y las columnas.
Llave Valor
0 “Antioquia”
1 “Arauca”
2 “Atlántico”
… ...
22 “Valle del Cauca”
Llave Valor
0 “Aceptable”
1 “Buena”
... ...
5 “Peligrosa”
NOTA: El código para la creación de los dos diccionarios ya se encuentra en el esqueleto proporcionado.
ATENCIÓN:
• Recuerde que tiene a su disposición la función unique() para obtener todos los valores únicos de una columna en
un DataFrame.
• Para comprobar que los valores de la matriz creada son los correctos puede utilizar filtros, agrupaciones y sumas
sobre el DataFrame original y verificar que estos arrojen el mismo resultado que el almacenado en su matriz.
• Puede ser de mucha utilidad pensar en descomponer el problema en varios problemas más pequeños.
Nota importante: Dado que el tamaño del DataFrame es bastante grande, la construcción de la matriz podría tardar
más tiempo del que suelen tardar otras funciones. Si el tiempo supera los 2 minutos es muy probable que haya un
problema en el código. En ese caso, le recomendamos que detenga el programa y revise si existe algún error en sus
funciones.
La función para crear la matriz debe retornar una tupla que contenga la matriz creada y los diccionarios de filas y
columnas en el siguiente formato (matriz, dict_filas, dict_columnas). Tenga en cuenta que usted deberá implementar
los siguientes requerimientos utilizando como base la tupla anterior:
Para cargar el mapa como una matriz de píxeles y luego visualizarlo puede guiarse por el siguiente fragmento de código:
La siguiente función le permitirá cargar el archivo de coordenadas y retornar un diccionario, cuyas llaves son los
nombres de los departamentos y los valores son tuplas con las coordenadas (x,y) de cada departamento. El nombre del
departamento en este archivo es idéntico al que se encuentra en el DataFrame y en la matriz.
def cargar_coordenadas(nombre_archivo:str)->dict:
deptos = {}
archivo = open(nombre_archivo, encoding="utf8")
archivo.readline()
linea = archivo.readline()
while len(linea) > 0:
linea = linea.strip()
datos = linea.split(";")
deptos[datos[0].upper()] = (int(datos[1]),int(datos[2]))
linea = archivo.readline()
return deptos
Una vez cargado el mapa y construido el diccionario de coordenadas, el siguiente paso es utilizar dichas coordenadas
para pintar en el mapa varios puntos con un color que represente a cada clasificación ICA. Para ello, se han asignado
los siguientes colores a cada categoría:
ATENCIÓN:
Tenga en cuenta que los valores de color deben ser valores entre 0 y 1 por la forma en la que matplotlib procesa los
valores de color. Por esta razón es que se representan como proporciones entre un número y 255.