layout fix
This commit is contained in:
5
login.py
5
login.py
@ -168,11 +168,9 @@ def show_login():
|
|||||||
</style>
|
</style>
|
||||||
""", unsafe_allow_html=True)
|
""", unsafe_allow_html=True)
|
||||||
|
|
||||||
# Input form
|
|
||||||
username = st.text_input("Username", placeholder="Masukkan username")
|
username = st.text_input("Username", placeholder="Masukkan username")
|
||||||
password = st.text_input("Password", type="password", placeholder="Masukkan password")
|
password = st.text_input("Password", type="password", placeholder="Masukkan password")
|
||||||
|
|
||||||
# Validasi tombol login tetap tidak diubah
|
|
||||||
if st.button("Login", key="login_button"):
|
if st.button("Login", key="login_button"):
|
||||||
user = validate_login(username, password)
|
user = validate_login(username, password)
|
||||||
if user:
|
if user:
|
||||||
@ -183,10 +181,9 @@ def show_login():
|
|||||||
else:
|
else:
|
||||||
st.error("Username atau password salah.")
|
st.error("Username atau password salah.")
|
||||||
|
|
||||||
st.markdown('</div>', unsafe_allow_html=True) # Tutup container
|
st.markdown('</div>', unsafe_allow_html=True)
|
||||||
st.markdown('</div>', unsafe_allow_html=True)
|
st.markdown('</div>', unsafe_allow_html=True)
|
||||||
|
|
||||||
# Footer
|
|
||||||
st.markdown(
|
st.markdown(
|
||||||
"""
|
"""
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
|
@ -235,7 +235,7 @@ def show_karyawan_form():
|
|||||||
|
|
||||||
# Jika Employee ID sudah disimpan
|
# Jika Employee ID sudah disimpan
|
||||||
if st.session_state.employee_id:
|
if st.session_state.employee_id:
|
||||||
st.success(f"Employee ID ditemukan!")
|
st.success(f"ID Karyawan tersebut ditemukan! Silahkan isi form Kepuasan Kerja Anda")
|
||||||
|
|
||||||
st.markdown(
|
st.markdown(
|
||||||
"""
|
"""
|
||||||
|
@ -81,7 +81,7 @@ def navbar():
|
|||||||
<img src="data:image/png;base64,{get_image_as_base64(logo_path)}" alt="Logo">
|
<img src="data:image/png;base64,{get_image_as_base64(logo_path)}" alt="Logo">
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-links">
|
<div class="nav-links">
|
||||||
<a href="?page=pimpinan_form" class="{ 'active' if st.session_state.page == 'pimpinan_form' else '' }">Form Performance Rate</a>
|
<a href="?page=pimpinan_form" class="{ 'active' if st.session_state.page == 'pimpinan_form' else '' }">Form Penilaian</a>
|
||||||
<a href="?page=pimpinan_exploration" class="{ 'active' if st.session_state.page == 'pimpinan_exploration' else '' }">Dashboard</a>
|
<a href="?page=pimpinan_exploration" class="{ 'active' if st.session_state.page == 'pimpinan_exploration' else '' }">Dashboard</a>
|
||||||
</div>
|
</div>
|
||||||
<a class="login-button" href="{login_button_link}">{login_button_text}</a>
|
<a class="login-button" href="{login_button_link}">{login_button_text}</a>
|
||||||
|
@ -81,7 +81,7 @@ def navbar():
|
|||||||
<img src="data:image/png;base64,{get_image_as_base64(logo_path)}" alt="Logo">
|
<img src="data:image/png;base64,{get_image_as_base64(logo_path)}" alt="Logo">
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-links">
|
<div class="nav-links">
|
||||||
<a href="?page=pimpinan_form" class="{ 'active' if st.session_state.page == 'pimpinan_form' else '' }">Form Performance Rate</a>
|
<a href="?page=pimpinan_form" class="{ 'active' if st.session_state.page == 'pimpinan_form' else '' }">Form Penilaian</a>
|
||||||
<a href="?page=pimpinan_exploration" class="{ 'active' if st.session_state.page == 'pimpinan_exploration' else '' }">Dashboard</a>
|
<a href="?page=pimpinan_exploration" class="{ 'active' if st.session_state.page == 'pimpinan_exploration' else '' }">Dashboard</a>
|
||||||
</div>
|
</div>
|
||||||
<a class="login-button" href="{login_button_link}">{login_button_text}</a>
|
<a class="login-button" href="{login_button_link}">{login_button_text}</a>
|
||||||
@ -206,7 +206,7 @@ def show_pimpinan_form():
|
|||||||
"""
|
"""
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600&display=swap" rel="stylesheet">
|
||||||
<h3 style="text-align: center; font-family: 'Poppins', sans-serif;">
|
<h3 style="text-align: center; font-family: 'Poppins', sans-serif;">
|
||||||
Form Kinerja Rating Karyawan
|
Form Penilaian Kinerja Rating Karyawan
|
||||||
</h3>
|
</h3>
|
||||||
""", unsafe_allow_html=True
|
""", unsafe_allow_html=True
|
||||||
)
|
)
|
||||||
@ -220,7 +220,7 @@ def show_pimpinan_form():
|
|||||||
|
|
||||||
# Input Employee ID
|
# Input Employee ID
|
||||||
if not st.session_state.employee_id: # Jika belum ada ID yang tersimpan
|
if not st.session_state.employee_id: # Jika belum ada ID yang tersimpan
|
||||||
employee_id = st.text_input("Masukkan Employee ID Karyawan", placeholder="Contoh: 12345")
|
employee_id = st.text_input("Masukkan ID Karyawan yang ingin diisi", placeholder="Contoh: 12345")
|
||||||
|
|
||||||
# Tombol untuk mencocokkan employee_id
|
# Tombol untuk mencocokkan employee_id
|
||||||
if st.button("Isi Form"):
|
if st.button("Isi Form"):
|
||||||
|
@ -28,7 +28,6 @@ def connect_to_db():
|
|||||||
st.error(f"Koneksi ke database gagal: {e}")
|
st.error(f"Koneksi ke database gagal: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Fungsi untuk mendapatkan data karyawan dari database
|
|
||||||
def get_employee_data_from_db(employee_id):
|
def get_employee_data_from_db(employee_id):
|
||||||
conn = connect_to_db()
|
conn = connect_to_db()
|
||||||
if conn:
|
if conn:
|
||||||
@ -37,7 +36,7 @@ def get_employee_data_from_db(employee_id):
|
|||||||
query = "SELECT * FROM data_employee_db WHERE employee_id = %s"
|
query = "SELECT * FROM data_employee_db WHERE employee_id = %s"
|
||||||
cursor.execute(query, (employee_id,))
|
cursor.execute(query, (employee_id,))
|
||||||
result = cursor.fetchone()
|
result = cursor.fetchone()
|
||||||
return result # Kembalikan data sebagai dictionary jika ditemukan, None jika tidak
|
return result
|
||||||
except mysql.connector.Error as e:
|
except mysql.connector.Error as e:
|
||||||
st.error(f"Terjadi kesalahan saat mengakses database: {e}")
|
st.error(f"Terjadi kesalahan saat mengakses database: {e}")
|
||||||
return None
|
return None
|
||||||
@ -307,16 +306,14 @@ def show_prediction():
|
|||||||
<h3 style="text-align: center; font-family: 'Poppins', sans-serif;">
|
<h3 style="text-align: center; font-family: 'Poppins', sans-serif;">
|
||||||
Halaman Prediksi
|
Halaman Prediksi
|
||||||
</h3>
|
</h3>
|
||||||
<p style="font-family: 'Poppins', sans-serif;">
|
|
||||||
Masukkan ID Karyawan untuk memulai prediksi.
|
|
||||||
</p>
|
|
||||||
""", unsafe_allow_html=True
|
""", unsafe_allow_html=True
|
||||||
)
|
)
|
||||||
|
|
||||||
employee_id = st.text_input("Masukkan ID Karyawan", placeholder="Contoh: EM12345")
|
employee_id = st.text_input("Masukkan ID Karyawan yang ingin dicek", placeholder="Contoh: EM12345")
|
||||||
|
|
||||||
# Tombol untuk memulai prediksi
|
# Tombol untuk memulai prediksi
|
||||||
if st.button("Validasi dan Prediksi"):
|
if st.button("Lihat Hasil Prediksi"):
|
||||||
if not employee_id:
|
if not employee_id:
|
||||||
st.error("Harap masukkan ID Karyawan terlebih dahulu.")
|
st.error("Harap masukkan ID Karyawan terlebih dahulu.")
|
||||||
return
|
return
|
||||||
@ -328,10 +325,9 @@ def show_prediction():
|
|||||||
return
|
return
|
||||||
|
|
||||||
# Proses data karyawan
|
# Proses data karyawan
|
||||||
df = pd.DataFrame([employee_data]) # Ubah dictionary menjadi DataFrame
|
df = pd.DataFrame([employee_data])
|
||||||
df = process_employee_data(df) # Proses data
|
df = process_employee_data(df)
|
||||||
|
|
||||||
# Kolom yang diharapkan oleh model
|
|
||||||
expected_columns_class = class_model.feature_names_
|
expected_columns_class = class_model.feature_names_
|
||||||
expected_columns_reg = reg_model.feature_names_
|
expected_columns_reg = reg_model.feature_names_
|
||||||
|
|
||||||
@ -453,11 +449,6 @@ def show_prediction():
|
|||||||
buf = io.BytesIO()
|
buf = io.BytesIO()
|
||||||
plt.savefig(buf, format='png', bbox_inches="tight", dpi=100)
|
plt.savefig(buf, format='png', bbox_inches="tight", dpi=100)
|
||||||
buf.seek(0)
|
buf.seek(0)
|
||||||
# cols = st.columns(2) # Bagi halaman menjadi 4 kolom
|
|
||||||
# with cols[0]: # Grafik SHAP ditempatkan di kolom pertama
|
|
||||||
# st.image(buf, caption="SHAP Waterfall Plot", use_container_width=True)
|
|
||||||
|
|
||||||
# plt.close()
|
|
||||||
|
|
||||||
col1, col2 = st.columns([1.5, 2]) # **Kolom pertama untuk grafik, kolom kedua untuk penjelasan**
|
col1, col2 = st.columns([1.5, 2]) # **Kolom pertama untuk grafik, kolom kedua untuk penjelasan**
|
||||||
|
|
||||||
@ -496,27 +487,6 @@ def show_prediction():
|
|||||||
|
|
||||||
generate_shap_plot(X_test_class, explainer_class, shap_dict, predicted_class)
|
generate_shap_plot(X_test_class, explainer_class, shap_dict, predicted_class)
|
||||||
|
|
||||||
# top_factors = sorted(shap_dict.items(), key=lambda x: abs(x[1]), reverse=True)[:5]
|
|
||||||
|
|
||||||
# # Bangun kesimpulan dinamis
|
|
||||||
# summary = " dan ".join(
|
|
||||||
# [f"<b>{factor}</b> dengan kontribusi <b>{'+' if value > 0 else ''}{value:.2f}</b>" for factor, value in top_factors]
|
|
||||||
# )
|
|
||||||
|
|
||||||
# # Kesimpulan Dinamis
|
|
||||||
# st.markdown(
|
|
||||||
# f"""
|
|
||||||
# <div style="text-align: justify; font-family: 'Poppins', sans-serif;">
|
|
||||||
# Grafik ini menunjukkan bagaimana hasil prediksi dihitung berdasarkan beberapa faktor utama.
|
|
||||||
# Faktor-faktor yang paling memengaruhi hasil prediksi adalah {summary}.
|
|
||||||
# Faktor-faktor ini memberikan kontribusi signifikan terhadap hasil akhir prediksi,
|
|
||||||
# baik dalam meningkatkan maupun menurunkan probabilitas retensi karyawan.
|
|
||||||
# </div>
|
|
||||||
# """,
|
|
||||||
# unsafe_allow_html=True
|
|
||||||
# )
|
|
||||||
|
|
||||||
# Footer
|
|
||||||
st.markdown(
|
st.markdown(
|
||||||
"""
|
"""
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
@ -527,6 +497,5 @@ def show_prediction():
|
|||||||
unsafe_allow_html=True
|
unsafe_allow_html=True
|
||||||
)
|
)
|
||||||
|
|
||||||
# Jalankan fungsi show_prediction
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
show_prediction()
|
show_prediction()
|
Reference in New Issue
Block a user