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

Desafio Zoop Pay

Para este ejercicio realicé 2 Prompt

1

Necesito que generes código en Python (pandas) para Google Colab/Jupyter.

1) Lee estas dos bases desde URL:
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"

2) Cárgalas en dataframes df_clientes y df_ventas.

3) Muéstrame:
- df_clientes.head(), df_ventas.head()
- df_clientes.info(), df_ventas.info()
- lista de columnas de cada uno (df_clientes.columns y df_ventas.columns)

4) Define claramente la(s) columna(s) llave para unir ventas con clientes (por ejemplo ID_cliente u otra que exista en ambos). 
- Si los nombres de columnas no coinciden, renómbralas para que la llave tenga el mismo nombre en ambos dataframes.
- Asegúrate de que la llave tenga el mismo tipo (string o int) en ambos.

5) Convierte la columna de fecha de ventas a datetime.
- Detecta el nombre real de la columna de fecha (puede llamarse "fecha" u otro parecido).
- Convierte con pd.to_datetime(..., errors="coerce", dayfirst=True) y deja la columna como datetime.
- Reporta cuántos NaT quedaron tras la conversión.

6) Une df_ventas con df_clientes usando merge (left join desde ventas para no perder compras) y guarda el resultado en un dataframe llamado df.

7) Ordena las columnas finales de df en este orden (si alguna no existe, créala como NaN):
[ID_compra, fecha, horario, categoria, precio_unitario, cantidad, envio, metodo_pago, ID_cliente, edad, sexo_biologico, ciudad]

8) Al final imprime:
- df.head()
- df.shape
- df.isna().sum().sort_values(ascending=False).head(15)

No expliques teoría: entrega el código en celdas (bloques) y comentarios breves en el código.

2

Ahora continúa desde el dataframe df ya creado (ventas + clientes).

1) Lee esta tercera base desde URL:
url_zoop_pay = "https://gist.githubusercontent.com/ahcamachod/ce728231a836a973c0df94a9f03ed871/raw/8db6da43d7cd94fcab937208067d0fceb521b78c/zoop_pay.csv"

2) Cárgala en df_zoop.

3) Muéstrame:
- df_zoop.head()
- df_zoop.info()
- df_zoop.columns

4) Objetivo: concatenar df (clientes+ventas) con df_zoop para crear una tabla consolidada con todos los registros en un dataframe llamado df_consolidado.

Reglas:
- La tabla final df_consolidado debe tener exactamente estas columnas y en este orden:
[ID_compra, fecha, horario, categoria, precio_unitario, cantidad, envio, metodo_pago, ID_cliente, edad, sexo_biologico, ciudad]

- Antes de concatenar, estandariza df_zoop para que tenga esas mismas columnas.
  * Si df_zoop trae solo clientes pre-registrados (sin compras), entonces:
    - ID_compra, horario, categoria, precio_unitario, cantidad, envio, metodo_pago deben quedar como NaN
    - fecha también como NaT (datetime)
  * Asegura que ID_cliente tenga el mismo tipo que en df.

- Asegura que la columna fecha en df_zoop esté como datetime (aunque quede NaT).

5) Concatena con pd.concat([df, df_zoop_estandarizado], ignore_index=True) y guarda en df_consolidado.

6) Valida:
- df_consolidado.shape
- df_consolidado.dtypes
- df_consolidado.head()
- porcentaje de nulos por columna (df_consolidado.isna().mean()*100).sort_values(ascending=False)

Entrega solo código en celdas con comentarios breves.
1 respuesta

¡Hola Randy, espero que estés bien!

Parece que estás trabajando en un ejercicio interesante que involucra la manipulación de datos con Python y pandas. Aquí te dejo una guía paso a paso que podrías seguir para completar el desafío Zoop Pay. Recuerda que este es solo un ejemplo y puedes ajustarlo según tus necesidades.

Parte 1: Clientes y Ventas

import pandas as pd

# 1. Leer las bases de datos desde las URLs
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"

df_clientes = pd.read_csv(url_clientes)
df_ventas = pd.read_csv(url_ventas)

# 2. Mostrar información básica
print(df_clientes.head())
print(df_ventas.head())
print(df_clientes.info())
print(df_ventas.info())
print(df_clientes.columns)
print(df_ventas.columns)

# 3. Definir columna(s) llave para unir
# Supongamos que la columna llave es 'ID_cliente'
df_ventas = df_ventas.rename(columns={'ID_de_cliente': 'ID_cliente'})

# Asegurar que el tipo de dato sea el mismo
df_clientes['ID_cliente'] = df_clientes['ID_cliente'].astype(str)
df_ventas['ID_cliente'] = df_ventas['ID_cliente'].astype(str)

# 4. Convertir columna de fecha a datetime
df_ventas['fecha'] = pd.to_datetime(df_ventas['fecha'], errors='coerce', dayfirst=True)
print(df_ventas['fecha'].isna().sum())  # Reportar NaT

# 5. Unir los dataframes
df = df_ventas.merge(df_clientes, on='ID_cliente', how='left')

# 6. Ordenar columnas
columnas_finales = ['ID_compra', 'fecha', 'horario', 'categoria', 'precio_unitario', 'cantidad', 'envio', 'metodo_pago', 'ID_cliente', 'edad', 'sexo_biologico', 'ciudad']
df = df.reindex(columns=columnas_finales)

# 7. Imprimir resultados
print(df.head())
print(df.shape)
print(df.isna().sum().sort_values(ascending=False).head(15))

Parte 2: Zoop Pay

# 1. Leer la tercera base de datos
url_zoop_pay = "https://gist.githubusercontent.com/ahcamachod/ce728231a836a973c0df94a9f03ed871/raw/8db6da43d7cd94fcab937208067d0fceb521b78c/zoop_pay.csv"
df_zoop = pd.read_csv(url_zoop_pay)

# 2. Mostrar información básica
print(df_zoop.head())
print(df_zoop.info())
print(df_zoop.columns)

# 3. Estandarizar df_zoop
df_zoop['ID_compra'] = pd.NA
df_zoop['horario'] = pd.NA
df_zoop['categoria'] = pd.NA
df_zoop['precio_unitario'] = pd.NA
df_zoop['cantidad'] = pd.NA
df_zoop['envio'] = pd.NA
df_zoop['metodo_pago'] = pd.NA
df_zoop['fecha'] = pd.to_datetime(df_zoop['fecha'], errors='coerce', dayfirst=True)

# Asegurar que ID_cliente tenga el mismo tipo
df_zoop['ID_cliente'] = df_zoop['ID_cliente'].astype(str)

# 4. Concatenar dataframes
df_consolidado = pd.concat([df, df_zoop], ignore_index=True)

# 5. Validar resultados
print(df_consolidado.shape)
print(df_consolidado.dtypes)
print(df_consolidado.head())
print((df_consolidado.isna().mean() * 100).sort_values(ascending=False))

Espero que este ejemplo te sea útil para completar tu ejercicio. ¡Espero haber ayudado y buenos estudios!