Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -148,11 +148,6 @@ class ReportGenerator:
|
|
148 |
].values.tolist()
|
149 |
basic_stats['top_performers'] = top_students
|
150 |
|
151 |
-
efficient_students = self.data.nlargest(3, 'Eficiência')[
|
152 |
-
['Nome do Aluno', 'Eficiência', 'Acertos Absolutos']
|
153 |
-
].values.tolist()
|
154 |
-
basic_stats['most_efficient'] = efficient_students
|
155 |
-
|
156 |
return basic_stats
|
157 |
|
158 |
def generate_graphs(self) -> List[plt.Figure]:
|
@@ -163,7 +158,7 @@ class ReportGenerator:
|
|
163 |
plt.rcParams['font.size'] = 10
|
164 |
plt.rcParams['axes.titlesize'] = 12
|
165 |
|
166 |
-
# 1. Distribuição por nível
|
167 |
plt.figure()
|
168 |
nivel_counts = self.data['Nível'].value_counts()
|
169 |
colors = {'Avançado': '#2ecc71', 'Intermediário': '#f1c40f', 'Necessita Atenção': '#e74c3c'}
|
@@ -281,9 +276,6 @@ class ReportGenerator:
|
|
281 |
- Avançado: 10 ou mais acertos - Excelente domínio do conteúdo
|
282 |
- Intermediário: 5 a 9 acertos - Bom entendimento, com espaço para melhorias
|
283 |
- Necessita Atenção: Menos de 5 acertos - Requer suporte adicional
|
284 |
-
|
285 |
-
A eficiência é medida em acertos por hora, permitindo identificar alunos que
|
286 |
-
conseguem bons resultados com uso eficiente do tempo.
|
287 |
"""
|
288 |
pdf.multi_cell(0, 7, intro_text)
|
289 |
|
@@ -322,11 +314,6 @@ class ReportGenerator:
|
|
322 |
for aluno, acertos in self.stats['top_performers']:
|
323 |
pdf.cell(0, 7, f"- {aluno}: {acertos:.0f} acertos", 0, 1)
|
324 |
|
325 |
-
pdf.ln(3)
|
326 |
-
pdf.cell(0, 7, "Maior Eficiência:", 0, 1)
|
327 |
-
for aluno, eficiencia, acertos in self.stats['most_efficient']:
|
328 |
-
pdf.cell(0, 7, f"- {aluno}: {eficiencia:.1f} acertos/hora ({acertos:.0f} acertos totais)", 0, 1)
|
329 |
-
|
330 |
# Gráficos e Análises
|
331 |
for i, graph in enumerate(graphs):
|
332 |
pdf.add_page()
|
@@ -350,14 +337,14 @@ class ReportGenerator:
|
|
350 |
""")
|
351 |
|
352 |
elif i == 1:
|
353 |
-
pdf.cell(0, 10, '
|
354 |
pdf.set_font('Arial', '', 11)
|
355 |
pdf.multi_cell(0, 6, """
|
356 |
-
|
357 |
Este ranking permite:
|
358 |
-
-
|
359 |
-
-
|
360 |
-
- Estabelecer metas realistas para
|
361 |
""")
|
362 |
|
363 |
elif i == 2:
|
@@ -397,8 +384,7 @@ class ReportGenerator:
|
|
397 |
('Nome do Aluno', 80),
|
398 |
('Acertos', 25),
|
399 |
('Tarefas', 25),
|
400 |
-
('Tempo Total', 35)
|
401 |
-
('Eficiência', 25)
|
402 |
]
|
403 |
|
404 |
# Cabeçalho da tabela
|
@@ -418,7 +404,6 @@ class ReportGenerator:
|
|
418 |
pdf.cell(25, 7, f"{row['Acertos Absolutos']:.0f}", 1, 0, 'C')
|
419 |
pdf.cell(25, 7, str(row['Tarefas Completadas']), 1, 0, 'C')
|
420 |
pdf.cell(35, 7, tempo_str, 1, 0, 'C')
|
421 |
-
pdf.cell(25, 7, f"{float(row['Eficiência']):.1f}", 1, 0, 'C')
|
422 |
pdf.ln()
|
423 |
|
424 |
# Recomendações Finais
|
@@ -441,7 +426,7 @@ class ReportGenerator:
|
|
441 |
2. Melhorias no Processo:
|
442 |
- Acompanhamento individualizado dos alunos com baixo desempenho
|
443 |
- Feedback regular sobre o progresso
|
444 |
-
- Atividades extras para alunos com
|
445 |
|
446 |
3. Próximos Passos:
|
447 |
- Compartilhar resultados individuais
|
|
|
148 |
].values.tolist()
|
149 |
basic_stats['top_performers'] = top_students
|
150 |
|
|
|
|
|
|
|
|
|
|
|
151 |
return basic_stats
|
152 |
|
153 |
def generate_graphs(self) -> List[plt.Figure]:
|
|
|
158 |
plt.rcParams['font.size'] = 10
|
159 |
plt.rcParams['axes.titlesize'] = 12
|
160 |
|
161 |
+
# 1. Distribuição por nível
|
162 |
plt.figure()
|
163 |
nivel_counts = self.data['Nível'].value_counts()
|
164 |
colors = {'Avançado': '#2ecc71', 'Intermediário': '#f1c40f', 'Necessita Atenção': '#e74c3c'}
|
|
|
276 |
- Avançado: 10 ou mais acertos - Excelente domínio do conteúdo
|
277 |
- Intermediário: 5 a 9 acertos - Bom entendimento, com espaço para melhorias
|
278 |
- Necessita Atenção: Menos de 5 acertos - Requer suporte adicional
|
|
|
|
|
|
|
279 |
"""
|
280 |
pdf.multi_cell(0, 7, intro_text)
|
281 |
|
|
|
314 |
for aluno, acertos in self.stats['top_performers']:
|
315 |
pdf.cell(0, 7, f"- {aluno}: {acertos:.0f} acertos", 0, 1)
|
316 |
|
|
|
|
|
|
|
|
|
|
|
317 |
# Gráficos e Análises
|
318 |
for i, graph in enumerate(graphs):
|
319 |
pdf.add_page()
|
|
|
337 |
""")
|
338 |
|
339 |
elif i == 1:
|
340 |
+
pdf.cell(0, 10, 'Ranking Completo dos Alunos', 0, 1, 'L', True)
|
341 |
pdf.set_font('Arial', '', 11)
|
342 |
pdf.multi_cell(0, 6, """
|
343 |
+
Apresenta o ranking completo dos alunos por número de acertos.
|
344 |
Este ranking permite:
|
345 |
+
- Visualizar o desempenho individual de cada aluno
|
346 |
+
- Identificar diferentes níveis de aproveitamento
|
347 |
+
- Estabelecer metas realistas para melhorias
|
348 |
""")
|
349 |
|
350 |
elif i == 2:
|
|
|
384 |
('Nome do Aluno', 80),
|
385 |
('Acertos', 25),
|
386 |
('Tarefas', 25),
|
387 |
+
('Tempo Total', 35)
|
|
|
388 |
]
|
389 |
|
390 |
# Cabeçalho da tabela
|
|
|
404 |
pdf.cell(25, 7, f"{row['Acertos Absolutos']:.0f}", 1, 0, 'C')
|
405 |
pdf.cell(25, 7, str(row['Tarefas Completadas']), 1, 0, 'C')
|
406 |
pdf.cell(35, 7, tempo_str, 1, 0, 'C')
|
|
|
407 |
pdf.ln()
|
408 |
|
409 |
# Recomendações Finais
|
|
|
426 |
2. Melhorias no Processo:
|
427 |
- Acompanhamento individualizado dos alunos com baixo desempenho
|
428 |
- Feedback regular sobre o progresso
|
429 |
+
- Atividades extras para alunos com bom desempenho
|
430 |
|
431 |
3. Próximos Passos:
|
432 |
- Compartilhar resultados individuais
|