Spaces:
Running
Running
import streamlit as st | |
import pandas as pd | |
import json | |
from joblib import load | |
import mysql.connector | |
from mysql.connector import Error | |
import logging | |
import c45 | |
import time | |
# Load model yang telah ditraining | |
model = load('model_scratch_2.model') | |
# Fungsi untuk melakukan prediksi | |
def predict(data): | |
try: | |
start_time = time.time() # Waktu mulai prediksi | |
hasil_prediksi = model.predict(data)[0] | |
end_time = time.time() # Waktu selesai prediksi | |
duration = end_time - start_time # Durasi prediksi | |
# Perform prediction | |
hasil_prediksi = model.predict(data)[0] | |
if hasil_prediksi == 1: | |
hasil_prediksi_str = 'Recommended Candidate' | |
elif hasil_prediksi == 0: | |
hasil_prediksi_str = 'Not Recommended Candidate' | |
else: | |
hasil_prediksi_str = 'Data Tidak Sesuai Dengan Format' | |
return hasil_prediksi_str, duration | |
except Exception as e: | |
st.error(f"Error during prediction: {e}") | |
return None | |
# Fungsi untuk menyimpan data ke database | |
def save_to_database(nama, data, posisi_harapan, usia, hasil_prediksi_str): | |
try: | |
connection = mysql.connector.connect(host='sql12.freesqldatabase.com', | |
database='sql12711336', | |
user='sql12711336', | |
password='ufDVxditnx') | |
if connection.is_connected(): | |
cursor = connection.cursor(prepared=True) | |
insert_query = ("INSERT INTO klasifikasi " | |
"(nama, kategori_umur_1, kategori_umur_2, " | |
"kategori_umur_3, kategori_umur_4, kategori_umur_5, kategori_umur_6, " | |
"kategori_umur_7, kategori_umur_8, kategori_umur_9, kategori_umur_10, pendidikan, lama_pengalaman, " | |
"kesesuaian_posisi_dg_skills, kesesuaian_posisi_dg_pengalaman, " | |
"posisi_harapan, usia, hasil_prediksi) " | |
"VALUES " | |
"(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)") | |
cursor.execute(insert_query, (nama,) + tuple(data.values()) + (posisi_harapan, usia, hasil_prediksi_str)) | |
connection.commit() | |
st.success("Data berhasil disimpan ke database.") | |
except Error as e: | |
st.error(f"Error while connecting to MySQL: {e}") | |
finally: | |
if connection.is_connected(): | |
cursor.close() | |
connection.close() | |
# Fungsi utama untuk menampilkan aplikasi | |
def main(): | |
st.title('Aplikasi Prediksi Rekomendasi Data Kandidat Outsourcing Menggunakan Metode Decision Tree C4.5') | |
menu = ['Beranda', 'Deteksi', 'Record Kandidat'] | |
choice = st.sidebar.selectbox('Menu', menu) | |
if choice == 'Beranda': | |
st.subheader('Halaman Utama') | |
st.write('Aplikasi ini digunakan untuk melakukan klasifikasi kandidat yang Recommended atau Not Recommended untuk dipromosikan oleh TOG Indonesia ke Perusahaan yang membutuhkan Tenaga Kerja.') | |
elif choice == 'Deteksi': | |
st.subheader('Prediksi Calon Kandidat') | |
nama = st.text_input('Masukkan Nama') | |
posisi_harapan = st.text_input('Masukkan Posisi Harapan') | |
usia = st.number_input('Masukkan Usia Calon', min_value=0, step=1) | |
kategori_umur = {} | |
umur_ranges = [(0, 5), (6, 11), (12, 17), (18, 23), (24, 29), (30, 35), (36, 41), (42, 47), (48, 53), (54, float('inf'))] | |
for i, umur_range in enumerate(umur_ranges): | |
range_str = f"{umur_range[0]}-{umur_range[1]}" if umur_range[1] != float('inf') else f"{umur_range[0]}+" | |
kategori_umur[f'Kategori Umur {i+1}'] = st.checkbox(f'Kategori Umur {i+1} (Umur {range_str})') | |
pendidikan = st.selectbox('Pilih Kategori Pendidikan Calon Kandidat', ['>= S1 / D4 Sederajat', '< S1 / D4 Sederajat']) | |
pendidikan = 1 if pendidikan == '>= S1 / D4 Sederajat' else 0 | |
lama_pengalaman = st.selectbox('Pilih Kategori Lama Pengalaman Calon Kandidat', ['> 1 Tahun', '< 1 Tahun']) | |
lama_pengalaman = 1 if lama_pengalaman == '> 1 Tahun' else 0 | |
kesesuaian_posisi_skill = st.selectbox('Pilih Kategori Kesesuaian Posisi Harapan dengan Skills', ['Sesuai', 'Tidak Sesuai']) | |
kesesuaian_posisi_skill = 1 if kesesuaian_posisi_skill == 'Sesuai' else 0 | |
kesesuaian_posisi_pengalaman = st.selectbox('Pilih Kategori Kesesuaian Posisi Harapan dengan Pengalaman', ['Sesuai', 'Tidak Sesuai']) | |
kesesuaian_posisi_pengalaman = 1 if kesesuaian_posisi_pengalaman == 'Sesuai' else 0 | |
if st.button('Prediksi'): | |
data = {**kategori_umur, 'Pendidikan': pendidikan, 'Lama_Pengalaman': lama_pengalaman, | |
'Kesesuaian_Posisi_Skill': kesesuaian_posisi_skill, 'Kesesuaian_Posisi_Pengalaman': kesesuaian_posisi_pengalaman} | |
data_df = pd.DataFrame([data]) | |
st.write('Data untuk prediksi:') | |
st.write(data_df) | |
hasil_prediksi, duration = predict(data_df) | |
if hasil_prediksi: | |
st.write(f'Hasil Prediksi: {hasil_prediksi}') | |
st.write(f'Durasi Prediksi: {duration} detik') | |
save_to_database(nama, data, posisi_harapan, usia, hasil_prediksi) | |
elif choice == 'Record Kandidat': | |
st.subheader('Record Kandidat') | |
data = fetch_data() | |
if data: | |
df = pd.DataFrame(data, columns=['Nama Calon Kandidat', 'Usia', 'Posisi Harapan','Pendidikan','Lama Pengalaman','Kesesuaian Posisi Harapan dg Skills yang dimiliki','Kesesuaian Posisi Harapan dengan Pengalaman yang Dimiliki','Label']) | |
st.write(df) | |
else: | |
st.warning("Tidak ada data yang ditemukan.") | |
# Tampilkan record kandidat dari database | |
def create_connection(): | |
connection = mysql.connector.connect(host='sql12.freesqldatabase.com', | |
database='sql12711336', | |
user='sql12711336', | |
password='ufDVxditnx') | |
return connection | |
def fetch_data(): | |
try: | |
connection = create_connection() | |
if connection.is_connected(): | |
cursor = connection.cursor() | |
cursor.execute("SELECT `nama`, `usia`, `posisi_harapan`, `pendidikan`, `lama_pengalaman`, `kesesuaian_posisi_dg_skills`, `kesesuaian_posisi_dg_pengalaman`, `hasil_prediksi` FROM `klasifikasi`;") | |
data = cursor.fetchall() | |
if data: | |
# Konversi nilai integer menjadi string | |
converted_data = [] | |
for row in data: | |
nama, usia, posisi_harapan, pendidikan, lama_pengalaman, kesesuaian_posisi_skill, kesesuaian_posisi_pengalaman, hasil_prediksi = row | |
pendidikan_str = ">= S1" if pendidikan == "1" else "< S1" | |
lama_pengalaman_str = "> 1 Tahun" if lama_pengalaman == "1" else "< 1 Tahun" | |
kesesuaian_posisi_skill_str = "Sesuai" if kesesuaian_posisi_skill == "1" else "Tidak Sesuai" | |
kesesuaian_posisi_pengalaman_str = "Sesuai" if kesesuaian_posisi_pengalaman == "1" else "Tidak Sesuai" | |
converted_data.append((nama, usia, posisi_harapan, pendidikan_str, lama_pengalaman_str, kesesuaian_posisi_skill_str, kesesuaian_posisi_pengalaman_str, hasil_prediksi)) | |
return converted_data | |
else: | |
return None | |
except mysql.connector.Error as e: | |
st.error(f"Error: {e}") | |
finally: | |
if connection.is_connected(): | |
cursor.close() | |
connection.close() | |
if __name__ == '__main__': | |
main() | |