File size: 7,770 Bytes
4b1c00b
 
 
 
 
 
 
 
e2d8dca
4b1c00b
 
 
 
 
 
 
9c15b2a
 
 
 
4b1c00b
 
 
 
 
 
 
 
9c15b2a
4b1c00b
 
 
 
 
 
 
3c31d08
 
 
 
4b1c00b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d04b088
4b1c00b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9c15b2a
4b1c00b
 
9c15b2a
4b1c00b
 
 
 
 
 
 
 
 
 
 
 
 
3c31d08
 
 
 
4b1c00b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
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()