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()
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()