Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Refinando las visualizaciones

Prompt 1
Genera código en Python usando pandas y matplotlib (sin seaborn) para refinar el gráfico de “Facturación total por región” SOLO para el año 2023.

Contexto:

  • Ya existe un dataframe llamado df_consolidado.
  • Ya existen variables de color definidas en el notebook: GRIS_1, GRIS_5, GRIS_3, AZUL_1, AQUA_1, AQUA_3, BLANCO (NO las redefinas).
  • La facturación se calcula como: facturacion = precio_unitario * cantidad + envio
  • El dataframe debe tener la columna "region". Si no existe en df_consolidado, incorpórala haciendo merge con clientes_zoop.csv usando la llave ID_compra (sin cambiar el resto del dataframe).
  • La columna "fecha" está en formato datetime o puede convertirse a datetime si fuera necesario.

Tareas:

  1. Asegura que df_consolidado["fecha"] sea datetime y filtra SOLO registros del año 2023.
  2. Crea la columna "facturacion" con la fórmula indicada.
  3. Agrupa por "region" y suma la facturación, ordenando de mayor a menor.
  4. Crea un gráfico de barras con:
    • Tamaño de figura (16, 9)
    • Fondo de la figura y del área del gráfico en GRIS_1
    • Barras en color AQUA_1 (opcional: si quieres destacar la región top, esa barra en AQUA_3)
    • Título: tamaño 18 y color GRIS_5
    • Etiquetas y rótulos (x e y): tamaño 12 y color AZUL_1
    • Quita la mayor cantidad de bordes posible (spines superior y derecho, idealmente también el izquierdo si no afecta legibilidad)
  5. Formatea el eje Y para que muestre valores en millones (por ejemplo 12.3M).
  6. Añade etiquetas de datos encima de cada barra también en millones, con color AZUL_1 y tamaño 12.
  7. No redefinas colores ni cambies nombres de variables de paleta. Entrega solo código final listo para ejecutar.

**Prompt 2 **
Genera código en Python usando pandas y matplotlib (sin seaborn) para refinar el gráfico de proporción de clientes pre-registrados en Zoop Pay.

Contexto:

  • Ya existe un dataframe llamado df_consolidado.
  • Ya existen variables de color definidas en el notebook: GRIS_1, GRIS_5, GRIS_3, AZUL_1, AQUA_1, AQUA_3, BLANCO (NO las redefinas).
  • La columna "cashback" indica si el cliente está pre-registrado ("Sí"/"No"). Si "cashback" no existe en df_consolidado, incorpórala haciendo merge con clientes_zoop.csv usando la llave ID_compra.
  • Debes trabajar con clientes únicos (ID_cliente) para el cálculo.

Tareas:

  1. Asegura que exista "cashback" en df_consolidado (merge si falta).
  2. Calcula el porcentaje de clientes únicos (ID_cliente) que están en "Sí" y en "No".
  3. Crea un gráfico tipo rosca (donut) con:
    • Tamaño de figura (6, 6)
    • Fondo de la figura y del área del gráfico en GRIS_1
    • Colores: AZUL_1 para "Sí" y GRIS_3 para "No"
    • Título: tamaño 18 y color GRIS_5
    • Sin explosiones (explode = 0) ni sombras ni efectos
    • Ancho de la rosca = 0.4
    • Porcentajes ubicados a distancia 0.8 del centro (pctdistance=0.8)
  4. Etiquetas:
    • Etiquetas ("Sí", "No") con tamaño 12 y color igual al de su porción (AZUL_1 o GRIS_3)
    • Porcentajes con tamaño 12, en negrita y color BLANCO
  5. Entrega solo el código final listo para ejecutar, sin redefinir los colores del notebook.

Gráfico 1

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Gráfico 2

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

1 respuesta

¡Hola, Randy, espero que estés bien!

Vamos a trabajar en los prompts para refinar tus visualizaciones. Aquí tienes el código para cada uno de los gráficos que necesitas:

Prompt 1: Facturación total por región en 2023

import pandas as pd
import matplotlib.pyplot as plt

# Asegúrate de que la columna "fecha" sea datetime
df_consolidado['fecha'] = pd.to_datetime(df_consolidado['fecha'])

# Filtra solo los registros del año 2023
df_2023 = df_consolidado[df_consolidado['fecha'].dt.year == 2023]

# Crea la columna "facturacion"
df_2023['facturacion'] = df_2023['precio_unitario'] * df_2023['cantidad'] + df_2023['envio']

# Agrupa por "region" y suma la facturación
facturacion_por_region = df_2023.groupby('region')['facturacion'].sum().sort_values(ascending=False)

# Crea el gráfico de barras
fig, ax = plt.subplots(figsize=(16, 9))
fig.patch.set_facecolor(GRIS_1)
ax.set_facecolor(GRIS_1)

bars = ax.bar(facturacion_por_region.index, facturacion_por_region.values, color=AQUA_1)

# Destaca la región top
bars[0].set_color(AQUA_3)

# Título y etiquetas
ax.set_title('Facturación total por región (2023)', fontsize=18, color=GRIS_5)
ax.set_xlabel('Región', fontsize=12, color=AZUL_1)
ax.set_ylabel('Facturación (millones)', fontsize=12, color=AZUL_1)

# Formateo del eje Y
ax.get_yaxis().set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}M".format(int(x/1e6))))

# Etiquetas de datos encima de cada barra
for bar in bars:
    yval = bar.get_height()
    ax.text(bar.get_x() + bar.get_width()/2, yval, f'{yval/1e6:.1f}M', va='bottom', ha='center', fontsize=12, color=AZUL_1)

# Quita bordes
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['left'].set_visible(False)

plt.show()

Prompt 2: Proporción de clientes pre-registrados en Zoop Pay

# Asegúrate de que exista "cashback" en df_consolidado
if 'cashback' not in df_consolidado.columns:
    clientes_zoop = pd.read_csv('clientes_zoop.csv')
    df_consolidado = df_consolidado.merge(clientes_zoop[['ID_compra', 'cashback']], on='ID_compra', how='left')

# Calcula el porcentaje de clientes únicos
clientes_unicos = df_consolidado.drop_duplicates(subset='ID_cliente')
porcentaje_cashback = clientes_unicos['cashback'].value_counts(normalize=True) * 100

# Crea el gráfico tipo rosca
fig, ax = plt.subplots(figsize=(6, 6))
fig.patch.set_facecolor(GRIS_1)
ax.set_facecolor(GRIS_1)

wedges, texts, autotexts = ax.pie(porcentaje_cashback, labels=porcentaje_cashback.index, autopct='%1.1f%%',
                                  startangle=90, colors=[AZUL_1, GRIS_3], pctdistance=0.8,
                                  wedgeprops=dict(width=0.4))

# Estilo de las etiquetas
for text, autotext in zip(texts, autotexts):
    text.set_color(text.get_color())
    text.set_fontsize(12)
    autotext.set_color(BLANCO)
    autotext.set_fontsize(12)
    autotext.set_fontweight('bold')

ax.set_title('Proporción de clientes pre-registrados en Zoop Pay', fontsize=18, color=GRIS_5)

plt.show()

Espero que esto te ayude a refinar tus visualizaciones. ¡Bons estudos!