10 - Práctica 2: análisis de ventas

Lección 10 del curso Python Nivel Intermedio.

Introducción

En la lección anterior vimos funciones como filter, map y reduce para el procesamiento avanzado de listas en Python.

En esta segunda práctica del curso aplicaremos varias de las herramientas aprendidas hasta el momento para el procesamiento de secuencias (listas y tuplas) con el fin de implementar un programa capaz de realizar un sencillo análisis de las ventas de productos en una farmacia.

Suscríbete y accede al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

El problema a resolver

Dado un archivo en formato tabular (.csv), que contiene el histórico de ventas mensuales de diferentes productos a lo largo del año, se debe implementar un programa que sea capaz de sumarizar estos datos y generar un reporte en un archivo con formato de texto (.txt)

Requerimientos

El programa debe leer la tabla completa con los datos y generar al final un reporte en un archivo de texto (reporte.txt) que contenga la siguiente información:

Pseudo-código

Antes de realizar la implementación, organicemos nuestras ideas a través del pseudo-código de nuestro programa:

# 1. Leer el archivo en una lista bidimensional -> datos
# 2. Por cada mes extraer la columna correspondiente de "datos",
#    calcular la suma de las ventas y almacenar el resultado
#    2.1 Calcular los meses con ventas máximas y mínimas
# 3. Por cada producto extraer la fila correspondiente de "datos",
#    calcular la suma anual de artículos vendidos y monto de ventas
#    y almacenar los resultados
#    3.1 Organizar de forma descendente los listados de productos
#    usando como criterio el monto total de las ventas anuales, y
#    tomar el top-3
# 4. Generar el reporte (txt) con la información obtenida en 2.1 y 3.1

Teniendo listo el pseudo-código, ahora sí podemos proceder a la implementación de nuestro programa.

Implementación

Lectura del set de datos

Implementaremos uno a uno los pasos definidos en el pseudo-código. En primer lugar leeremos el archivo de datos, para lo cual usaremos el módulo csv disponible en la librería estándar de Python.

Una vez leído el dataset éste quedará almacenado en una lista bidimensional con 10 elementos. Cada elemento será una lista que a su vez contendrá una fila de la tabla presente en el set de datos original.

La parte más importante del análisis requiere el procesamiento del dataset por filas o por columnas. Pero además es importante observar que todos los datos están en formato string y que las cantidades numéricas deberán ser convertidas al formato float.

Funciones auxiliares

Para facilitar lo anterior crearemos dos funciones: extraer_columna y extraer_fila. Cada una de estas funciones requiere como argumentos de entrada el dataset y el índice de la columna (o fila) que deseamos extraer. En la implementación de esta función debemos tener en cuenta que las cantidades numéricas (artículos y nivel de ventas) tendrán que ser transformadas del tipo de dato string al tipo de dato float, para lo cual usaremos las funciones de mapeo vistas en la lección anterior.

Meses con mayores y menores ventas

En este caso tomaremos una a una las columnas correspondientes a los meses (con ayuda de la función extraer_columna), luego sumaremos los niveles de ventas de cada mes (usando la función sum) y finalmente almacenaremos los resultados de los doce meses en la lista ventas_mensuales, junto con el nombre de cada mes (en la lista meses).

Posteriormente podemos usar las funciones max y min y el método index para determinar los meses con los mejores y peores niveles de ventas durante el año.

Productos más vendidos

Crearemos dos listas que actualizaremos en cada iteración: productos contendrá el listado de productos disponibles, y prod_ventas que contendrá el monto total de las ventas alcanzado por cada producto.

Luego haremos dos ciclos for, que permitirán hacer un barrido por el dataset, primero por filas y luego por columnas. Así, por cada producto almacenaremos el nombre y para cada uno de los meses determinaremos el monto de las ventas, y al final de cada ciclo sumaremos los niveles de ventas para los 12 meses (usando la función sum) y obteniendo así el monto total de las ventas para cada producto.

Ahora, con ayuda de la función zip combinaremos las dos listas anteriores (prod_ventas y productos) y la lista resultante será organizada de forma descendente (con ayuda del método sort): los tres primeros ítems de esta lista ordenada serán precisamente los productos con mayor nivel de ventas durante el año.

Generación del reporte

Finalmente, generaremos el reporte (en formato TXT) usando la función open junto con los métodos write y close y teniendo en cuenta que su contenido satisfaga los requerimientos especificados anteriormente.

Recuerda suscribirte para acceder al set de datos, código fuente y video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

Conclusión

Muy bien, con este ejercicio acabamos de poner en práctica varios de los conceptos vistos anteriormente, con lo cual hemos podido usar las tuplas y las secuencias para implementar un programa que nos permite analizar un set de datos en formato tabular.

Ya estamos listos para la tercera parte del curso, en donde hablaremos de otras dos estructuras para el almacenamiento de datos que, como veremos, también son muy poderosas y versátiles. Hablaremos entonces de los diccionarios y los sets.

En particular, en la próxima lección comenzaremos con una introducción a los diccionarios en Python, en donde veremos qué son, cómo crearlos y sus características básicas.

Ver todas las lecciones de este curso