"""analisis_lengkap.py -- analisis menyeluruh dataset karyawan PT Maju Bersama.

Dataset bersih (29 baris) dari Bagian 1 disematkan langsung sebagai teks CSV
agar skrip dapat dijalankan tanpa bergantung pada lokasi berkas data.
"""

import io

import numpy as np
import pandas as pd

csv_bersih = """id,nama,departemen,umur,masa_kerja,gaji,skor_kinerja
P001,Budi Santoso,Produksi,34,6,11.5,79
P002,Agus Wijaya,Produksi,28,3,9.4,74
P003,Joko Prasetyo,Produksi,41,12,14.6,81
P004,Tono Hartono,Produksi,25,1,8.0,70
P005,Eko Saputra,Produksi,38,9,13.5,83
P006,Hendra Gunawan,Produksi,31,5,10.8,77
P007,Udin Samsudin,Produksi,46,16,16.2,80
P008,Wahyu Nugroho,Produksi,52,20,18.8,85
P009,Yanto Kurniawan,Produksi,24,2,8.7,72
P010,Siti Rahmawati,Keuangan,35,8,12.0,76
P011,Dewi Lestari,Keuangan,29,4,9.8,73
P012,Rina Marlina,Keuangan,33.5,6,11.0,75
P013,Fajar Ramadhan,Keuangan,42,14,15.0,78
P014,Indra Maulana,Keuangan,33,7,11.2,74
P015,Prakasa Wibowo,Keuangan,56,22,45.0,88
P016,Maya Anggraini,Pemasaran,30,5,12.3,86
P017,Rian Hidayat,Pemasaran,27,3,11.0,84
P018,Gita Permata,Pemasaran,36,10,14.8,89
P019,Nanda Pratama,Pemasaran,32,7,13.2,87
P020,Citra Kirana,Pemasaran,26,2,10.2,82
P021,Bayu Setiawan,Pemasaran,39,13,16.4,90
P022,Laila Sari,Pemasaran,30,6,12.4,85
P023,Oka Mahendra,Pemasaran,44,18,18.8,91
P024,Tuti Handayani,SDM,37,9,11.7,71
P025,Yuni Astuti,SDM,28,3,8.5,68
P026,Putri Ayu,SDM,33,6,10.2,70
P027,Dedi Kurnia,SDM,40,11,12.4,70
P028,Wawan Susanto,SDM,45,15,14.7,73
P029,Sari Wulandari,SDM,26,1,7.5,67
"""

df = pd.read_csv(io.StringIO(csv_bersih))

mean_gaji = df["gaji"].mean()
std_gaji = df["gaji"].std(ddof=1)
med_gaji = df["gaji"].median()

print("=== Statistik gaji (juta Rp), n =", len(df), "===")
print(f"mean {mean_gaji:.2f} | median {med_gaji:.2f} | std {std_gaji:.2f} | "
      f"min {df['gaji'].min():.2f} | max {df['gaji'].max():.2f}")
print()

print("=== Per departemen: n, rata-rata gaji, rata-rata skor ===")
gab = df.groupby("departemen").agg(
    n=("id", "count"), gaji_mean=("gaji", "mean"), skor_mean=("skor_kinerja", "mean")
)
for dep, n, gm, sm in zip(gab.index, gab["n"], gab["gaji_mean"], gab["skor_mean"]):
    print(f"{dep:9s}: n={n:2d}  gaji {gm:5.2f}  skor {sm:5.2f}")
print()

r_masa = np.corrcoef(df["gaji"], df["masa_kerja"])[0, 1]
r_skor = np.corrcoef(df["gaji"], df["skor_kinerja"])[0, 1]
print("=== Korelasi gaji ===")
print(f"r(gaji, masa_kerja)   = {r_masa:.3f}")
print(f"r(gaji, skor_kinerja) = {r_skor:.3f}")
print()

z = (df["gaji"] - mean_gaji) / std_gaji
out = df[z.abs() > 2]
print("=== Outlier gaji (|z| > 2) ===")
for _, baris in out.iterrows():
    print(f"{baris['id']} {baris['nama']}: gaji {baris['gaji']:.1f} juta, z = {z[baris.name]:.2f}")
print()

skor_dept = df.groupby("departemen")["skor_kinerja"].mean()
med_keu = df.loc[df["departemen"] == "Keuangan", "gaji"].median()
gaji_dept = df.groupby("departemen")["gaji"].mean()
print("=== Ringkasan temuan ===")
print(f"1. Sebaran gaji condong kanan: mean {mean_gaji:.2f} juta melampaui median "
      f"{med_gaji:.2f} juta karena satu gaji direktur {df['gaji'].max():.1f} juta.")
print(f"2. Gaji seiring masa kerja (r = {r_masa:.3f}) lebih kuat daripada "
      f"seiring skor kinerja (r = {r_skor:.3f}).")
print(f"3. Outlier P015 menarik rata-rata gaji Keuangan ke {gaji_dept['Keuangan']:.2f} juta, "
      f"jauh di atas mediannya {med_keu:.2f} juta.")
print(f"4. Skor kinerja berbeda antar departemen: Pemasaran {skor_dept['Pemasaran']:.2f} "
      f"tertinggi, SDM {skor_dept['SDM']:.2f} terendah (selisih "
      f"{skor_dept['Pemasaran'] - skor_dept['SDM']:.2f} poin).")
print("5. Temuan bersifat deskriptif atas 29 baris: korelasi bukan kausalitas, "
      "dan generalisasi ke seluruh perusahaan perlu kehati-hatian.")
