ahmadardhy commited on
Commit
52f9bc6
1 Parent(s): 92772de

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +156 -146
app.py CHANGED
@@ -1,146 +1,156 @@
1
- # =[Modules dan Packages]========================
2
-
3
- from flask import Flask,render_template,request,jsonify
4
- import pandas as pd
5
- import json
6
- from joblib import load
7
- import mysql.connector
8
- from mysql.connector import Error
9
- import logging
10
-
11
- # =[Variabel Global]=============================
12
-
13
- app = Flask(__name__, static_url_path='/static')
14
- model = None
15
-
16
- # =[Routing]=====================================
17
-
18
- # [Routing untuk Halaman Utama atau Home]
19
- @app.route("/")
20
- def beranda():
21
- return render_template('index.html')
22
-
23
- # [Routing untuk API]
24
- @app.route("/deteksi", methods=['GET', 'POST'])
25
- def apiDeteksi():
26
- if request.method == 'POST':
27
- try:
28
- # Extract form data
29
- nama = request.form['Nama']
30
- posisi_harapan = request.form['Posisi_Harapan']
31
- # Extract kategori umur sebagai objek
32
- kategori_umur_obj = request.form.get('KategoriUmur')
33
-
34
- # Check if kategori_umur_obj has a value
35
- if kategori_umur_obj is not None:
36
- # Ubah objek JavaScript menjadi dict Python
37
- kategori_umur_values = json.loads(kategori_umur_obj)
38
- else:
39
- # Jika tidak ada nilai, atur sebagai dictionary kosong
40
- kategori_umur_values = {}
41
-
42
- # Python Flask code to access category values from formData
43
- kategori_umur_values = {f"KategoriUmur[{i}]": int(request.form.get(f"KategoriUmur[{i}]")) for i in range(9)}
44
- kategori_umur_dict = {f"Kategori_Umur_{i}": kategori_umur_values.get(f"KategoriUmur[{i}]", 0) for i in range(9)}
45
- pendidikan = int(request.form['Pendidikan'])
46
- lama_pengalaman = int(request.form['Lama_Pengalaman'])
47
- kesesuaian_posisi_dg_skills = int(request.form['Kesesuaian_Posisi_Skill'])
48
- kesesuaian_posisi_dg_pengalaman = int(request.form['Kesesuaian_Posisi_Pengalaman'])
49
-
50
- # Perform prediction
51
- data = {**kategori_umur_dict,
52
- "Pendidikan": pendidikan,
53
- "Lama_Pengalaman": lama_pengalaman,
54
- "Kesesuaian_Posisi_Skill": kesesuaian_posisi_dg_skills,
55
- "Kesesuaian_Posisi_Pengalaman": kesesuaian_posisi_dg_pengalaman}
56
-
57
- df_test = pd.DataFrame(data, index=[0])
58
- print("Data untuk prediksi:")
59
- print(df_test)
60
- hasil_prediksi = model.predict(df_test[0:1])[0]
61
- # Set up logging
62
- logging.basicConfig(level=logging.DEBUG)
63
-
64
- # Inside the apiDeteksi function, add logging statements to print values
65
- logging.debug("Nama: %s", nama)
66
- logging.debug("Kategori Umur: %s", kategori_umur_dict)
67
-
68
- # Map prediction to a string
69
- if hasil_prediksi == 1:
70
- hasil_prediksi_str = 'Recommended Candidate'
71
- elif hasil_prediksi == 0:
72
- hasil_prediksi_str = 'Not Recommended Candidate'
73
- else:
74
- hasil_prediksi_str = 'Data Tidak Sesuai Dengan Format'
75
-
76
- # Save data to the database
77
- try:
78
- connection = mysql.connector.connect(host='localhost',
79
- database='hasil_prediksi',
80
- user='root',
81
- password='')
82
- if connection.is_connected():
83
- cursor = connection.cursor(prepared=True)
84
- insert_query = ("INSERT INTO klasifikasi "
85
- "(nama, kategori_umur_0, kategori_umur_1, kategori_umur_2, "
86
- "kategori_umur_3, kategori_umur_4, kategori_umur_5, kategori_umur_6, "
87
- "kategori_umur_7, kategori_umur_8, pendidikan, lama_pengalaman, "
88
- "kesesuaian_posisi_dg_skills, kesesuaian_posisi_dg_pengalaman, "
89
- "posisi_harapan, hasil_prediksi) "
90
- "VALUES "
91
- "(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)")
92
-
93
- cursor.execute(insert_query, (nama,) + tuple(data.values()) + (posisi_harapan, hasil_prediksi_str))
94
- connection.commit()
95
- print("Data berhasil disimpan ke database.")
96
- except Error as e:
97
- print("Error while connecting to MySQL", e)
98
- finally:
99
- if connection.is_connected():
100
- cursor.close()
101
- connection.close()
102
- print("MySQL connection is closed")
103
-
104
- # Return prediction result as JSON
105
- return jsonify({
106
- "prediksi": hasil_prediksi_str
107
- })
108
- except Exception as e:
109
- print(f"Error during prediction: {e}")
110
- return jsonify({
111
- "error": "Error during prediction"
112
- })
113
-
114
- # If the request is not POST, render the prediksi.html page
115
- return render_template('prediksi.html')
116
-
117
- @app.route("/view_tabel", methods=['GET'])
118
- def view_tabel():
119
- try:
120
- connection = mysql.connector.connect(host='localhost',
121
- database='hasil_prediksi',
122
- user='root',
123
- password='')
124
- if connection.is_connected():
125
- cursor = connection.cursor(dictionary=True)
126
- cursor.execute("SELECT * FROM klasifikasi")
127
- data_tabel = cursor.fetchall()
128
- return render_template('view_tabel.html', data_tabel=data_tabel)
129
- except Error as e:
130
- print("Error while connecting to MySQL", e)
131
- finally:
132
- if connection.is_connected():
133
- cursor.close()
134
- connection.close()
135
- print("MySQL connection is closed")
136
-
137
-
138
- # =[Main]========================================
139
-
140
- if __name__ == '__main__':
141
-
142
- # Load model yang telah ditraining
143
- model = load('modelc45_baru1.model')
144
-
145
- # Run Flask di localhost
146
- app.run(host="0.0.0.0", port=5000, debug=True)
 
 
 
 
 
 
 
 
 
 
 
