namngo commited on
Commit
b660f73
·
verified ·
1 Parent(s): 850a1c0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +108 -1
app.py CHANGED
@@ -72,7 +72,114 @@ model_type = st.sidebar.selectbox("🧠 Chọn mô hình dự báo:", ["Dùng to
72
  sample_option = st.sidebar.selectbox("📝 Chọn ví dụ:", ["Không ví dụ", "Dùng ví dụ mẫu ngành Công nghệ thông tin", "Dùng ví dụ mẫu ngành Kinh tế"])
73
 
74
  # ===== Ví dụ mẫu =====
75
- # (phần còn lại giữ nguyên như trước đây)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
 
77
  # ===== Predict =====
78
  if st.button("🎯 DỰ BÁO"):
 
72
  sample_option = st.sidebar.selectbox("📝 Chọn ví dụ:", ["Không ví dụ", "Dùng ví dụ mẫu ngành Công nghệ thông tin", "Dùng ví dụ mẫu ngành Kinh tế"])
73
 
74
  # ===== Ví dụ mẫu =====
75
+ sample_cntt_example = {
76
+ "name": "Nguyễn Văn A",
77
+ "student_id": "10117367",
78
+ "major": "Công nghệ thông tin",
79
+ "semester_data": [
80
+ 0, 0, 0, 0, 17, 7, 7, 8.73, 0,
81
+ 0, 0, 0, 0, 17, 7, 7, 8.19, 0,
82
+ 0, 0, 0, 0, 17, 7, 7, 7.90, 0,
83
+ 0, 0, 0, 0, 17, 7, 7, 8.19, 0,
84
+ 0, 0, 0, 0, 19, 7, 6, 8.18, 0,
85
+ 0, 0, 5, 2, 19, 7, 5, 7.10, 1
86
+ ]
87
+ }
88
+
89
+ sample_kinhte_example = {
90
+ "name": "Trần Thị B",
91
+ "student_id": "11418092",
92
+ "major": "Kinh tế",
93
+ "semester_data": [
94
+ 0, 0, 0, 0, 17, 7, 7, 7.64, 1,
95
+ 0, 0, 0, 0, 17, 7, 7, 7.19, 1,
96
+ 0, 0, 0, 0, 17, 7, 7, 6.94, 1,
97
+ 0, 0, 0, 0, 17, 7, 7, 7.19, 1,
98
+ 0, 0, 0, 0, 19, 7, 5, 7.65, 1,
99
+ 0, 0, 7, 3, 19, 7, 4, 7.49, 1
100
+ ]
101
+ }
102
+
103
+ # ===== Thông tin cá nhân =====
104
+ if sample_option == "Dùng ví dụ mẫu ngành Công nghệ thông tin":
105
+ name = st.text_input("👤 Họ và tên", value=sample_cntt_example["name"])
106
+ student_id = st.text_input("🎓 Mã sinh viên", value=sample_cntt_example["student_id"])
107
+ major = st.selectbox("📚 Ngành học", ["Công nghệ thông tin", "Kinh tế"], index=0)
108
+ elif sample_option == "Dùng ví dụ mẫu ngành Kinh tế":
109
+ name = st.text_input("👤 Họ và tên", value=sample_kinhte_example["name"])
110
+ student_id = st.text_input("🎓 Mã sinh viên", value=sample_kinhte_example["student_id"])
111
+ major = st.selectbox("📚 Ngành học", ["Công nghệ thông tin", "Kinh tế"], index=1)
112
+ else:
113
+ name = st.text_input("👤 Họ và tên")
114
+ student_id = st.text_input("🎓 Mã sinh viên")
115
+ major = st.selectbox("📚 Ngành học", ["Công nghệ thông tin", "Kinh tế"])
116
+
117
+ st.write("---")
118
+
119
+ # ===== Hàm nhập liệu =====
120
+ def input_semester(semester_label, default_values=None):
121
+ with st.expander(f"📖 {semester_label}", expanded=True):
122
+ col1, col2 = st.columns(2)
123
+ with col1:
124
+ somon0thi = st.number_input("Số môn không thi", 0, value=default_values[0] if default_values else 0, key=f"sm0_{semester_label}")
125
+ sotc0thi = st.number_input("Số tín chỉ không thi", 0, value=default_values[1] if default_values else 0, key=f"tc0_{semester_label}")
126
+ sotcno = st.number_input("Số tín chỉ nợ", 0, value=default_values[2] if default_values else 0, key=f"tcno_{semester_label}")
127
+ mhno = st.number_input("Số môn không đạt", 0, value=default_values[3] if default_values else 0, key=f"mhno_{semester_label}")
128
+ try:
129
+ default_tc_qua = default_values[4] - default_values[2] if default_values and len(default_values) >= 5 else 0
130
+ except:
131
+ default_tc_qua = 0
132
+ sotc_qua = st.number_input("Số tín chỉ qua môn", 0, value=default_tc_qua, key=f"tcqua_{semester_label}")
133
+ with col2:
134
+ TCHK = st.number_input("Tổng tín chỉ học kỳ", 0, value=default_values[4] if default_values else 0, key=f"tchk_{semester_label}")
135
+ smhk = st.number_input("Số môn học kỳ", 0, value=default_values[5] if default_values else 0, key=f"smhk_{semester_label}")
136
+ mhpass = st.number_input("Số môn đạt", 0, value=default_values[6] if default_values else 0, key=f"mhpass_{semester_label}")
137
+ TBCHK = st.number_input("GPA", 0.0, 10.0, value=default_values[7] if default_values else 0.0, step=0.01, key=f"gpa_{semester_label}")
138
+ xep_loai_selected = st.selectbox("Xếp loại", list(range(7)), index=default_values[8] if default_values else 0, key=f"xeploai_{semester_label}")
139
+ return [somon0thi, sotc0thi, sotcno, mhno, TCHK, smhk, mhpass, TBCHK, xep_loai_selected, sotc_qua]
140
+
141
+ def input_important_features(semester_label, default_values=None):
142
+ with st.expander(f"📘 {semester_label}", expanded=True):
143
+ col1, col2 = st.columns(2)
144
+ with col1:
145
+ sotc_qua = st.number_input("Số tín chỉ đạt", 0, value=default_values[0] if default_values else 0, key=f"tcqua_imp_{semester_label}")
146
+ sotcno = st.number_input("Số tín chỉ nợ", 0, value=default_values[1] if default_values else 0, key=f"tcno_imp_{semester_label}")
147
+ with col2:
148
+ TBCHK = st.number_input("Điểm trung bình", 0.0, 10.0, value=default_values[2] if default_values else 0.0, step=0.01, key=f"gpa_imp_{semester_label}")
149
+ return [sotc_qua, sotcno, TBCHK]
150
+
151
+ # ===== Giao diện theo mô hình =====
152
+ data = []
153
+ semesters = ["HỌC KỲ I", "HỌC KỲ II", "HỌC KỲ III", "HỌC KỲ IV", "HỌC KỲ V", "HỌC KỲ VI"]
154
+
155
+ if model_type == "Dùng toàn bộ dữ liệu":
156
+ st.subheader("🔢 Nhập thông tin học kỳ chi tiết")
157
+ for idx, sem in enumerate(semesters):
158
+ example_data = sample_cntt_example if "CNTT" in sample_option else sample_kinhte_example if "Kinh tế" in sample_option else None
159
+ default_values = example_data["semester_data"][idx*9:(idx+1)*9] if example_data else None
160
+ data += input_semester(sem, default_values)
161
+ nganh = 0 if major == "Công nghệ thông tin" else 1
162
+ final_features = np.array(data + [nganh]).reshape(1, -1)
163
+ else:
164
+ st.subheader("✨ Nhập thông tin rút gọn")
165
+ for idx, sem in enumerate(semesters):
166
+ example_data = None
167
+ if sample_option == "Dùng ví dụ mẫu ngành Công nghệ thông tin":
168
+ example_data = sample_cntt_example
169
+ elif sample_option == "Dùng ví dụ mẫu ngành Kinh tế":
170
+ example_data = sample_kinhte_example
171
+
172
+ if example_data:
173
+ raw = example_data["semester_data"][idx*9:(idx+1)*9]
174
+ if len(raw) >= 8:
175
+ default_values = [raw[4], raw[2], raw[7]]
176
+ else:
177
+ default_values = None
178
+ else:
179
+ default_values = None
180
+
181
+ data += input_important_features(sem, default_values)
182
+ final_features = np.array(data).reshape(1, -1)
183
 
184
  # ===== Predict =====
185
  if st.button("🎯 DỰ BÁO"):