Update data_processor.py
Browse files- data_processor.py +39 -10
data_processor.py
CHANGED
|
@@ -117,21 +117,50 @@ class DataProcessor:
|
|
| 117 |
elif x == self.NOT_ENGAGED_STR:
|
| 118 |
engagement_counts['Not Engaged'] += 1
|
| 119 |
else:
|
| 120 |
-
engagement_counts['Absent'] += 1
|
| 121 |
|
|
|
|
| 122 |
total_sessions = sum(engagement_counts.values())
|
|
|
|
|
|
|
| 123 |
engagement_pct = (engagement_counts['Engaged'] / total_sessions * 100) if total_sessions > 0 else 0
|
| 124 |
engagement_pct = round(engagement_pct)
|
| 125 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
student_metrics[student_name] = {
|
| 127 |
'Attendance (%)': attendance_pct,
|
| 128 |
-
'Attendance #': sessions_attended,
|
| 129 |
-
'Engagement (%)': engagement_pct
|
|
|
|
|
|
|
|
|
|
|
|
|
| 130 |
}
|
| 131 |
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 117 |
elif x == self.NOT_ENGAGED_STR:
|
| 118 |
engagement_counts['Not Engaged'] += 1
|
| 119 |
else:
|
| 120 |
+
engagement_counts['Absent'] += 1 # Count as Absent if not engaged
|
| 121 |
|
| 122 |
+
# Calculate percentages for engagement states
|
| 123 |
total_sessions = sum(engagement_counts.values())
|
| 124 |
+
|
| 125 |
+
# Engagement (%)
|
| 126 |
engagement_pct = (engagement_counts['Engaged'] / total_sessions * 100) if total_sessions > 0 else 0
|
| 127 |
engagement_pct = round(engagement_pct)
|
| 128 |
+
|
| 129 |
+
engaged_pct = (engagement_counts['Engaged'] / total_sessions * 100) if total_sessions > 0 else 0
|
| 130 |
+
engaged_pct = round(engaged_pct)
|
| 131 |
+
|
| 132 |
+
partially_engaged_pct = (engagement_counts['Partially Engaged'] / total_sessions * 100) if total_sessions > 0 else 0
|
| 133 |
+
partially_engaged_pct = round(partially_engaged_pct)
|
| 134 |
+
|
| 135 |
+
not_engaged_pct = (engagement_counts['Not Engaged'] / total_sessions * 100) if total_sessions > 0 else 0
|
| 136 |
+
not_engaged_pct = round(not_engaged_pct)
|
| 137 |
+
|
| 138 |
+
absent_pct = (engagement_counts['Absent'] / total_sessions * 100) if total_sessions > 0 else 0
|
| 139 |
+
absent_pct = round(absent_pct)
|
| 140 |
+
|
| 141 |
+
# Store metrics in the required order
|
| 142 |
student_metrics[student_name] = {
|
| 143 |
'Attendance (%)': attendance_pct,
|
| 144 |
+
'Attendance #': sessions_attended, # Raw number of sessions attended
|
| 145 |
+
'Engagement (%)': engagement_pct,
|
| 146 |
+
'Engaged (%)': engaged_pct,
|
| 147 |
+
'Partially Engaged (%)': partially_engaged_pct,
|
| 148 |
+
'Not Engaged (%)': not_engaged_pct,
|
| 149 |
+
'Absent (%)': absent_pct
|
| 150 |
}
|
| 151 |
|
| 152 |
+
# Create a DataFrame from student_metrics
|
| 153 |
+
student_metrics_df = pd.DataFrame.from_dict(student_metrics, orient='index').reset_index()
|
| 154 |
+
student_metrics_df.rename(columns={'index': 'Student'}, inplace=True)
|
| 155 |
+
return student_metrics_df
|
| 156 |
+
|
| 157 |
+
def compute_average_metrics(student_metrics_df):
|
| 158 |
+
# Calculate the attendance and engagement average percentages across students
|
| 159 |
+
attendance_avg_stats = student_metrics_df['Attendance (%)'].mean() # Calculate the average attendance percentage
|
| 160 |
+
engagement_avg_stats = student_metrics_df['Engagement (%)'].mean() # Calculate the average engagement percentage
|
| 161 |
+
|
| 162 |
+
# Round the averages to make them whole numbers
|
| 163 |
+
attendance_avg_stats = round(attendance_avg_stats)
|
| 164 |
+
engagement_avg_stats = round(engagement_avg_stats)
|
| 165 |
+
|
| 166 |
+
return attendance_avg_stats, engagement_avg_stats
|