1
+ # =[Modules dan Packages]========================
2
+
3
+ from flask import Flask,render_template,request,jsonify
4
+ import pandas as pd
5
+ import json
6
+ from joblib import load
7
+ import mysql.connector
8
+ from mysql.connector import Error
9
+ import logging
10
+
11
+ # =[Variabel Global]=============================
12
+
13
+ app = Flask(__name__, static_url_path='/static')
14
+ model = Nonefrom
15
+
16
+
17
+ # =[Routing]=====================================
18
+
19
+ # [Routing untuk Halaman Utama atau Home]
20
+ @app.route("/")
21
+ def beranda():
22
+ return render_template('index.html')
23
+
24
+ # [Routing untuk API]
25
+ @app.route("/deteksi", methods=['GET', 'POST'])
26
+ def apiDeteksi():
27
+ if request.method == 'POST':
28
+ try:
29
+ # Extract form data
30
+ nama = request.form['Nama']
31
+ posisi_harapan = request.form['Posisi_Harapan']
32
+ usia = int(request.form['Usia'])
33
+ # Extract kategori umur sebagai objek
34
+ kategori_umur_obj = request.form.get('KategoriUmur')
35
+
36
+ # Check if kategori_umur_obj has a value
37
+ if kategori_umur_obj is not None:
38
+ # Ubah objek JavaScript menjadi dict Python
39
+ kategori_umur_values = json.loads(kategori_umur_obj)
40
+ else:
41
+ # Jika tidak ada nilai, atur sebagai dictionary kosong
42
+ kategori_umur_values = {}
43
+
44
+ # Python Flask code to access category values from formData
45
+ kategori_umur_values = {f"KategoriUmur[{i}]": int(request.form.get(f"KategoriUmur[{i}]")) for i in range(1, 11)}
46
+ kategori_umur_dict = {f"Kategori_Umur_{i}": kategori_umur_values.get(f"KategoriUmur[{i}]", 0) for i in range(1, 11)}
47
+
48
+ pendidikan = int(request.form['Pendidikan'])
49
+ lama_pengalaman = int(request.form['Lama_Pengalaman'])
50
+ kesesuaian_posisi_dg_skills = int(request.form['Kesesuaian_Posisi_Skill'])
51
+ kesesuaian_posisi_dg_pengalaman = int(request.form['Kesesuaian_Posisi_Pengalaman'])
52
+
53
+ # Perform prediction
54
+ data = {**kategori_umur_dict,
55
+ "Pendidikan": pendidikan,
56
+ "Lama_Pengalaman": lama_pengalaman,
57
+ "Kesesuaian_Posisi_Skill": kesesuaian_posisi_dg_skills,
58
+ "Kesesuaian_Posisi_Pengalaman": kesesuaian_posisi_dg_pengalaman}
59
+
60
+ df_test = pd.DataFrame(data, index=[0])
61
+ print("Data untuk prediksi:")
62
+ print(df_test)
63
+ hasil_prediksi = model.predict(df_test[0:1])[0]
64
+ # Set up logging
65
+ logging.basicConfig(level=logging.DEBUG)
66
+
67
+ # Inside the apiDeteksi function, add logging statements to print values
68
+ logging.debug("Nama: %s", nama)
69
+ logging.debug("Kategori Umur: %s", kategori_umur_dict)
70
+
71
+ # Map prediction to a string
72
+ if hasil_prediksi == 1:
73
+ hasil_prediksi_str = 'Recommended Candidate'
74
+ elif hasil_prediksi == 0:
75
+ hasil_prediksi_str = 'Not Recommended Candidate'
76
+ else:
77
+ hasil_prediksi_str = 'Data Tidak Sesuai Dengan Format'
78
+
79
+ # Save data to the database
80
+ try:
81
+ connection = mysql.connector.connect(host='sql12.freesqldatabase.com',
82
+ database='sql12711336',
83
+ user='sql12711336',
84
+ password='ufDVxditnx')
85
+ if connection.is_connected():
86
+ cursor = connection.cursor(prepared=True)
87
+ insert_query = ("INSERT INTO klasifikasi "
88
+ "(nama, kategori_umur_1, kategori_umur_2, "
89
+ "kategori_umur_3, kategori_umur_4, kategori_umur_5, kategori_umur_6, "
90
+ "kategori_umur_7, kategori_umur_8, kategori_umur_9, kategori_umur_10, pendidikan, lama_pengalaman, "
91
+ "kesesuaian_posisi_dg_skills, kesesuaian_posisi_dg_pengalaman, "
92
+ "posisi_harapan, usia, hasil_prediksi) "
93
+ "VALUES "
94
+ "(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)")
95
+
96
+ cursor.execute(insert_query, (nama,) + tuple(data.values()) + (posisi_harapan, usia, hasil_prediksi_str))
97
+ connection.commit()
98
+ print("Data berhasil disimpan ke database.")
99
+ except Error as e:
100
+ print("Error while connecting to MySQL", e)
101
+ finally:
102
+ if connection.is_connected():
103
+ cursor.close()
104
+ connection.close()
105
+ print("MySQL connection is closed")
106
+
107
+ # Return prediction result as JSON
108
+ return jsonify({
109
+ "prediksi": hasil_prediksi_str
110
+ })
111
+ except Exception as e:
112
+ print(f"Error during prediction: {e}")
113
+ return jsonify({
114
+ "error": "Error during prediction"
115
+ })
116
+
117
+ # If the request is not POST, render the prediksi.html page
118
+ return render_template('prediksi.html')
119
+
120
+ @app.route("/view_tabel", methods=['GET'])
121
+ def view_tabel():
122
+ try:
123
+ connection = mysql.connector.connect(host='sql12.freesqldatabase.com',
124
+ database='sql12711336',
125
+ user='sql12711336',
126
+ password='ufDVxditnx')
127
+ if connection.is_connected():
128
+ cursor = connection.cursor(dictionary=True)
129
+ cursor.execute("SELECT * FROM klasifikasi")
130
+ data_tabel = cursor.fetchall()
131
+
132
+ # Konversi nilai pendidikan, lama_pengalaman, kesesuaian_posisi_dg_skills, dan kesesuaian_posisi_dg_pengalaman
133
+ for row in data_tabel:
134
+ row['pendidikan'] = ">= S1" if row['pendidikan'] == 1 else "<S1"
135
+ row['lama_pengalaman'] = ">1 Tahun" if row['lama_pengalaman'] == 1 else "<1 Tahun"
136
+ row['kesesuaian_posisi_dg_skills'] = "Sesuai Posisi Harapan" if row['kesesuaian_posisi_dg_skills'] == 1 else "Tidak Sesuai Posisi Harapan"
137
+ row['kesesuaian_posisi_dg_pengalaman'] = "Sesuai Posisi Harapan" if row['kesesuaian_posisi_dg_pengalaman'] == 1 else "Tidak Sesuai Posisi Harapan"
138
+
139
+ return render_template('view_tabel.html', data_tabel=data_tabel)
140
+ except Error as e:
141
+ print("Error while connecting to MySQL", e)
142
+ finally:
143
+ if connection.is_connected():
144
+ cursor.close()
145
+ connection.close()
146
+ print("MySQL connection is closed")
147
+
148
+ # =[Main]========================================
149
+
150
+ if __name__ == '__main__':
151
+
152
+ # Load model yang telah ditraining
153
+ model = load('model_scratch_2.model')
154
+
155
+ # Run Flask di localhost
156
+ app.run(host="localhost", port=5000, debug=True)