Skip to content

modelo de datos #126

@galindoleidy-sys

Description

@galindoleidy-sys

import pandas as pd
import numpy as np
import datetime

def analizar_negocio(ruta_archivo):
print("--- INICIANDO ANÁLISIS DEL NEGOCIO DE CERVEZA ---\n")

# 1. Cargar el archivo
# Intentamos leer el archivo asumiendo que es el CSV que subiste
try:
    df = pd.read_csv(ruta_archivo)
except Exception as e:
    print(f"Error leyendo el archivo: {e}")
    return

# 2. Limpieza de Datos Básica
# Convertir FECHA a formato fecha
df['FECHA'] = pd.to_datetime(df['FECHA'], errors='coerce')

# Asegurar que MONTO y CANTIDAD sean numéricos
df['MONTO'] = pd.to_numeric(df['MONTO'], errors='coerce').fillna(0)
df['CANTIDAD'] = pd.to_numeric(df['CANTIDAD'], errors='coerce').fillna(0)

# Crear columnas útiles para análisis de tiempo
df['Mes'] = df['FECHA'].dt.to_period('M')
df['Dia_Semana'] = df['FECHA'].dt.day_name(locale='es_ES.utf8') # Requiere configuración local, si falla usará inglés por defecto
if df['Dia_Semana'].isnull().all(): # Fallback a inglés si no hay locale español
     df['Dia_Semana'] = df['FECHA'].dt.day_name()

# Separar Ingresos y Egresos
ingresos = df[df['TIPO'].str.upper().str.contains('INGRESO')]
egresos = df[df['TIPO'].str.upper().str.contains('EGRESO')]

# ==========================================
# RESPUESTAS A TUS PREGUNTAS
# ==========================================

print("--- 1. EVOLUCIÓN MENSUAL ---")
evolucion_ingresos = ingresos.groupby('Mes')['MONTO'].sum()
evolucion_egresos = egresos.groupby('Mes')['MONTO'].sum()

df_evolucion = pd.DataFrame({'Ingresos': evolucion_ingresos, 'Egresos': evolucion_egresos}).fillna(0)
df_evolucion['Beneficio'] = df_evolucion['Ingresos'] - df_evolucion['Egresos']
print(df_evolucion)
print("\n")

print("--- 2. DESGLOSE OPERATIVO ---")
print("Top 5 Fuentes de Ingresos (Subcategoría):")
print(ingresos.groupby('SUBCATEGORIA')['MONTO'].sum().sort_values(ascending=False).head(5))
print("\nTop 5 Fuentes de Egresos (Categoría/Subcategoría):")
print(egresos.groupby(['CATEGORIA', 'SUBCATEGORIA'])['MONTO'].sum().sort_values(ascending=False).head(5))
print("\n")

print("--- 3. RENTABILIDAD Y ROI ---")
total_ingresos = ingresos['MONTO'].sum()
total_egresos = egresos['MONTO'].sum()
beneficio_total = total_ingresos - total_egresos
roi = (beneficio_total / total_egresos) * 100 if total_egresos > 0 else 0

print(f"Ingresos Totales: ${total_ingresos:,.2f}")
print(f"Egresos Totales:  ${total_egresos:,.2f}")
print(f"Ganancia Neta:    ${beneficio_total:,.2f}")
print(f"ROI Global (Retorno de Inversión): {roi:.2f}%")
print("(Un ROI positivo significa que el negocio es rentable globalmente)")
print("\n")

print("--- 4. PRODUCTOS Y VENTAS ---")
# Producto Estrella (Por dinero generado)
producto_estrella_dinero = ingresos.groupby('SUBCATEGORIA')['MONTO'].sum().idxmax()
monto_estrella = ingresos.groupby('SUBCATEGORIA')['MONTO'].sum().max()

# Producto más vendido (Por cantidad)
producto_mas_vendido = ingresos.groupby('SUBCATEGORIA')['CANTIDAD'].sum().idxmax()

print(f"Producto Estrella (Más dinero): {producto_estrella_dinero} (${monto_estrella:,.0f})")
print(f"Producto Más Vendido (Volumen): {producto_mas_vendido}")
print("\n")

print("--- 5. EQUIPO DE VENTAS ---")
ventas_por_vendedor = ingresos.groupby('ENCARGADO')['MONTO'].sum().sort_values(ascending=False)
print("Ranking de Vendedores:")
print(ventas_por_vendedor)

mejor_vendedor = ventas_por_vendedor.idxmax()
peor_vendedor = ventas_por_vendedor.idxmin()
print(f"\nMejor Vendedor: {mejor_vendedor}")
print(f"Vendedor con menor volumen: {peor_vendedor}")
print("\n")

print("--- 6. PUNTO DE EQUILIBRIO Y GASTOS ---")
# Gastos Fijos vs Variables (Estimación basada en nombres comunes)
# Asumimos que "COSTOS VARIABLES" es variable, y "GASTOS OPERATIVOS" o "NOMINA" son fijos
# Esto es una aproximación basada en tus categorías

gastos_nomina = egresos[egresos['CATEGORIA'].str.contains('NOMINA', case=False, na=False)]['MONTO'].sum()
proporcion_nomina = (gastos_nomina / total_egresos) * 100 if total_egresos > 0 else 0

print(f"Gasto en Nómina/Mano de Obra: ${gastos_nomina:,.2f} ({proporcion_nomina:.2f}% del gasto total)")

# Punto de Equilibrio (Promedio mensual)
promedio_gastos_mensuales = evolucion_egresos.mean()
print(f"Necesitas vender al menos ${promedio_gastos_mensuales:,.0f} al mes promedio para no perder dinero (Punto de equilibrio simple).")

print("\n--- 7. DÍAS DE OPERACIÓN ---")
# Día con más ingresos
dia_mejor = ingresos.groupby('Dia_Semana')['MONTO'].sum().idxmax()
print(f"Mejor día de la semana para abrir: {dia_mejor}")

print("\n--- FIN DEL REPORTE ---")

if name == "main":
# Asegúrate de que el nombre del archivo coincida exactamente con el que tienes en tu carpeta
archivo = 'plan financiero cerveza.xlsx - plan financiero .csv'
analizar_negocio(archivo)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions