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

Etapa 4 Desafio 1 y 2

Proyecto Desafío 1: Ventas Online

En la columna Fecha de venta tenemos fechas en el formato 'día/mes/año' (dd/mm/AAAA). Transforme estos datos al tipo datetime y busque una forma de visualización de subconjunto que pueda contribuir al objetivo del contexto en el que se insertan los datos.

El objetivo de este proyecto es analizar los resultados de un evento con los clientes de una empresa de venta online. Se recopiló un conjunto de datos que contiene los clientes que gastaron más en productos dentro de los 5 días posteriores a la venta, que es la duración del evento. Este análisis identificará al cliente con la mayor compra esa semana, quien recibirá un premio de la tienda, y posteriormente, puede ayudar a la empresa a crear nuevas estrategias para atraer más clientes.

import pandas as pd
import json
import re
import matplotlib.pyplot as plt

with open('/content/dados_vendas_clientes.json', 'r', encoding='utf-8') as f:
    dados = json.load(f)

df = pd.DataFrame(dados['dados_vendas'])

print("DataFrame original:")
display(df)

df = df.explode(['Cliente', 'Valor da compra']).reset_index(drop=True)

print("DataFrame normalizado:")
display(df.head())

df['Data de venda'] = pd.to_datetime(df['Data de venda'], format='%d/%m/%Y')

print("Tipo de dato fecha:")
print(df['Data de venda'].dtype)

def limpiar_nombre(nombre):
    nombre = nombre.lower()
    nombre = re.sub(r'[^a-záéíóúñ\s]', '', nombre)
    nombre = re.sub(r'\s+', ' ', nombre)
    return nombre.strip()

df['Cliente'] = df['Cliente'].apply(limpiar_nombre)

print("Clientes limpios:")
display(df[['Cliente']].drop_duplicates())

df['Valor da compra'] = (
    df['Valor da compra']
    .str.replace('R$', '', regex=False)
    .str.replace(',', '.', regex=False)
    .str.strip()
    .astype(float)
)

print("Tipo de dato Valor da compra:")
print(df['Valor da compra'].dtype)

total_por_cliente = (
    df.groupby('Cliente')['Valor da compra']
    .sum()
    .sort_values(ascending=False)
)

print("\nTotal gastado por cliente durante el evento:")
display(total_por_cliente)

cliente_ganador = total_por_cliente.idxmax()
monto_ganador = total_por_cliente.max()

print("Cliente ganador del evento:")
print(cliente_ganador)

print("Total gastado:")
print(round(monto_ganador, 2))

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

Proyecto Desafío 2: Administración de Condominios

Al igual que en el Proyecto Desafío 1, trabajamos con todas las columnas excepto las que involucran fechas.

En las columnas datas_de_pagamento y datas_combinadas_pagamento tenemos fechas en el formato 'día/mes/año' (dd/mm/AAAA). Transforme estos datos al tipo datetime y busque una forma de visualización de subconjunto que pueda contribuir al objetivo del contexto en el que se insertan los datos.

Administrar condominios es una tarea que requiere mucha atención y organización. Entre las diversas responsabilidades de gestión se encuentra el cobro del alquiler a los inquilinos. Para garantizar la buena salud financiera de la empresa, es fundamental que estos pagos se realicen de forma regular y puntual. Sin embargo, sabemos que esto no siempre sucede. Teniendo esto en cuenta, propongo un desafío de procesamiento de datos con el objetivo de analizar el retraso en el pago de la renta en el condominio ficticio de algunos residentes.

import pandas as pd
import json
import matplotlib.pyplot as plt

with open('/content/dados_locacao_imoveis.json', 'r', encoding='utf-8') as f:
    dados = json.load(f)

df = pd.DataFrame(dados['dados_locacao'])

print("Estructura original:")
display(df.head())

df = df.explode([
    'datas_combinadas_pagamento',
    'datas_de_pagamento',
    'valor_aluguel'
]).reset_index(drop=True)

df['datas_combinadas_pagamento'] = pd.to_datetime(
    df['datas_combinadas_pagamento'],
    format='%d/%m/%Y'
)

df['datas_de_pagamento'] = pd.to_datetime(
    df['datas_de_pagamento'],
    format='%d/%m/%Y'
)

print("\nTipos de datos después de conversión:")
print(df[['datas_combinadas_pagamento', 'datas_de_pagamento']].dtypes)

df['dias_atraso'] = (
    df['datas_de_pagamento'] - df['datas_combinadas_pagamento']
).dt.days

print("\nEjemplo con cálculo de atraso:")
display(df[['apartamento',
            'datas_combinadas_pagamento',
            'datas_de_pagamento',
            'dias_atraso']].head())
            
atraso_promedio = (
    df.groupby('apartamento')['dias_atraso']
    .mean()
    .reset_index()
)

print("\nAtraso promedio por apartamento:")
display(atraso_promedio)

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 mencionaste, aquí tienes algunas sugerencias:

Proyecto Desafío 1: Ventas Online

Ya has transformado la columna Fecha de venta al tipo datetime. Ahora, para visualizar un subconjunto de datos que pueda ser útil, podrías intentar lo siguiente:

  1. Filtrar Ventas Recientes: Filtra las ventas que ocurrieron dentro de los últimos 5 días del evento. Esto te ayudará a identificar rápidamente las compras que contribuyeron al total de cada cliente.

    fecha_evento = df['Data de venda'].max()  # Suponiendo que la fecha más reciente es el fin del evento
    ventas_recientes = df[df['Data de venda'] >= fecha_evento - pd.Timedelta(days=5)]
    
  2. Visualización: Puedes crear un gráfico de barras para mostrar el gasto total de cada cliente en esos 5 días.

    total_por_cliente_reciente = (
        ventas_recientes.groupby('Cliente')['Valor da compra']
        .sum()
        .sort_values(ascending=False)
    )
    
    total_por_cliente_reciente.plot(kind='bar', title='Gasto total por cliente en los últimos 5 días')
    plt.xlabel('Cliente')
    plt.ylabel('Valor da compra')
    plt.show()
    

Proyecto Desafío 2: Administración de Condominios

Has calculado correctamente el atraso promedio por apartamento. Para visualizar estos datos:

  1. Gráfico de Barras de Atraso Promedio: Puedes crear un gráfico de barras para mostrar el atraso promedio por apartamento.

    atraso_promedio.set_index('apartamento').plot(kind='bar', title='Atraso promedio por apartamento')
    plt.xlabel('Apartamento')
    plt.ylabel('Días de atraso promedio')
    plt.show()
    

Estas visualizaciones pueden ayudarte a identificar patrones y tomar decisiones informadas sobre las estrategias a seguir.

Espero haber ayudado y buenos estudios!