namngo commited on
Commit
a0ed636
·
verified ·
1 Parent(s): 0e6bd27

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +59 -54
app.py CHANGED
@@ -43,7 +43,7 @@ def get_gsheet_client():
43
  return client
44
 
45
  # ===== Save to Google Sheets =====
46
- def save_to_gsheet(name, student_id, major, prediction, semester_data, sheet_name="Trang tính1"):
47
  # Get the current date and time
48
  now = datetime.now()
49
  current_time = now.strftime("%Y-%m-%d %H:%M:%S")
@@ -55,50 +55,8 @@ def save_to_gsheet(name, student_id, major, prediction, semester_data, sheet_nam
55
  elif isinstance(prediction, np.int64):
56
  prediction = int(prediction) # Convert np.int64 to int
57
 
58
- # Convert prediction to "Đúng hạn" or "Không đúng hạn"
59
- if prediction == 1:
60
- prediction_result = "Đúng hạn"
61
- else:
62
- prediction_result = "Không đúng hạn"
63
-
64
  # Create a data row to insert into the sheet
65
- data_row = [name, student_id, major, prediction_result, current_time]
66
-
67
- # Define semester columns for all 6 semesters
68
- semester_columns = [
69
- # Semester 1
70
- "Số môn không thi_HK1", "Số tín chỉ không thi_HK1", "Số tín chỉ nợ_HK1", "Số môn không đạt_HK1",
71
- "Số tín chỉ qua môn_HK1", "Tổng tín chỉ học kỳ_HK1", "Số môn học kỳ_HK1", "Số môn đạt_HK1",
72
- "GPA_HK1", "Xếp loại_HK1",
73
-
74
- # Semester 2
75
- "Số môn không thi_HK2", "Số tín chỉ không thi_HK2", "Số tín chỉ nợ_HK2", "Số môn không đạt_HK2",
76
- "Số tín chỉ qua môn_HK2", "Tổng tín chỉ học kỳ_HK2", "Số môn học kỳ_HK2", "Số môn đạt_HK2",
77
- "GPA_HK2", "Xếp loại_HK2",
78
-
79
- # Semester 3
80
- "Số môn không thi_HK3", "Số tín chỉ không thi_HK3", "Số tín chỉ nợ_HK3", "Số môn không đạt_HK3",
81
- "Số tín chỉ qua môn_HK3", "Tổng tín chỉ học kỳ_HK3", "Số môn học kỳ_HK3", "Số môn đạt_HK3",
82
- "GPA_HK3", "Xếp loại_HK3",
83
-
84
- # Semester 4
85
- "Số môn không thi_HK4", "Số tín chỉ không thi_HK4", "Số tín chỉ nợ_HK4", "Số môn không đạt_HK4",
86
- "Số tín chỉ qua môn_HK4", "Tổng tín chỉ học kỳ_HK4", "Số môn học kỳ_HK4", "Số môn đạt_HK4",
87
- "GPA_HK4", "Xếp loại_HK4",
88
-
89
- # Semester 5
90
- "Số môn không thi_HK5", "Số tín chỉ không thi_HK5", "Số tín chỉ nợ_HK5", "Số môn không đạt_HK5",
91
- "Số tín chỉ qua môn_HK5", "Tổng tín chỉ học kỳ_HK5", "Số môn học kỳ_HK5", "Số môn đạt_HK5",
92
- "GPA_HK5", "Xếp loại_HK5",
93
-
94
- # Semester 6
95
- "Số môn không thi_HK6", "Số tín chỉ không thi_HK6", "Số tín chỉ nợ_HK6", "Số môn không đạt_HK6",
96
- "Số tín chỉ qua môn_HK6", "Tổng tín chỉ học kỳ_HK6", "Số môn học kỳ_HK6", "Số môn đạt_HK6",
97
- "GPA_HK6", "Xếp loại_HK6"
98
- ]
99
-
100
- # Add semester data to the data row
101
- data_row += semester_data
102
 
103
  # Connect to Google Sheets
104
  client = get_gsheet_client()
@@ -111,14 +69,24 @@ def save_to_gsheet(name, student_id, major, prediction, semester_data, sheet_nam
111
  all_values = sheet.get_all_values()
112
 
113
  # If the sheet is empty or if headers are missing, insert headers
114
- if not all_values or len(all_values[0]) != len(data_row): # Ensure the correct number of columns
115
- sheet.append_row([
116
- "Họ và tên", "MSV", "Khoa", "Dự báo", "Thời gian"] + semester_columns) # Create headers
117
 
118
  # Append data to the sheet
119
  sheet.append_row(data_row)
120
 
121
 
 
 
 
 
 
 
 
 
 
 
 
122
  # ===== HEADER =====
123
  st.markdown("<h1 style='text-align: center; color: #003366;'>🎓 DỰ ĐOÁN KHẢ NĂNG TỐT NGHIỆP ĐÚNG HẠN</h1>", unsafe_allow_html=True)
124
  st.markdown("<h4 style='text-align: center; color: #666;'>Áp dụng cho sinh viên năm 3</h4>", unsafe_allow_html=True)
@@ -209,7 +177,39 @@ else:
209
  st.write("---")
210
 
211
  # ===== Nhập thông tin học kỳ =====
212
- semester_data = []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
213
  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"]
214
 
215
  if model_type == "Dùng toàn bộ dữ liệu":
@@ -217,16 +217,16 @@ if model_type == "Dùng toàn bộ dữ liệu":
217
  for idx, sem in enumerate(semesters):
218
  example_data = sample_cntt_example_full if sample_option == "Dùng ví dụ mẫu ngành Công nghệ thông tin" else sample_kinhte_example_full if sample_option == "Dùng ví dụ mẫu ngành Kinh tế" else None
219
  default_values = example_data["semester_data"][idx*9:(idx+1)*9] if example_data else None
220
- semester_data += input_semester(sem, default_values)
221
  nganh = 0 if major == "Công nghệ thông tin" else 1
222
- final_features = np.array(semester_data + [nganh]).reshape(1, -1)
223
  else:
224
  st.subheader("✨ Nhập thông tin rút gọn")
225
  for idx, sem in enumerate(semesters):
226
  example_data = sample_cntt_example_simple if sample_option == "Dùng ví dụ mẫu ngành Công nghệ thông tin" else sample_kinhte_example_simple if sample_option == "Dùng ví dụ mẫu ngành Kinh tế" else None
227
  default_values = example_data["semester_data"][idx*9:(idx+1)*9] if example_data else None
228
- semester_data += input_important_features(sem, default_values)
229
- final_features = np.array(semester_data).reshape(1, -1)
230
 
231
  # ===== Predict =====
232
  if st.button("🎯 DỰ BÁO"):
@@ -242,5 +242,10 @@ if st.button("🎯 DỰ BÁO"):
242
  st.error(f"⚠️ Bạn {name} - {major} cần cố gắng hơn! Có nguy cơ trễ hạn.")
243
  st.snow()
244
 
245
- # Save all data to Google Sheets including semester details
246
- save_to_gsheet(name, student_id, major, prediction, semester_data)
 
 
 
 
 
 
43
  return client
44
 
45
  # ===== Save to Google Sheets =====
46
+ def save_to_gsheet(name, student_id, major, prediction, sheet_name="Trang tính1"):
47
  # Get the current date and time
48
  now = datetime.now()
49
  current_time = now.strftime("%Y-%m-%d %H:%M:%S")
 
55
  elif isinstance(prediction, np.int64):
56
  prediction = int(prediction) # Convert np.int64 to int
57
 
 
 
 
 
 
 
58
  # Create a data row to insert into the sheet
59
+ data_row = [name, student_id, major, prediction, current_time]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
60
 
61
  # Connect to Google Sheets
62
  client = get_gsheet_client()
 
69
  all_values = sheet.get_all_values()
70
 
71
  # If the sheet is empty or if headers are missing, insert headers
72
+ if not all_values or len(all_values[0]) != 6: # Ensure there are 6 columns
73
+ sheet.append_row(["Họ và tên", "MSV", "Khoa", "Dự báo", "Thời gian"]) # Create headers
 
74
 
75
  # Append data to the sheet
76
  sheet.append_row(data_row)
77
 
78
 
79
+ # ===== List all sheet names =====
80
+ # def list_sheet_names(sheet_id):
81
+ # client = get_gsheet_client()
82
+ # sheet = client.open_by_key(sheet_id)
83
+
84
+ # # List all sheet names
85
+ # sheet_names = [worksheet.title for worksheet in sheet.worksheets()]
86
+ # return sheet_names
87
+
88
+
89
+
90
  # ===== HEADER =====
91
  st.markdown("<h1 style='text-align: center; color: #003366;'>🎓 DỰ ĐOÁN KHẢ NĂNG TỐT NGHIỆP ĐÚNG HẠN</h1>", unsafe_allow_html=True)
92
  st.markdown("<h4 style='text-align: center; color: #666;'>Áp dụng cho sinh viên năm 3</h4>", unsafe_allow_html=True)
 
177
  st.write("---")
178
 
179
  # ===== Nhập thông tin học kỳ =====
180
+ def input_semester(semester_label, default_values=None):
181
+ with st.expander(f"📖 {semester_label}", expanded=True):
182
+ col1, col2 = st.columns(2)
183
+ with col1:
184
+ 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}")
185
+ 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}")
186
+ sotcno = st.number_input("Số tín chỉ nợ", 0, value=default_values[2] if default_values else 0, key=f"tcno_{semester_label}")
187
+ 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}")
188
+ try:
189
+ default_tc_qua = default_values[4] - default_values[2] if default_values and len(default_values) >= 5 else 0
190
+ except:
191
+ default_tc_qua = 0
192
+ sotc_qua = st.number_input("Số tín chỉ qua môn", 0, value=default_tc_qua, key=f"tcqua_{semester_label}")
193
+ with col2:
194
+ 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}")
195
+ 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}")
196
+ mhpass = st.number_input("Số môn đạt", 0, value=default_values[6] if default_values else 0, key=f"mhpass_{semester_label}")
197
+ 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}")
198
+ 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}")
199
+ return [somon0thi, sotc0thi, sotcno, mhno, TCHK, smhk, mhpass, TBCHK, xep_loai_selected, sotc_qua]
200
+
201
+ def input_important_features(semester_label, default_values=None):
202
+ with st.expander(f"📘 {semester_label}", expanded=True):
203
+ col1, col2 = st.columns(2)
204
+ with col1:
205
+ 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}")
206
+ 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}")
207
+ with col2:
208
+ 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}")
209
+ return [sotc_qua, sotcno, TBCHK]
210
+
211
+ # ===== Giao diện theo mô hình =====
212
+ data = []
213
  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"]
