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

Desafío: perfil de los clientes

Volviendo a nuestro proyecto de Manos a la Obra, logramos generar dos visualizaciones más con los datos de nuestros desafíos.

¿Ahora, vamos a crear otros visuales enfocados en el perfil de nuestros clientes?

Has recibido una nueva solicitud de Zoop para generar 2 visuales, siendo uno de ellos relacionado al registro de clientes para un nuevo servicio que Zoop implementará, el Zoop Pay, y el otro sobre las evaluaciones de los clientes en relación con su ubicación. Observemos las dos situaciones y construyamos con la ayuda de ChatGPT los dos gráficos solicitados:

Desafío 1:

**PROMPT para CHATGPT:

Tenemos un DataFrame llamado df_clientes que contiene una columna llamada pre_registro_zoop_pay, donde 1 indica que el cliente está pre-registrado y 0 que no. Queremos construir un gráfico de pizza (pastel) que muestre la proporción de estos dos grupos.

El gráfico debe mostrar el porcentaje de cada categoría, usar colores contrastantes (azul para pre-registrados y gris para los que no) y tener un título descriptivo: 'Proporción de Pre-registro en Zoop Pay'. Utiliza matplotlib y pandas en Python.**

url_clientes = "https://gist.githubusercontent.com/ahcamachod/d08898e1cc84c7271856e78d9558ca3d/raw/2f7e1fa53711efe6433a5c5ec79948f600591cb9/clientes_zoop.csv"

url_ventas = "https://gist.githubusercontent.com/ahcamachod/966d7162a3c3a2769b8770b35abf1bcc/raw/d79941b3fa46a450f3611589abd8663399c1277b/ventas_zoop.csv"

import pandas as pd

df_clientes = pd.read_csv(url_clientes)
df_clientes.head()

print("Unique values in 'cashback' column:")
print(df_clientes['cashback'].unique())

total_customers = len(df_clientes)
pre_registered_customers = df_clientes[df_clientes['cashback'] == 'Sí'].shape[0]

percentage_pre_registered = (pre_registered_customers / total_customers) * 100

print(f"\nTotal number of customers: {total_customers}")
print(f"Number of customers pre-registered for 'Zoop Pay': {pre_registered_customers}")
print(f"Percentage of customers pre-registered for 'Zoop Pay': {percentage_pre_registered:.2f}%")

import matplotlib.pyplot as plt

# Count the occurrences of 'Sí' and 'No' in the 'cashback' column
cashback_counts = df_clientes['cashback'].value_counts()

# Prepare data for the pie chart
labels = ['Pre-registered' if label == 'Sí' else 'Not Pre-registered' for label in cashback_counts.index]
sizes = cashback_counts.values
colors = ['#66b3ff', '#99ff99'] # Example colors for better visualization

# Create the pie chart
plt.figure(figsize=(8, 8))
plt.pie(sizes, autopct='%1.1f%%', startangle=90, colors=colors, pctdistance=0.85)
plt.title('Proportion of Customers Pre-registered for Zoop Pay', fontsize=16)
plt.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
plt.legend(labels, loc="upper right", title="Zoop Pay Status")
plt.show()

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

Desafío 2:

**El Prompt para ChatGPT
"Tenemos un DataFrame llamado df_clientes con las columnas edad (numérica) y region (categórica). Queremos crear un Boxplot para analizar la distribución de las edades de los clientes en cada región del país. El gráfico debe tener la region en el eje X y la edad en el eje Y. Utiliza la librería seaborn para que el visual sea estéticamente profesional, aplica una paleta de colores variada y añade un título: 'Distribución de Edades por Región - Perfil Zoop'. Por favor, ordena las regiones alfabéticamente."

import seaborn as sns
import matplotlib.pyplot as plt
plt.figure(figsize=(14, 7))
sns.boxplot(x='region', y='edad', data=df_clientes)
plt.title('Age Distribution by Region')
plt.xlabel('Region')
plt.ylabel('Age')
plt.xticks(rotation=45, ha='right')
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 el Desafío 1, parece que el gráfico de pastel que generaste está casi correcto, pero hay un pequeño error en el código. Estás utilizando la columna cashback en lugar de pre_registro_zoop_pay. Aquí tienes el código corregido:

import pandas as pd
import matplotlib.pyplot as plt

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

# Contar los valores de pre_registro_zoop_pay
pre_registro_counts = df_clientes['pre_registro_zoop_pay'].value_counts()

# Preparar datos para el gráfico de pastel
labels = ['Pre-registrados', 'No Pre-registrados']
sizes = pre_registro_counts.values
colors = ['#66b3ff', '#cccccc']

# Crear el gráfico de pastel
plt.figure(figsize=(8, 8))
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90, colors=colors)
plt.title('Proporción de Pre-registro en Zoop Pay')
plt.axis('equal')
plt.show()

Para el Desafío 2, el código parece estar bien, pero podrías mejorar la estética y ordenar las regiones alfabéticamente. Aquí tienes una versión mejorada:

import seaborn as sns
import matplotlib.pyplot as plt

# Ordenar las regiones alfabéticamente
df_clientes['region'] = pd.Categorical(df_clientes['region'], categories=sorted(df_clientes['region'].unique()), ordered=True)

plt.figure(figsize=(14, 7))
sns.boxplot(x='region', y='edad', data=df_clientes, palette='Set3')
plt.title('Distribución de Edades por Región - Perfil Zoop')
plt.xlabel('Región')
plt.ylabel('Edad')
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()

Espero que estas sugerencias te sean útiles. ¡Bons estudos!