import pandas as pd
import matplotlib.pyplot as plt
# --- Dados (de 2024 para 1953) ---
valores = [
12.187, 8.300, 7.321, 10.947, 12.031, 6.999, 6.938, 6.541,
7.307, 7.473, 6.595, 9.058, 9.849, 8.886, 9.207, 11.590,
7.075, 7.386, 8.487, 10.074, 11.241, 12.567, 13.017, 13.084,
12.763, 13.736, 14.231, 13.109, 13.352, 14.382, 14.831, 17.176,
18.591, 18.205, 21.269, 20.464, 18.017, 23.950, 22.677, 24.158,
22.539, 24.988, 27.549, 24.926, 24.334, 24.477, 24.685, 21.958,
27.097, 26.341, 21.637, 28.056, 31.230, 26.846, 23.925, 23.775,
19.370, 19.834, 18.539, 14.696, 17.167, 16.068, 13.251, 11.371,
10.282, 11.325, 11.684, 10.269, 14.002, 9.717, 10.900, 8.206
]
# --- Inverter a lista (para ficar 1953 → 2024) ---
valores = valores[::-1]
# --- Criar lista de anos ---
anos = list(range(1953, 1953 + len(valores))) # 1953–2024
# --- Criar DataFrame ---
df = pd.DataFrame({"Ano": anos, "Taxa_de_Poupanca": valores})
# --- Calcular estatísticas ---
media = round(df["Taxa_de_Poupanca"].mean(), 2)
moda = df["Taxa_de_Poupanca"].mode()[0]
anos_moda = df.loc[df["Taxa_de_Poupanca"] == moda, "Ano"].tolist()
maximo = df["Taxa_de_Poupanca"].max()
ano_max = df.loc[df["Taxa_de_Poupanca"].idxmax(), "Ano"]
minimo = df["Taxa_de_Poupanca"].min()
ano_min = df.loc[df["Taxa_de_Poupanca"].idxmin(), "Ano"]
# --- Mostrar resultados ---
print("📊 Estatísticas da Taxa de Poupança (1953–2024)\n")
print(f"➡ Média: {media:.2f} %")
print(f"➡ Moda: {moda:.2f} % (anos {', '.join(map(str, anos_moda))})")
print(f"⬆ Máxima: {maximo:.2f} % (ano {ano_max})")
print(f"⬇ Mínima: {minimo:.2f} % (ano {ano_min})\n")
# --- Gráfico ---
plt.figure(figsize=(13,6))
plt.plot(df["Ano"], df["Taxa_de_Poupanca"], marker='o', linewidth=1.3, label="Taxa de poupança (%)")
# Pontos máximo, mínimo e moda
plt.scatter(ano_max, maximo, color="green", s=80, zorder=5, label=f"Máx {maximo:.2f}% ({ano_max})")
plt.scatter(ano_min, minimo, color="red", s=80, zorder=5, label=f"Mín {minimo:.2f}% ({ano_min})")
for a in anos_moda:
plt.scatter(a, moda, color="purple", s=80, zorder=5, label=f"Moda {moda:.2f}% ({a})")
# Linhas horizontais da média e da moda
plt.axhline(y=media, color="orange", linestyle="--", linewidth=1.5, label=f"Média {media:.2f}%")
plt.axhline(y=moda, color="purple", linestyle=":", linewidth=1.5, label=f"Moda {moda:.2f}%")
# Títulos e estilo
plt.title("Taxa de Poupança dos Particulares em Portugal (1953–2024)", fontsize=14)
plt.xlabel("Ano")
plt.ylabel("Taxa de poupança (%)")
plt.grid(True, linestyle='--', alpha=0.6)
plt.legend(loc="best")
plt.tight_layout()
plt.show()
Comentários
Enviar um comentário