214
 
215
  if model_type == "Dùng toàn bộ dữ liệu":
 
217
  for idx, sem in enumerate(semesters):
218
  example_data = sample_cntt_example_full if sample_option == "Dùng ví dụ mẫu ngành Công nghệ thông tin" else sample_kinhte_example_full if sample_option == "Dùng ví dụ mẫu ngành Kinh tế" else None
219
  default_values = example_data["semester_data"][idx*9:(idx+1)*9] if example_data else None
220
+ data += input_semester(sem, default_values)
221
  nganh = 0 if major == "Công nghệ thông tin" else 1
222
+ final_features = np.array(data + [nganh]).reshape(1, -1)
223
  else:
224
  st.subheader("✨ Nhập thông tin rút gọn")
225
  for idx, sem in enumerate(semesters):
226
  example_data = sample_cntt_example_simple if sample_option == "Dùng ví dụ mẫu ngành Công nghệ thông tin" else sample_kinhte_example_simple if sample_option == "Dùng ví dụ mẫu ngành Kinh tế" else None
227
  default_values = example_data["semester_data"][idx*9:(idx+1)*9] if example_data else None
228
+ data += input_important_features(sem, default_values)
229
+ final_features = np.array(data).reshape(1, -1)
230
 
231
  # ===== Predict =====
232
  if st.button("🎯 DỰ BÁO"):
 
242
  st.error(f"⚠️ Bạn {name} - {major} cần cố gắng hơn! Có nguy cơ trễ hạn.")
243
  st.snow()
244
 
245
+ # # Debugging: List all sheet names
246
+ # sheet_id = "1i7bDNvLVLXN93_e-FN0JLzpg1jb64Z_aEuyPjIfwbdQ" # Use your actual Spreadsheet ID
247
+ # sheet_names = list_sheet_names(sheet_id)
248
+ # st.write("Available sheet names:", sheet_names)
249
+
250
+ # Ghi log lên Google Sheets
251
+ save_to_gsheet(name, student_id, major, prediction)