Este ejercicio te lo dejo para que lo intentes solo/a. Abajo encontrarás un código de ejemplo para que lo compares y un video explicativo, pero intenta verlo después de hacer el tuyo.
Consigna
En este ejercicio, deberás simular datos sobre ingresos, gastos y características demográficas de una población ficticia. Para ello, implementarás funciones que generen aleatoriamente categorías de edad, números de identificación (DNI), ingresos y gastos.
Pasos a seguir:
1️⃣ Generar la edad de las personas:
- Define una función que, de manera aleatoria, asigne una categoría de edad:
- 70% de los casos serán “joven”.
- 20% serán “mayor_21”.
- 10% serán “mayor_60”.
2️⃣ Generar el número de DNI según la edad:
- Define una función que asigne un número de DNI dependiendo de la categoría de edad:
- “mayor_60”: un número entre 5.000.000 y 15.000.000.
- “mayor_21”: un número entre 15.000.000 y 40.000.000.
- “joven”: un número entre 40.000.000 y 50.000.000.
3️⃣ Asignar ingresos:
- Si la persona es “mayor_21” o “mayor_60”, su ingreso será un valor aleatorio entre 800.000 y 1.500.000.
- Si la persona es “joven”, su ingreso será 20% menor.
4️⃣ Generar número de miembros en el hogar:
- Utiliza una distribución normal con media de 5 y desviación estándar de 1 usando la funcion normal() (tienes que investigar por tu cuenta).
5️⃣ Calcular gastos mensuales:
- Se gasta entre 80% y 90% de los ingresos.
- Dentro de los gastos:
- 📞 Telefonía representa 15% del gasto total.
- 🌐 Internet representa 7.8% del gasto total.
6️⃣ Ejecutar simulaciones:
- Simula el proceso para 100 y 1.000 personas.
- Calcula y muestra en pantalla:
- 📊 Promedio y desviación estándar de los ingresos y gastos.
- 👦 Proporción de jóvenes en la muestra.
- 🏠 Promedios de miembros en el hogar, gastos en telefonía e internet para los jóvenes.
¡Intenta resolverlo y luego compara con el código de ejemplo y el video explicativo! 🚀
import numpy as np
def generar_dni(edad_categoria):
if edad_categoria == 'mayor_60':
return np.random.randint(5000000, 15000000)
elif edad_categoria == 'mayor_21':
return np.random.randint(15000000, 40000000)
else:
return np.random.randint(40000000, 50000000)
def generar_edad():
valor = np.random.rand()
if valor <= 0.7:
return 'joven'
elif valor <= 0.9:
return 'mayor_21'
else:
return 'mayor_60'
def generar_ingreso(edad_categoria):
if edad_categoria in ['mayor_21', 'mayor_60']:
return np.random.randint(800000, 1500000)
else:
return np.random.randint(800000, 1500000) * 0.8
for n in [100, 1000]:
edades = np.array([generar_edad() for _ in range(n)])
dni = [generar_dni(edad) for edad in edades]
ingresos = np.array([generar_ingreso(edad) for edad in edades])
miembros_hogar = np.round(np.random.normal(5, 1, n))
gastos_total = ingresos * np.where(np.random.rand(n) < 0.8, 0.9, 0.8)
gasto_telefonia = gastos_total * 0.15
gasto_internet = gastos_total * 0.078
print(f"Simulación para {n} personas:")
print(f"Promedio de ingresos mensuales: ${np.mean(ingresos):.2f}")
print(f"Desvío estándar de ingresos mensuales: ${np.std(ingresos):.2f}")
print(f"Promedio de gastos mensuales totales: ${np.mean(gastos_total):.2f}")
print(f"Desvío estándar de gastos mensuales totales: ${np.std(gastos_total):.2f}")
prop_jovenes = np.sum(edades == 'joven') / n
print(f"Proporción de jóvenes: {prop_jovenes:.2%}")
print("Datos de jóvenes:")
print(f"Promedio de miembros en hogar: {np.mean(miembros_hogar[edades == 'joven']):.2f}")
print(f"Promedio de gasto en telefonía: ${np.mean(gasto_telefonia[edades == 'joven']):.2f}")
print(f"Promedio de gasto en internet: ${np.mean(gasto_internet[edades == 'joven']):.2f}")
print("\n")