histlearn commited on
Commit
6be702d
·
verified ·
1 Parent(s): a2c6ed7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -19
app.py CHANGED
@@ -122,33 +122,41 @@ class StudentAnalyzer:
122
  try:
123
  metrics_df = pd.DataFrame()
124
 
125
- # Agrupar por Aluno_Pattern e Nome do Aluno para eliminar duplicatas completamente
126
- grouped_tasks = self.tarefas_df.groupby(['Aluno_Pattern', 'Nome do Aluno']).agg({
127
- 'Duração': 'sum',
128
- 'Nota': 'sum'
 
129
  }).reset_index()
130
 
131
  # Contar número de tarefas únicas por aluno
132
- task_counts = self.tarefas_df.groupby(['Aluno_Pattern', 'Nome do Aluno']).size().reset_index(name='total_tarefas')
133
- grouped_tasks = grouped_tasks.merge(task_counts, on=['Aluno_Pattern', 'Nome do Aluno'], how='left')
134
 
135
- # Processar cada aluno uma única vez
136
- for _, aluno in self.alunos_df.drop_duplicates(subset=['Aluno_Pattern', 'Nome do Aluno']).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
- metrics = {
142
- 'Nome do Aluno': aluno['Nome do Aluno'],
143
- 'Tarefas Completadas': aluno_data['total_tarefas'].iloc[0],
144
- 'Acertos Absolutos': aluno_data['Nota'].iloc[0],
145
- 'Total Tempo': str(aluno_data['Duração'].iloc[0]),
146
- 'Tempo Médio por Tarefa': str(aluno_data['Duração'].iloc[0] / aluno_data['total_tarefas'].iloc[0]
 
 
 
 
147
  if aluno_data['total_tarefas'].iloc[0] > 0 else timedelta(0))
148
- }
149
- metrics_df = pd.concat([metrics_df, pd.DataFrame([metrics])], ignore_index=True)
 
150
 
151
- return metrics_df.sort_values('Acertos Absolutos', ascending=False).drop_duplicates(subset=['Nome do Aluno']).reset_index(drop=True)
 
152
 
153
  except Exception as e:
154
  logging.error(f"Erro ao calcular métricas: {str(e)}")
 
122
  try:
123
  metrics_df = pd.DataFrame()
124
 
125
+ # Agrupar por Aluno_Pattern para eliminar duplicatas
126
+ grouped_tasks = self.tarefas_df.groupby('Aluno_Pattern').agg({
127
+ 'Aluno': 'first', # Nome original do aluno na tarefa
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 únicas 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
+ # Processar cada aluno uma única vez usando o DataFrame de alunos para informações corretas
137
+ processed_patterns = set() # Conjunto para controlar padrões já processados
138
+
139
+ for _, aluno in self.alunos_df.iterrows():
140
  aluno_pattern = aluno['Aluno_Pattern']
 
141
 
142
+ # Evitar duplicatas do mesmo padrão
143
+ if aluno_pattern not in processed_patterns:
144
+ aluno_data = grouped_tasks[grouped_tasks['Aluno_Pattern'] == aluno_pattern]
145
+
146
+ if not aluno_data.empty:
147
+ metrics = {
148
+ 'Nome do Aluno': aluno['Nome do Aluno'],
149
+ 'Tarefas Completadas': aluno_data['total_tarefas'].iloc[0],
150
+ 'Acertos Absolutos': aluno_data['Nota'].iloc[0],
151
+ 'Total Tempo': str(aluno_data['Duração'].iloc[0]),
152
+ 'Tempo Médio por Tarefa': str(aluno_data['Duração'].iloc[0] / aluno_data['total_tarefas'].iloc[0]
153
  if aluno_data['total_tarefas'].iloc[0] > 0 else timedelta(0))
154
+ }
155
+ metrics_df = pd.concat([metrics_df, pd.DataFrame([metrics])], ignore_index=True)
156
+ processed_patterns.add(aluno_pattern)
157
 
158
+ # Ordenar por acertos e resetar índice
159
+ return metrics_df.sort_values('Acertos Absolutos', ascending=False).reset_index(drop=True)
160
 
161
  except Exception as e:
162
  logging.error(f"Erro ao calcular métricas: {str(e)}")