martes, 22 de agosto de 2023

Crear gráficos a partir de un conjunto de datos con pandas y Python

 Cárdenas, Tabasco a 22 de agosto de 2023.- Cuando se trabaja con datos por lo general se nos pide que realicemos tareas de clasificación, comparación y gráficos con los mismos, en esta ocasión trabajaremos en la creación de tablas resumen de los datos y en sus gráficos respectivos utilizando como entrada archivos csv (valores separados por comas) que bien podrían ser datos obtenidos directamente de una consulta SQL a la base de datos, pero como casi todas las bases de datos tienen inconsistencias en los datos almacenados, en preferencia vamos primero a obtener los datos en un archivo csv, y posteriormente procederemos a limpiar los datos para que nuestros resúmenes de los datos y sus gráficas sean lo más precisas y claras posible.

El primer paso consiste en leer los datos usando la librería pandas a través de las siguientes instrucciones:

Paso 1.- importar la librería pandas, leer el archivo y colocarlo en un DataFrame.  

Con estas instrucciones iniciales creamos el conjunto de datos que va a ser la base de la creación de nuestro archivo xlsx de resumen y sus gráficas.

Paso 2.- Creamos dos DataFrames adicionales que contengan el resumen de los datos creado con un pivoteo de los datos.
Los DataFrames creados contendrán la información resumida por los índices definidos en el pivoteo, los valores a contar será un campo que nos sirva para contar en este caso las matrícula y el conteo lo realizará la función agregada "count",  las columnas serán a aquellos valores contenido en la columna que deseamos clasificar, en este caso los sexos (Masculino/Femenino) y los turnos (Matituno/Vespertino); así mismo, utilizaremos la opción fill_value= para indicar que rellene con ceros aquellos espacios de columna que no tengan ningún elemento (por ejemplo filas en las que solo hay sexo femenino, o turnos vespertinos)
Resultado de pivotear la tabla sobre varios índices presentes en nuestro DataFrame.
Podemos observar que los datos se han agrupado y se han contado cuantas matrículas están presentes en cada uno de los planes, en este caso vemos que todas las columnas tienen valores. Pero hay ocasiones en las que alguna de las columnas no registra valores como es el caso de los turnos, en este caso el valor no presente se rellena con un cero.

La columnas sin valores en este resumen se rellenan con cero.
En los dos ejemplos anteriores, se realizó un resumen sobre una columna que contaba con dos posibles valores (Sexo y Turno), sin embargo, existen situaciones en las que las columnas resultantes son múltiples o solo una, en estos casos para facilitar el resumen de los datos vamos a hacer uso del agrupamiento de datos en lugar del pivoteo de tablas, como podemos ver a continuación.

Este otro método permite clasificar fácilmente datos cuando solo nos interesa la sumatoria final de los mismos. 
Como podemos ver el objetivo es conocer la cantidad de incidencias que hay en cada uno de los municipios que aparecen en la columna de municipios de procedencia (MUN_PROC), para ello usamos una función muy similar a los comandos de SQL que se denomina "groupby" e indicamos que queremos en conteo de apariciones de cada valor, podemos observar que en este caso los diferentes nombres se organizan en filas, en lugar de hacerlo en forma de columnas como en el caso de los sexos y los turnos.

Al usar la instrucción groupby los diferentes valores contenidos en la columna MUN_PROC se ordenan como filas de la tabla resumen, en lugar de hacerlo como columnas como en los resúmenes de sexos y turnos.

La misma operación de conteo podemos hacer la para las carreras, en cuyo caso nos interesa saber ya no la cantidad de personas de un sexo u otro, sino el total presente en cada programa educativo.

Con la función groupby obtenemos ahora los programas educativos y sus matrículas totales.
Resultado de contar el número de personas que están inscritas en cada programa educativo

El resultado de estos resúmenes de datos podemos trasladarlo ya fácilmente a un archivo formato xlsx, que deberá ser formateado para entrega a quien requiere la información, utilizando las instrucciones ExcelWriter y to_excel de los DataFrames de pandas.

Con estas sencillas instrucciones los DataFrames creados con los resúmenes de los datos son trasladados a un archivo formato xlsx que puede ser editado para su presentación ejecutiva.

Lo último que necesitamos son la generación de los gráficos que presenten la información de las tablas de manera visual y eso lo logramos con la instrucción plot de los DataFrames y la configuración de los correspondientes parámetros.

Creación del gráfico correspondiente para el conjunto de datos resumen de turnos.
Con las instrucciones anteriores lo que logramos es un gráfico en formato png, que tiene una resolución de 300 dpi, y un tamaño de 10 pulgadas por 3 pulgadas.

Resultado de usar el comando plot sobre el DataFrame que resume la matrícula por programa educativo.

Como podemos ver es posible definir el tipo de la imagen, su tamaño y los colores de las series de datos, así como, los títulos de los ejes y del gráfico. La imagen será guardada en un archivo en formato png con las características definidas en los parámetros que enviamos a la funcionalidad plot.

Resultado del procesamiento de los datos en un archivo xlsx

En el directorio que trabajemos la información quedarán guardados todos los archivos resultantes del procesamiento, en este caso podemos ver el archivo py de las instrucciones, el archivo csv que contienen los datos a procesar, los archivos png resultantes de la graficación del comando plot de los DataFrames, y el archivo xlsx resultante de la aplicación de los comandos ExcelWriter y to_excel, así como el archivo con el mismo nombre que el xlsx y la palabra gráficos que es donde integramos todo para su presentación ejecutiva.

Realizar la consulta a la BD y limpiar los datos nos tomará unos 30 minutos dependiendo de la cantidad de registros, escribir el código nos tomará aproximadamente 10 minutos, procesar los datos unos segundos,  y editar el archivo para su presentación ejecutiva otros 30 minutos, estos tiempo disminuyen mucho conforme más práctica vayamos tomando en el proceso de los datos. Y podrían beneficiarnos en disminuir el tiempo de generación de la información de días o semanas a minutos o en el peor de los casos horas.

Espero que las explicaciones proporcionadas basten para guiar la creación de tus propios cuadros resumen y sus correspondientes gráficos y faciliten tu trabajo administrativo.