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

11 Desafío: refinando las visualizaciones

DESAFIO 1
El Prompt para ChatGPT

Este es el prompt refinado que cumple con todas las especificaciones técnicas y visuales:
Actúa como un experto en visualización de datos con Python. Tengo un DataFrame llamado df_ventas_2023 que contiene el total de ventas agrupado por la columna region.
Genera el código para un gráfico de barras horizontales siguiendo estas instrucciones estrictas:
Tamaño de la figura: (16, 9).
Colores de fondo: Tanto el fondo de la figura como el área del gráfico deben ser GRIS_1.
Barras: Color AQUA_1.
Título: 'Facturamiento por Región en 2023', tamaño 18, color GRIS_5.
Ejes: Etiquetas y rótulos (ticks) en tamaño 12 y color AZUL_1.
Limpieza: Elimina todos los bordes posibles (spines).
Etiquetas de datos: Muestra el valor sobre cada barra convertido a millones (ej. 1.5M), en color AZUL_1 y tamaño 12.
Nota: No definas las variables de colores en el código, asume que ya existen: AZUL_1, AQUA_1, GRIS_1, GRIS_5.

import pandas as pd
import matplotlib.pyplot as plt

AZUL_1 = '#174A7E'
AQUA_1 = '#5DA5DA'
GRIS_1 = '#F0F0F0'
GRIS_5 = '#424242'

url_ventas = "https://gist.githubusercontent.com/ahcamachod/966d7162a3c3a2769b8770b35abf1bcc/raw/d79941b3fa46a450f3611589abd8663399c1277b/ventas_zoop.csv"
df_ventas = pd.read_csv(url_ventas)

# Convertir fecha y filtrar por el año 2023
df_ventas['fecha'] = pd.to_datetime(df_ventas['fecha'])
df_ventas_2023 = df_ventas[df_ventas['fecha'].dt.year == 2023]

# Agrupar por categoría y sumar cantidad (asumiendo que 'precio' no está disponible)
facturamiento_region = df_ventas_2023.groupby('categoria')['cantidad'].sum().sort_values(ascending=True)

# 3. Creación del Visual Refinado
fig, ax = plt.subplots(figsize=(16, 9))

# Configuración de fondos
fig.set_facecolor(GRIS_1)
ax.set_facecolor(GRIS_1)

bars = ax.barh(facturamiento_region.index, facturamiento_region.values, color=AQUA_1)

ax.set_title('Cantidad Vendida por Categoría en 2023', fontsize=18, color=GRIS_5, pad=20, loc='left', fontweight='bold')
ax.tick_params(axis='both', labelsize=12, colors=AZUL_1)

for spine in ax.spines.values():
    spine.set_visible(False)

for bar in bars:
    width = bar.get_width()
    ax.text(width + 500, bar.get_y() + bar.get_height()/2,
            f'{width:,.0f}',
            va='center', ha='left', fontsize=12, color=AZUL_1)

plt.tight_layout()
plt.show()

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

DESAFIO 2

El Prompt para ChatGPT

Actúa como un experto en visualización de datos con Python. Tengo un DataFrame llamado df_clientes con la columna pre_registro_zoop_pay (donde 1 es 'Sí' y 0 es 'No').
Genera el código para un gráfico de rosca (donut chart) siguiendo estas instrucciones:
Tamaño de la figura: (6, 6).
Fondos: Tanto la figura como el área del gráfico deben ser GRIS_1.
Colores de porciones: 'Sí' en AZUL_1 y 'No' en GRIS_3.
Título: 'Proporción de Pre-registrados en Zoop Pay', tamaño 18 y color GRIS_5.
Etiquetas y Porcentajes:
Porcentajes dentro de la rosca: tamaño 12, negrita, color BLANCO y posicionados a 0.8 del centro.
Etiquetas de las porciones: tamaño 12 y del mismo color que la porción correspondiente.
Diseño de Rosca: Ancho de la rosca de 0.4. Sin efectos de explosión ni sombras.
Nota: No definas las variables de color, asume que ya están declaradas: AZUL_1, GRIS_1, GRIS_3, GRIS_5, BLANCO.

import pandas as pd
import matplotlib.pyplot as plt

AZUL_1 = '#174A7E'
GRIS_1 = '#F0F0F0'
GRIS_3 = '#A2A2A2'
GRIS_5 = '#424242'
BLANCO = '#FFFFFF'

url_clientes = "https://gist.githubusercontent.com/ahcamachod/d08898e1cc84c7271856e78d9558ca3d/raw/2f7e1fa53711efe6433a5c5ec79948f600591cb9/clientes_zoop.csv"
df_clientes = pd.read_csv(url_clientes)

print("Columnas disponibles en df_clientes:")
print(df_clientes.columns)
print("--------------------------------------------------")

labels = ['Sí', 'No']
colors = [AZUL_1, GRIS_3]

fig, ax = plt.subplots(figsize=(6, 6))
fig.set_facecolor(GRIS_1)
ax.set_facecolor(GRIS_1)

wedges, texts, autotexts = ax.pie(
    conteo,
    labels=labels,
    autopct='%1.1f%%',
    startangle=90,
    colors=colors,
    pctdistance=0.8,                     # Posición de los porcentajes
    wedgeprops={'width': 0.4},           # Ancho de la rosca
    textprops={'fontsize': 12}
)

for autotext in autotexts:
    autotext.set_color(BLANCO)
    autotext.set_weight('bold')

for i, text in enumerate(texts):
    text.set_color(colors[i])

plt.title('Proporción de Pre-registrados en Zoop Pay', fontsize=18, color=GRIS_5, pad=20, fontweight='bold')

plt.tight_layout()
plt.show()

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

1 respuesta

Hola, César, espero que estés bien

Para abordar los desafíos que mencionas, parece que ya tienes un buen punto de partida. Vamos a revisar cada uno de ellos:

Desafío 1: Gráfico de barras horizontales

El código que has compartido parece estar casi completo, pero asegúrate de que las etiquetas de datos se muestren en millones. Aquí tienes un ejemplo de cómo podrías ajustar el código:

for bar in bars:
    width = bar.get_width()
    ax.text(width + 500, bar.get_y() + bar.get_height()/2,
            f'{width/1000000:.1f}M',  # Convertir a millones
            va='center', ha='left', fontsize=12, color=AZUL_1)

Desafío 2: Gráfico de rosca

Para el gráfico de rosca, asegúrate de que estás contando correctamente los valores de pre_registro_zoop_pay. Aquí tienes un ejemplo de cómo podrías hacerlo:

conteo = df_clientes['pre_registro_zoop_pay'].value_counts()

fig, ax = plt.subplots(figsize=(6, 6))
fig.set_facecolor(GRIS_1)
ax.set_facecolor(GRIS_1)

wedges, texts, autotexts = ax.pie(
    conteo,
    labels=labels,
    autopct='%1.1f%%',
    startangle=90,
    colors=colors,
    pctdistance=0.8,
    wedgeprops={'width': 0.4},
    textprops={'fontsize': 12}
)

for autotext in autotexts:
    autotext.set_color(BLANCO)
    autotext.set_weight('bold')

for i, text in enumerate(texts):
    text.set_color(colors[i])

plt.title('Proporción de Pre-registrados en Zoop Pay', fontsize=18, color=GRIS_5, pad=20, fontweight='bold')

plt.tight_layout()
plt.show()

Espero que estos ajustes te sean útiles. ¡Bons estudios!