Update data_processor.py
Browse files- data_processor.py +13 -5
data_processor.py
CHANGED
|
@@ -369,6 +369,12 @@ class DataProcessor:
|
|
| 369 |
for col in student_columns:
|
| 370 |
student_name = col.replace('Student Attendance [', '').replace(']', '').strip()
|
| 371 |
student_data = intervention_df[[col]].copy()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 372 |
student_data[col] = student_data[col].fillna('Absent')
|
| 373 |
|
| 374 |
# Classify each entry
|
|
@@ -452,17 +458,19 @@ class DataProcessor:
|
|
| 452 |
return student_metrics_df
|
| 453 |
|
| 454 |
def compute_average_metrics(self, student_metrics_df):
|
| 455 |
-
#
|
| 456 |
-
|
| 457 |
-
|
| 458 |
-
|
|
|
|
|
|
|
| 459 |
|
| 460 |
# Round the averages to whole numbers
|
| 461 |
attendance_avg_stats = round(attendance_avg_stats)
|
| 462 |
engagement_avg_stats = round(engagement_avg_stats)
|
| 463 |
|
| 464 |
return attendance_avg_stats, engagement_avg_stats
|
| 465 |
-
|
| 466 |
def evaluate_student(self, row, attendance_threshold=90, engagement_threshold=80):
|
| 467 |
if row["Attended ≥ 90%"] == "No":
|
| 468 |
return "Address Attendance"
|
|
|
|
| 369 |
for col in student_columns:
|
| 370 |
student_name = col.replace('Student Attendance [', '').replace(']', '').strip()
|
| 371 |
student_data = intervention_df[[col]].copy()
|
| 372 |
+
|
| 373 |
+
# Check if the student is still active (has non-empty cells in recent sessions)
|
| 374 |
+
is_active = student_data[col].notna().any()
|
| 375 |
+
if not is_active:
|
| 376 |
+
continue # Skip inactive students
|
| 377 |
+
|
| 378 |
student_data[col] = student_data[col].fillna('Absent')
|
| 379 |
|
| 380 |
# Classify each entry
|
|
|
|
| 458 |
return student_metrics_df
|
| 459 |
|
| 460 |
def compute_average_metrics(self, student_metrics_df):
|
| 461 |
+
# Filter out rows with NaN values (inactive students)
|
| 462 |
+
active_students_df = student_metrics_df.dropna()
|
| 463 |
+
|
| 464 |
+
# Calculate the attendance and engagement average percentages across active students
|
| 465 |
+
attendance_avg_stats = active_students_df['Attendance (%)'].mean()
|
| 466 |
+
engagement_avg_stats = active_students_df[f'{self.ENGAGED_STR} (%)'].mean()
|
| 467 |
|
| 468 |
# Round the averages to whole numbers
|
| 469 |
attendance_avg_stats = round(attendance_avg_stats)
|
| 470 |
engagement_avg_stats = round(engagement_avg_stats)
|
| 471 |
|
| 472 |
return attendance_avg_stats, engagement_avg_stats
|
| 473 |
+
|
| 474 |
def evaluate_student(self, row, attendance_threshold=90, engagement_threshold=80):
|
| 475 |
if row["Attended ≥ 90%"] == "No":
|
| 476 |
return "Address Attendance"
|