Código fuente para main

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

[documentos]def cargar_datos_cohorte(dir_archivo, nombre_hoja, columna_id_cliente, columna_fecha_transaccion, columna_datos): """ Extrae y transforma los datos de transacciones de un archivo Excel en una matriz de cohortes. La función carga la hoja especificada, prepara los datos y crea una matriz donde cada fila representa una cohorte (mes de la primera compra) y cada columna los meses desde la primera compra. Los valores en la matriz muestran el número de clientes únicos que realizaron una compra en ese mes particular desde su primera compra. :type dir_archivo: str :param dir_archivo: Directorio del archivo Excel que contiene los datos de transacciones :type nombre_hoja: str :param nombre_hoja: Nombre de la hoja en el archivo Excel a procesar :type columna_id_cliente: str :param columna_id_cliente: Nombre de la columna que contiene los ID de los clientes :type columna_fecha_transaccion: str :param columna_fecha_transaccion: Nombre de la columna que contiene las fechas de las transacciones :type columna_datos: str :param columna_datos: Nombre de la columna que contiene los datos a analizar :returns: Un DataFrame que representa la matriz de cohortes :rtype: pandas.DataFrame """ # Cargar la hoja especificada del archivo Excel transacciones = pd.read_excel(dir_archivo, sheet_name=nombre_hoja) # Asegurar que las columnas necesarias estén presentes if columna_id_cliente not in transacciones.columns or columna_fecha_transaccion not in transacciones.columns or columna_datos not in transacciones.columns: raise ValueError("Las columnas especificadas no se encuentran en los datos") # Formatear y limpiar los datos transacciones = transacciones[[columna_id_cliente, columna_fecha_transaccion, columna_datos]] transacciones = transacciones.dropna() transacciones[columna_fecha_transaccion] = pd.to_datetime(transacciones[columna_fecha_transaccion]) transacciones['mes_transaccion'] = transacciones[columna_fecha_transaccion].dt.to_period('M') # Determinar el grupo de cohorte para cada cliente primera_transaccion = transacciones.groupby(columna_id_cliente)['mes_transaccion'].min() primera_transaccion.name = 'cohorte' transacciones = transacciones.merge(primera_transaccion.reset_index(), on=columna_id_cliente) # Calcular la diferencia en meses para cada transacción transacciones['diferencia_mes'] = transacciones.apply(lambda x: (x['mes_transaccion'] - x['cohorte']).n, axis=1) # Crear la matriz de cohorte matriz_cohorte = transacciones.groupby(['cohorte', 'diferencia_mes']).agg(n_clientes=(columna_id_cliente, 'nunique')).reset_index() matriz_cohorte = matriz_cohorte.pivot(index='cohorte', columns='diferencia_mes', values='n_clientes') return matriz_cohorte
[documentos]def graficar_matriz_cohorte(matriz_cohorte, colormap='Reds'): """ Grafica una matriz de cohortes utilizando los datos desde `cargar_datos_cohorte`. Cada celda en el mapa de calor muestra el número de clientes únicos que realizaron una compra en un mes determinado desde su primera compra. :type matriz_cohorte: pandas.DataFrame :param matriz_cohorte: DataFrame que representa la matriz de cohortes :returns: No retorna nada, solo muestra un gráfico. """ fig, ax = plt.subplots(figsize=(15, 8)) cax = ax.matshow(matriz_cohorte, interpolation='nearest', cmap=colormap) plt.title('Análisis de Cohortes') plt.ylabel('Cohorte (Mes de Primera Compra)') plt.xlabel('Meses Desde la Primera Compra') # Nombre de los cohortes ax.set_yticks(np.arange(matriz_cohorte.shape[0])) ax.set_yticklabels(matriz_cohorte.index.strftime('%Y-%m')) # Meses desde la compra ax.set_xticks(np.arange(matriz_cohorte.shape[1])) ax.set_xticklabels(matriz_cohorte.columns) ax.xaxis.set_ticks_position('bottom') # Agregar valores for (i, j), val in np.ndenumerate(matriz_cohorte): ax.text(j, i, int(val) if not np.isnan(val) else '', ha='center', va='center') plt.show()