histlearn commited on
Commit
d8775d7
·
verified ·
1 Parent(s): 7cbb42c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -39
app.py CHANGED
@@ -117,47 +117,47 @@ class StudentAnalyzer:
117
  self.tarefas_df['Aluno_Pattern'] = self.tarefas_df['Aluno'].apply(extract_pattern)
118
  return self.calculate_metrics()
119
 
120
- def calculate_metrics(self) -> pd.DataFrame:
121
- """Calcula métricas de desempenho dos alunos, eliminando duplicatas e normalizando valores."""
122
- try:
123
- metrics_df = pd.DataFrame()
124
-
125
- # Agrupar por aluno para eliminar duplicatas
126
- grouped_tasks = self.tarefas_df.groupby(['Aluno_Pattern']).agg({
127
- 'Aluno': 'first', # Mantém o primeiro nome encontrado
128
- 'Duração': 'sum', # Soma total do tempo
129
- 'Nota': 'sum', # Soma total dos acertos
130
- }).reset_index()
131
-
132
- # Contar número de tarefas por aluno
133
- task_counts = self.tarefas_df.groupby('Aluno_Pattern').size().reset_index(name='total_tarefas')
134
- grouped_tasks = grouped_tasks.merge(task_counts, on='Aluno_Pattern', how='left')
135
-
136
- for _, aluno in self.alunos_df.iterrows():
137
- aluno_pattern = aluno['Aluno_Pattern']
138
- aluno_data = grouped_tasks[grouped_tasks['Aluno_Pattern'] == aluno_pattern]
139
 
140
- if not aluno_data.empty:
141
- # Calcular métricas por aluno
142
- total_tarefas = aluno_data['total_tarefas'].iloc[0]
143
- total_acertos = aluno_data['Nota'].iloc[0]
144
- duracao_total = aluno_data['Duração'].iloc[0]
145
 
146
- metrics = {
147
- 'Nome do Aluno': aluno['Nome do Aluno'],
148
- 'Tarefas Completadas': total_tarefas,
149
- 'Acertos Absolutos': total_acertos,
150
- 'Total Tempo': str(duracao_total),
151
- 'Tempo Médio por Tarefa': str(duracao_total / total_tarefas if total_tarefas > 0 else timedelta(0))
152
- }
153
- metrics_df = pd.concat([metrics_df, pd.DataFrame([metrics])], ignore_index=True)
154
-
155
- # Ordenar por acertos e resetar índice
156
- return metrics_df.sort_values('Acertos Absolutos', ascending=False).reset_index(drop=True)
157
-
158
- except Exception as e:
159
- logging.error(f"Erro ao calcular métricas: {str(e)}")
160
- raise
 
 
 
 
 
 
161
 
162
  class ReportGenerator:
163
  """Classe responsável pela geração de relatórios e visualizações."""
 
117
  self.tarefas_df['Aluno_Pattern'] = self.tarefas_df['Aluno'].apply(extract_pattern)
118
  return self.calculate_metrics()
119
 
120
+ def calculate_metrics(self) -> pd.DataFrame:
121
+ """Calcula métricas de desempenho dos alunos, eliminando duplicatas e normalizando valores."""
122
+ try:
123
+ metrics_df = pd.DataFrame()
124
+
125
+ # Agrupar por aluno para eliminar duplicatas
126
+ grouped_tasks = self.tarefas_df.groupby(['Aluno_Pattern']).agg({
127
+ 'Aluno': 'first', # Mantém o primeiro nome encontrado
128
+ 'Duração': 'sum', # Soma total do tempo
129
+ 'Nota': 'sum', # Soma total dos acertos
130
+ }).reset_index()
131
+
132
+ # Contar número de tarefas por aluno
133
+ task_counts = self.tarefas_df.groupby('Aluno_Pattern').size().reset_index(name='total_tarefas')
134
+ grouped_tasks = grouped_tasks.merge(task_counts, on='Aluno_Pattern', how='left')
 
 
 
 
135
 
136
+ for _, aluno in self.alunos_df.iterrows():
137
+ aluno_pattern = aluno['Aluno_Pattern']
138
+ aluno_data = grouped_tasks[grouped_tasks['Aluno_Pattern'] == aluno_pattern]
 
 
139
 
140
+ if not aluno_data.empty:
141
+ # Calcular métricas por aluno
142
+ total_tarefas = aluno_data['total_tarefas'].iloc[0]
143
+ total_acertos = aluno_data['Nota'].iloc[0]
144
+ duracao_total = aluno_data['Duração'].iloc[0]
145
+
146
+ metrics = {
147
+ 'Nome do Aluno': aluno['Nome do Aluno'],
148
+ 'Tarefas Completadas': total_tarefas,
149
+ 'Acertos Absolutos': total_acertos,
150
+ 'Total Tempo': str(duracao_total),
151
+ 'Tempo Médio por Tarefa': str(duracao_total / total_tarefas if total_tarefas > 0 else timedelta(0))
152
+ }
153
+ metrics_df = pd.concat([metrics_df, pd.DataFrame([metrics])], ignore_index=True)
154
+
155
+ # Ordenar por acertos e resetar índice
156
+ return metrics_df.sort_values('Acertos Absolutos', ascending=False).reset_index(drop=True)
157
+
158
+ except Exception as e:
159
+ logging.error(f"Erro ao calcular métricas: {str(e)}")
160
+ raise
161
 
162
  class ReportGenerator:
163
  """Classe responsável pela geração de relatórios e visualizações."""