domingo, 27 de febrero de 2022

Como crear un índice a partir de una columna de datos de un DataFrame en Python

Cuando trabajamos con base de datos sin tener privilegios para crear procedimientos almacenados y funciones, es muy probable que los resultados de nuestras consultas siempre sean archivos CSV que contienen miles de datos y nos veamos forzados a trabajarlos en una hoja de cálculo creando ya sea tablas dinámicas, fórmulas, o bien validando datos todas estas opciones son relativamente sencillas para quienes tienen conocimientos más allá de lo básico en el manejo de hojas de cálculo, pero en ocasiones para los usuarios de nivel intermedio, el crear informes personalizados o procesar los datos de forma manual cada vez que piden un nuevo informe llega a ser una tarea engorrosa que consume muchas horas y en ocasiones hasta días, quedándose corta la funcionalidad de las hojas de cálculo y poniendo en entredicho nuestra productividad. Al llegar a este límite, los usuarios avanzados buscan como hacer las cosas en el menor tiempo posible y una forma de lograrlo es encontrar un lenguaje de programación que permita manipular los datos de forma automatizada y crear una hoja de Excel a la cual ya solo haya que darle un formato elegante para presentar la información, esto nos hace más productivos y nos permite dedicar tiempo a funciones laborales más importantes que estar armando reportes con fórmulas, funciones y tablas dinámicas.

Los datos fuente son archivos CSV obtenidos de una consulta SQL.
FUente: elaboración propia.

Una de las características de los reportes administrativos es el hecho de que los miles de datos obtenidos en una consulta a BD por lo general deben ser sumarizados en informes que presentan la misma información de muchas maneras, por ejemplo, las estadísticas escolares y sus indicadores suelen presentar los datos por programa educativo y sexo, por turno y sexo, por grado y sexo, por modalidad y sexo, por edad y sexo, por índices de reprobación y sexo, por índices de aprovechamiento y sexo, discapacidades, etnias, lugares de nacimiento y lugares de procedencia, los mismos datos una y otra vez, organizados por programa educativo, modalidad y nivel  académico. Es aquí donde debemos comenzar a plantear como programaremos está construcción de estructuras de datos que nos presenten ya organizados los datos para ponerlos directamente en una hoja de cálculo sin necesidad de hacer nada más que ejecutar el programa y revisar el formato de la presentación, el primer y más importante paso es obtener los índices que nos permitirán sumarizar los datos: programas educativos, sexo, modalidad, nivel, turno,  etnias reportadas, discapacidades reportadas, procedencias reportadas y lugares de nacimiento reportados, mismos que podrían ser solo uno o varios en cada programa educativo, y que la función que se presentará en esta entrada del blog permitirá obtener para cada columna que deseemos usar como índice en un ciclo de sumarización de datos.

El primer paso consiste en importar la librería Pandas.
Fuente: elaboración propia.

Esta librería nos proporciona métodos para trabajar con archivos CSV y crear DataFrames a partir de ellos, mismos que posteriormente podemos manipular de forma fácil a través de los diversos métodos que implementan.

Esta función permite crear índices a partir de los valores contenidos en una columna de datos.
Fuente: elaboración propia.

La función que se presenta en la imagen antecedente permite que obtengamos una lista de valores que podemos usar como índice para clasificar datos en un DataFrame, por ejemplo si existe una columna estados con 4000 filas en las cuales están los datos de los estados de procedencia de 4000 personas, esta función nos permitiría obtener la cantidad de estados presentes en la columna y posteriormente con esta información podríamos recorrer toda la columna contando los elementos que coinciden con alguno de los índices localizados.

