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"
|