import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

# 1. Configurando o ambiente visual
sns.set_theme(style="whitegrid")
fig, axes = plt.subplots(1, 2, figsize=(16, 6))  # Cria uma janela com 2 gráficos lado a lado

# 2. Gerando uma base de dados adequada (80 pessoas)
np.random.seed(42)
n = 80
idade = np.random.randint(20, 60, size=n)
escolaridade = np.random.choice(
    ["Ensino Médio", "Graduação", "Pós-Graduação"], size=n, p=[0.5, 0.3, 0.2]
)

# Criando a lógica da renda (Idade e Estudo influenciam o ganho)
renda = []
for i in range(n):
    base = 2000 + (idade[i] * 45)
    if escolaridade[i] == "Graduação":
        base += 3000
    elif escolaridade[i] == "Pós-Graduação":
        base += 6000
    renda.append(base + np.random.normal(0, 400))  # Adiciona um ruído natural

# Inserindo Outliers Propositais (Pessoas que ganham muito fora da curva)
renda[10] = 18000
renda[25] = 19500

# Montando o DataFrame
df_graficos = pd.DataFrame(
    {"Idade": idade, "Escolaridade": escolaridade, "Renda": renda}
)

# Ordenando as categorias para o Boxplot ficar elegante na tela
ordem_estudo = ["Ensino Médio", "Graduação", "Pós-Graduação"]

# 3. Construindo o GRAFICO DE DISPERSÃO (Esquerda)
sns.scatterplot(
    data=df_graficos,
    x="Idade",
    y="Renda",
    hue="Escolaridade",
    hue_order=ordem_estudo,
    palette="viridis",
    s=70,
    ax=axes[0],
)
axes[0].set_title("Gráfico de Dispersão: Idade vs Renda", fontsize=14, weight="bold")
axes[0].set_xlabel("Idade (Anos)", fontsize=12)
axes[0].set_ylabel("Renda Mensal (R$)", fontsize=12)

# 4. Construindo o BOXPLOT (Direita)
sns.boxplot(
    data=df_graficos,
    x="Escolaridade",
    y="Renda",
    order=ordem_estudo,
    palette="Set2",
    ax=axes[1],
)
axes[1].set_title(
    "Boxplot: Distribuição da Renda por Escolaridade", fontsize=14, weight="bold"
)
axes[1].set_xlabel("Nível de Escolaridade", fontsize=12)
axes[1].set_ylabel("Renda Mensal (R$)", fontsize=12)

# Ajustando o layout e exibindo
plt.tight_layout()
plt.show()