Aquí se muestra como se obtienen los datos y como se ordena el DataFrame, para facilitar que los índices estén en el orden deseado.
Fuente: Elaboración propia.
Para obtener los datos usaremos la función read_csv de los DataFrames de Panda, misma que nos permitirá obtener los datos de un archivo ".csv" que previamente hemos obtenido de una consulta a base de datos o de algún otro tipo de fuente como es un sistema de información o Excel.
El DataFrame creado a partir de CSV luce así ya ordenado de acuerdo a las columnas de interés, podemos ver que en la columna de la derecha esta el orden real de los datos en el archivo .csv.
Fuente: Elaboración propia.
Ordenar el DataFrame es una buena idea para que al obtener los índices ya no tengamos que implementar un algoritmo de ordenación por cuenta propia y ahorremos tiempo de programación. Lo siguiente será tomar la columna de interés, en este caso los nombre de los programas educativos.
Es importante observar que se selecciona solo una columna llamándola por su encabezado, y que se especifica que será una tupla y no una serie, ya que las series no poseen ciertas cualidades.
Fuente: Elaboración propia. 
Ya teniendo la tupla de los programas educativos haremos uso de la función diseñada y obtendremos los valores indice para las consultas de todos los programas educativos que nos permitirán procesar nuestros indices y tablas para crear un archivo de Excel.
La función la invocamos pasando la tupla que contiene la columna 'Prog_educ' del DataFrame "datos", y en la variable programas educativos quedarán los valores índice.
Fuente: Elaboración propia.
El resultado de esta función se almacena en la tupla programas educativos el cual contendrá la lista de todos los programas educativos presentes en la columna 'prog_educ' y que nos permitirá realizar las operaciones de cálculo necesarias para procesar los datos de los diferentes programas educativos y aplicar los cálculos sobre los datos.
Contar con el índice de programas educativos nos permitirá realizar bucles for para ir recabando la información pertinente de nuestro interés de forma fácil.
El uso de un bucle for nos permitirá ir tomando cada valor del índice de nuestro interés para realizar los cálculos de los diferentes indicadores solicitados como son cantidad de alumnos por sexo, indice de reprobación, alumnos de nuevo ingreso por programa educativo, egresados por programa educativo, aprovechamiento por programa educativo y demás métricas que sean de nuestro interés y que se puedan calcular a través de la manipulación de los valores contenidos en nuestra consulta y que pusimos de forma ordenada en el DataFrame denominado "datos".
Espero que esta pequeña contribución le permita a aquellos que inician en Python desde cero y sin capacitación dar sus primeros pasos y tomar confianza para ir usando los métodos más avanzados y eficientes que las múltiples librerías nos ofrecen. 
Termine por escribir esta pequeña contribución debido a que en mi caso no hallaba ningún material nivel cero con el uso de datos locales en Internet, solo ejemplos basados en datos obtenidos de la nube y con funciones de análisis estadísticos que aunque no dudo que sean importantes para la investigación, la realidad es que son poco significativas para el trabajo administrativo que muchos deseamos automatizar en nuestras oficinas cuando nos encargan informes y la elaboración de indicadores.
El obtener los valores índices es lo que nos permite generar los conteos que nos llevarán a la creación de los índices que por lo general son el tipo:

índice de reprobación = alumnos irregulares / alumnos inscritos * 100

índice de aprovechamiento = suma de promedios / número de alumnos

egresados por programa educativo = conteo de alumnos que tienen el 100% de avance al final del ciclo.

Y por lo general en el área administrativo no suelen emplearse los métodos que se usan para el análisis de datos científicos, pero Pandas puede usarse fácilmente para ordenar nuestros datos y permitirnos diseñar fórmulas para obtener la información que deseamos sin tener que recurrir al uso de fórmulas, funciones y tablas dinámicas que aunque facilitan mucho el trabajo, suelen tomarnos mucho y en muchos casos requieren un trabajo adicional para acomodar los datos exactamente como los requerimos. En mi caso, llegue al límite de lo que las tablas dinámicas podían hacer por mi y después de llegar a ese límite tenía que pasar muchas horas procesando datos en nuevas hojas de Excel y terminaba con archivos en los que había n pestañas para los indicadores solicitados y m pestañas para los datos fuentes ordenados o sumarizados de diferentes formas, usar programación para realizar el trabajo nos permite que el archivo generado contenga solo la información deseada ya procesada y una hoja dedicada a los datos fuentes en la cual quien quiera auditar podrá realizar los cálculos y agrupaciones que desee, teniendo nosotros la seguridad de que obtendrán los mismos resultados, ya que el correcto diseño y validación de nuestras fórmulas y funciones en nuestro programa nos da la certeza de los resultados correcto, y con el plus que todo el proceso estará listo en minutos y no en días.






 



No hay comentarios.:

Publicar un comentario