import streamlit as st import os import mysql.connector import pandas as pd import json # Fungsi untuk mendapatkan gambar sebagai base64 def get_image_as_base64(image_path): import base64 with open(image_path, "rb") as img_file: return base64.b64encode(img_file.read()).decode("utf-8") # Fungsi untuk koneksi ke database def connect_to_db(): try: conn = mysql.connector.connect( host=st.secrets["mysql"]["host"], user=st.secrets["mysql"]["user"], password=st.secrets["mysql"]["password"], database=st.secrets["mysql"]["dbname"], port=st.secrets["mysql"]["port"] ) return conn except mysql.connector.Error as e: st.error(f"Koneksi ke database gagal: {e}") return None # Fungsi untuk mengambil data dari tabel history_prediction def get_all_predictions(): conn = connect_to_db() if conn: try: query = """SELECT employee_id as ID_Karyawan, hasil_prediksi_klasifikasi as Hasil_Prediksi_Retensi, hasil_prediksi_regresi as Hasil_Prediksi_Lama_Kerja, waktu_prediksi as Waktu_Prediksi FROM history_prediction""" df = pd.read_sql(query, conn) # Menggunakan Pandas untuk membaca data return df except mysql.connector.Error as e: st.error(f"Terjadi kesalahan saat mengambil data dari database: {e}") return pd.DataFrame() # Kembalikan DataFrame kosong jika terjadi error finally: conn.close() # Fungsi untuk mengambil data dari tabel shap_pred_result def get_shap_top_features(): conn = connect_to_db() if conn: try: query = "SELECT employee_id as ID_Karyawan, shap_values FROM shap_pred_result" df = pd.read_sql(query, conn) # Ekstraksi dan format ulang shap_values result = [] for _, row in df.iterrows(): employee_id = row['ID_Karyawan'] shap_values = json.loads(row['shap_values']) # Pastikan nilai SHAP berupa angka tunggal, jika list maka ambil rata-rata normalized_shap_values = { feature: (sum(value) / len(value) if isinstance(value, list) else value) for feature, value in shap_values.items() } # Ambil 5 fitur dengan SHAP value tertinggi (absolut) top_features = sorted( normalized_shap_values.items(), key=lambda x: abs(x[1]), reverse=True )[:5] # Buat format tabel baru formatted_row = { "ID_Karyawan": employee_id } for i, (feature, value) in enumerate(top_features, start=1): formatted_row[f"Nama_Fitur_{i}"] = feature formatted_row[f"Besar_Value_{i}"] = value result.append(formatted_row) # Konversi ke DataFrame formatted_df = pd.DataFrame(result) return formatted_df except mysql.connector.Error as e: st.error(f"Terjadi kesalahan saat mengambil data: {e}") return pd.DataFrame() finally: conn.close() # Fungsi untuk menampilkan navbar def navbar(): current_page = st.session_state.get("page", "Home") logo_path = os.path.join(os.path.dirname(__file__), "../asset/logo.png") # Cek status login if 'logged_in' in st.session_state and st.session_state['logged_in']: login_button_text = "Logout" login_button_link = "?page=Login&logout=true" # Tambahkan parameter logout else: login_button_text = "Logout" login_button_link = "?page=Login" st.markdown( f"""
""", unsafe_allow_html=True, ) def show_report(): # Tampilkan navbar navbar() st.markdown(""" """, unsafe_allow_html=True) # Konten halaman Laporan st.markdown( """