"""visualisasi_seaborn.py — empat grafik statistik dari data section ini."""

import matplotlib
matplotlib.use("Agg")  # backend tanpa layar: gambar disimpan, bukan ditampilkan
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd

nilai = [60, 62, 63, 65, 65, 67, 68, 68, 69, 70,
         70, 71, 72, 72, 73, 74, 74, 74, 75, 75,
         76, 77, 77, 78, 79, 80, 81, 82, 83, 84]
jam = [2, 3, 4, 5, 6, 7]
nilai6 = [65, 70, 75, 82, 86, 91]
df = pd.DataFrame({
    "kelas": ["A", "A", "A", "A", "A", "B", "B", "B", "B", "B"],
    "matematika": [68, 75, 75, 81, 84, 88, 90, 92, 97, 70],
    "bahasa": [70, 78, 74, 79, 85, 82, 88, 90, 94, 72],
})

sns.set_theme()  # tema diterapkan sekali di awal, seluruh grafik mengikuti

fig, ax = plt.subplots()  # grafik 1: histogram sebaran nilai 30 siswa
sns.histplot(nilai, bins=5, ax=ax)
ax.set_xlabel("Nilai ulangan")
ax.set_ylabel("Jumlah siswa")
ax.set_title("Sebaran Nilai 30 Siswa")
fig.savefig("histogram_seaborn.png")
plt.close()
print("histogram_seaborn.png tersimpan")

fig, ax = plt.subplots()  # grafik 2: scatter dengan garis regresi
sns.regplot(x=jam, y=nilai6, ax=ax)
ax.set_xlabel("Jam belajar per hari")
ax.set_ylabel("Nilai ulangan")
ax.set_title("Jam Belajar terhadap Nilai")
fig.savefig("regresi_seaborn.png")
plt.close()
print("regresi_seaborn.png tersimpan")

matriks = df[["matematika", "bahasa"]].corr()
fig, ax = plt.subplots()  # grafik 3: heatmap matriks korelasi
sns.heatmap(matriks, annot=True, fmt=".4f", cmap="vlag",
            vmin=-1, vmax=1, ax=ax)
ax.set_title("Korelasi Nilai Sepuluh Siswa")
fig.savefig("heatmap_korelasi.png")
plt.close()
print("heatmap_korelasi.png tersimpan")

panjang = df.melt(id_vars="kelas", value_vars=["matematika", "bahasa"],
                  var_name="mapel", value_name="nilai")
fig, ax = plt.subplots()  # grafik 4: boxplot dengan hue
sns.boxplot(data=panjang, x="mapel", y="nilai", hue="kelas", ax=ax)
ax.set_xlabel("Mata pelajaran")
ax.set_ylabel("Nilai")
ax.set_title("Sebaran Nilai Menurut Mapel dan Kelas")
fig.savefig("boxplot_hue.png")
plt.close()
print("boxplot_hue.png tersimpan")

b1, b0 = np.polyfit(jam, nilai6, 1)
print(f"slope regresi     : {b1:.4f}")
print(f"korelasi mapel    : {matriks.loc['matematika', 'bahasa']:.4f}")
print(f"mean matematika A : {df.loc[df['kelas'] == 'A', 'matematika'].mean():.1f}")
print(f"mean matematika B : {df.loc[df['kelas'] == 'B', 'matematika'].mean():.1f}")
