File size: 7,163 Bytes
52f9bc6 40cee5b 0c6bfe8 52f9bc6 0c6bfe8 e1963a4 52f9bc6 0c6bfe8 52f9bc6 0c6bfe8 52f9bc6 0c6bfe8 52f9bc6 0c6bfe8 52f9bc6 0c6bfe8 52f9bc6 0c6bfe8 52f9bc6 0c6bfe8 52f9bc6 0c6bfe8 52f9bc6 0c6bfe8 52f9bc6 0c6bfe8 52f9bc6 0c6bfe8 52f9bc6 0c6bfe8 52f9bc6 0c6bfe8 52f9bc6 0c6bfe8 52f9bc6 0c6bfe8 |
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 158 159 160 161 162 |
# =[Modules dan Packages]========================
import c45
from flask import Flask, render_template, request, jsonify
import pandas as pd
import json
from joblib import load
import mysql.connector
from mysql.connector import Error
import logging
# =[Variabel Global]=============================
app = Flask(__name__, static_url_path='/static')
model = None
# =[Routing]=====================================
# [Routing untuk Halaman Utama atau Home]
@app.route("/")
def beranda():
return render_template('index.html')
# [Routing untuk API]
@app.route("/deteksi", methods=['GET', 'POST'])
def apiDeteksi():
if request.method == 'POST':
try:
# Extract form data
nama = request.form['Nama']
posisi_harapan = request.form['Posisi_Harapan']
usia = int(request.form['Usia'])
# Extract kategori umur sebagai objek
kategori_umur_obj = request.form.get('KategoriUmur')
if kategori_umur_obj is not None:
# Ubah objek JavaScript menjadi dict Python
kategori_umur_values = json.loads(kategori_umur_obj)
else:
# Jika tidak ada nilai, atur sebagai dictionary kosong
kategori_umur_values = {}
# Python Flask code to access category values from formData
kategori_umur_values = {f"KategoriUmur[{i}]": int(request.form.get(f"KategoriUmur[{i}]")) for i in range(1, 11)}
kategori_umur_dict = {f"Kategori_Umur_{i}": kategori_umur_values.get(f"KategoriUmur[{i}]", 0) for i in range(1, 11)}
pendidikan = int(request.form['Pendidikan'])
lama_pengalaman = int(request.form['Lama_Pengalaman'])
kesesuaian_posisi_dg_skills = int(request.form['Kesesuaian_Posisi_Skill'])
kesesuaian_posisi_dg_pengalaman = int(request.form['Kesesuaian_Posisi_Pengalaman'])
# Perform prediction
data = {**kategori_umur_dict,
"Pendidikan": pendidikan,
"Lama_Pengalaman": lama_pengalaman,
"Kesesuaian_Posisi_Skill": kesesuaian_posisi_dg_skills,
"Kesesuaian_Posisi_Pengalaman": kesesuaian_posisi_dg_pengalaman}
df_test = pd.DataFrame(data, index=[0])
print("Data untuk prediksi:")
print(df_test)
# Debug log to check the DataFrame
logging.debug(f"DataFrame for prediction:\n{df_test}")
# Check if model is loaded
if model is None:
raise Exception("Model not loaded")
# Perform prediction
hasil_prediksi = model.predict(df_test)[0]
# Debug log to check the prediction result
logging.debug(f"Prediction result: {hasil_prediksi}")
# Map prediction to a string
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'
# Save data to the database
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()
print("Data berhasil disimpan ke database.")
except Error as e:
print("Error while connecting to MySQL", e)
finally:
if connection.is_connected():
cursor.close()
connection.close()
print("MySQL connection is closed")
# Return prediction result as JSON
return jsonify({
"prediksi": hasil_prediksi_str
})
except Exception as e:
print(f"Error during prediction: {e}")
return jsonify({
"error": "Error during prediction"
})
# If the request is not POST, render the prediksi.html page
return render_template('prediksi.html')
@app.route("/view_tabel", methods=['GET'])
def view_tabel():
try:
connection = mysql.connector.connect(host='sql12.freesqldatabase.com',
database='sql12711336',
user='sql12711336',
password='ufDVxditnx')
if connection.is_connected():
cursor = connection.cursor(dictionary=True)
cursor.execute("SELECT * FROM klasifikasi")
data_tabel = cursor.fetchall()
# Konversi nilai pendidikan, lama_pengalaman, kesesuaian_posisi_dg_skills, dan kesesuaian_posisi_dg_pengalaman
for row in data_tabel:
row['pendidikan'] = ">= S1" if row['pendidikan'] == 1 else "<S1"
row['lama_pengalaman'] = ">1 Tahun" if row['lama_pengalaman'] == 1 else "<1 Tahun"
row['kesesuaian_posisi_dg_skills'] = "Sesuai Posisi Harapan" if row['kesesuaian_posisi_dg_skills'] == 1 else "Tidak Sesuai Posisi Harapan"
row['kesesuaian_posisi_dg_pengalaman'] = "Sesuai Posisi Harapan" if row['kesesuaian_posisi_dg_pengalaman'] == 1 else "Tidak Sesuai Posisi Harapan"
return render_template('view_tabel.html', data_tabel=data_tabel)
except Error as e:
print("Error while connecting to MySQL", e)
finally:
if connection.is_connected():
cursor.close()
connection.close()
print("MySQL connection is closed")
# =[Main]========================================
if __name__ == '__main__':
# Load model yang telah ditraining
try:
model = load('model_scratch_2.model')
print("Model loaded successfully")
except Exception as e:
print(f"Error loading model: {e}")
# Run Flask di localhost
app.run(host="localhost", port=5000, debug=True) |