histlearn commited on
Commit
bc73554
·
verified ·
1 Parent(s): 0d0c9ef

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -9
app.py CHANGED
@@ -54,7 +54,7 @@ def match_alunos(tarefas_csv_path, alunos_csv_path, contador_csv_path):
54
  tarefas_df.columns = tarefas_df.columns.str.strip()
55
  alunos_df.columns = alunos_df.columns.str.strip()
56
 
57
- if 'Aluno' not in tarefas_df.columns or 'Nota' not in tarefas_df.columns or 'Duração' not in tarefas_df.columns:
58
  print(f"Colunas 'Aluno', 'Nota' ou 'Duração' não encontradas no arquivo {tarefas_csv_path}. Pulando este arquivo.")
59
  return
60
 
@@ -136,10 +136,14 @@ def process_relatorios(contador_csv_path, relatorio_csv_path):
136
  media_tempo_medio_turma = tempo_medio_por_tarefa['Tempo Médio por Tarefa'].mean()
137
  media_tempo_medio_turma = format_timedelta(media_tempo_medio_turma)
138
 
 
 
 
 
139
  contador_df.to_csv(relatorio_csv_path, index=False, encoding='utf-8-sig')
140
- return contador_df, media_tempo_medio_turma
141
 
142
- def generate_pdf_report(dataframe, media_tempo_medio_turma, html_path, output_pdf_path):
143
  class PDF(FPDF):
144
  def header(self):
145
  self.set_font('Arial', 'B', 12)
@@ -172,7 +176,7 @@ def generate_pdf_report(dataframe, media_tempo_medio_turma, html_path, output_pd
172
  bars = plt.bar(top_students['Nome do Aluno'], top_students['Acertos Absolutos'], color='blue')
173
  plt.xlabel('Nome do Aluno')
174
  plt.ylabel('Acertos Absolutos')
175
- plt.title(f'Top 5 Alunos - Acertos Absolutos (Tempo Médio da Turma: {media_tempo_medio_turma})')
176
  plt.xticks(rotation=45, ha='right')
177
  add_bar_labels(bars, top_students['Acertos Absolutos'])
178
  plt.tight_layout()
@@ -184,7 +188,7 @@ def generate_pdf_report(dataframe, media_tempo_medio_turma, html_path, output_pd
184
  bars = plt.bar(top_students['Nome do Aluno'], top_students['Média de Acertos'].str.rstrip('%').astype('float'), color='green')
185
  plt.xlabel('Nome do Aluno')
186
  plt.ylabel('Percentual de Acertos (%)')
187
- plt.title(f'Top 5 Alunos - Percentual de Acertos (Tempo Médio da Turma: {media_tempo_medio_turma})')
188
  plt.xticks(rotation=45, ha='right')
189
  add_bar_labels(bars, top_students['Média de Acertos'].str.rstrip('%').astype('float'))
190
  plt.tight_layout()
@@ -196,7 +200,7 @@ def generate_pdf_report(dataframe, media_tempo_medio_turma, html_path, output_pd
196
  bars = plt.bar(top_students['Nome do Aluno'], top_students['Tarefas Completadas'], color='red')
197
  plt.xlabel('Nome do Aluno')
198
  plt.ylabel('Tarefas Completadas')
199
- plt.title(f'Top 5 Alunos - Tarefas Completadas (Tempo Médio da Turma: {media_tempo_medio_turma})')
200
  plt.xticks(rotation=45, ha='right')
201
  add_bar_labels(bars, top_students['Tarefas Completadas'])
202
  plt.tight_layout()
@@ -211,7 +215,7 @@ def generate_pdf_report(dataframe, media_tempo_medio_turma, html_path, output_pd
211
  bars = plt.bar(top_time_students['Nome do Aluno'], top_time_students['Total Tempo'].dt.total_seconds(), color='purple')
212
  plt.xlabel('Nome do Aluno')
213
  plt.ylabel('Tempo Total (hh:mm:ss)')
214
- plt.title(f'Top 5 Alunos - Tempo Total (Tempo Médio da Turma: {media_tempo_medio_turma})')
215
  plt.xticks(rotation=45, ha='right')
216
  add_bar_labels(bars, top_time_students['Total Tempo'].apply(format_timedelta))
217
  plt.tight_layout()
@@ -219,6 +223,27 @@ def generate_pdf_report(dataframe, media_tempo_medio_turma, html_path, output_pd
219
  plt.savefig(graph_path)
220
  pdf.add_image(graph_path)
221
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  # Salvar o PDF com os gráficos
223
  temp_graphics_pdf = 'temp_graphics.pdf'
224
  pdf.output(temp_graphics_pdf)
@@ -295,14 +320,14 @@ def processar_relatorio(html_file, tarefa_files):
295
  contador_csv_path = os.path.join(output_directory, "contador_tarefas.csv")
296
  relatorio_csv_path = os.path.join(output_directory, "relatorio_final.csv")
297
  process_all_tarefas_in_directory(output_directory, alunos_csv_path, contador_csv_path, relatorio_csv_path)
298
- df, media_tempo_medio_turma = process_relatorios(contador_csv_path, relatorio_csv_path)
299
 
300
  # Salva o relatório em HTML e PDF
301
  html_output_path = os.path.join(output_directory, "relatorio_final.html")
302
  df.to_html(html_output_path, index=False, encoding='utf-8-sig')
303
 
304
  pdf_output_path = os.path.join(output_directory, "relatorio_final.pdf")
305
- generate_pdf_report(df, media_tempo_medio_turma, html_output_path, pdf_output_path)
306
 
307
  return df.to_html(index=False), html_output_path, pdf_output_path
308
 
 
54
  tarefas_df.columns = tarefas_df.columns.str.strip()
55
  alunos_df.columns = alunos_df.columns.str.strip()
56
 
57
+ if 'Aluno' not in tarefas_df.columns ou 'Nota' not in tarefas_df.columns ou 'Duração' not in tarefas_df.columns:
58
  print(f"Colunas 'Aluno', 'Nota' ou 'Duração' não encontradas no arquivo {tarefas_csv_path}. Pulando este arquivo.")
59
  return
60
 
 
136
  media_tempo_medio_turma = tempo_medio_por_tarefa['Tempo Médio por Tarefa'].mean()
137
  media_tempo_medio_turma = format_timedelta(media_tempo_medio_turma)
138
 
139
+ # Calcula médias gerais da turma
140
+ media_acertos_turma = (contador_df['Acertos Absolutos'] / (contador_df['Tarefas Completadas'] * 2)).mean() * 100
141
+ media_tarefas_turma = contador_df['Tarefas Completadas'].mean()
142
+
143
  contador_df.to_csv(relatorio_csv_path, index=False, encoding='utf-8-sig')
144
+ return contador_df, media_tempo_medio_turma, media_acertos_turma, media_tarefas_turma
145
 
146
+ def generate_pdf_report(dataframe, media_tempo_medio_turma, media_acertos_turma, media_tarefas_turma, html_path, output_pdf_path):
147
  class PDF(FPDF):
148
  def header(self):
149
  self.set_font('Arial', 'B', 12)
 
176
  bars = plt.bar(top_students['Nome do Aluno'], top_students['Acertos Absolutos'], color='blue')
177
  plt.xlabel('Nome do Aluno')
178
  plt.ylabel('Acertos Absolutos')
179
+ plt.title('Top 5 Alunos - Acertos Absolutos')
180
  plt.xticks(rotation=45, ha='right')
181
  add_bar_labels(bars, top_students['Acertos Absolutos'])
182
  plt.tight_layout()
 
188
  bars = plt.bar(top_students['Nome do Aluno'], top_students['Média de Acertos'].str.rstrip('%').astype('float'), color='green')
189
  plt.xlabel('Nome do Aluno')
190
  plt.ylabel('Percentual de Acertos (%)')
191
+ plt.title('Top 5 Alunos - Percentual de Acertos')
192
  plt.xticks(rotation=45, ha='right')
193
  add_bar_labels(bars, top_students['Média de Acertos'].str.rstrip('%').astype('float'))
194
  plt.tight_layout()
 
200
  bars = plt.bar(top_students['Nome do Aluno'], top_students['Tarefas Completadas'], color='red')
201
  plt.xlabel('Nome do Aluno')
202
  plt.ylabel('Tarefas Completadas')
203
+ plt.title('Top 5 Alunos - Tarefas Completadas')
204
  plt.xticks(rotation=45, ha='right')
205
  add_bar_labels(bars, top_students['Tarefas Completadas'])
206
  plt.tight_layout()
 
215
  bars = plt.bar(top_time_students['Nome do Aluno'], top_time_students['Total Tempo'].dt.total_seconds(), color='purple')
216
  plt.xlabel('Nome do Aluno')
217
  plt.ylabel('Tempo Total (hh:mm:ss)')
218
+ plt.title('Top 5 Alunos - Tempo Total')
219
  plt.xticks(rotation=45, ha='right')
220
  add_bar_labels(bars, top_time_students['Total Tempo'].apply(format_timedelta))
221
  plt.tight_layout()
 
223
  plt.savefig(graph_path)
224
  pdf.add_image(graph_path)
225
 
226
+ # Adiciona gráfico de resumo da turma
227
+ metrics = ['Tempo Médio (hh:mm:ss)', 'Média de Acertos (%)', 'Média de Tarefas']
228
+ values = [media_tempo_medio_turma, media_acertos_turma, media_tarefas_turma]
229
+
230
+ plt.figure(figsize=(10, 6))
231
+ bars = plt.bar(metrics, values, color=['blue', 'green', 'red'])
232
+ plt.xlabel('Métricas')
233
+ plt.ylabel('Valores')
234
+ plt.title('Resumo da Turma')
235
+ plt.xticks(rotation=45, ha='right')
236
+ for bar, value in zip(bars, values):
237
+ plt.annotate(f'{value:.2f}' if isinstance(value, float) else value,
238
+ xy=(bar.get_x() + bar.get_width() / 2, bar.get_height()),
239
+ xytext=(0, 3), # 3 points vertical offset
240
+ textcoords="offset points",
241
+ ha='center', va='bottom')
242
+ plt.tight_layout()
243
+ graph_path = 'resumo_turma.png'
244
+ plt.savefig(graph_path)
245
+ pdf.add_image(graph_path)
246
+
247
  # Salvar o PDF com os gráficos
248
  temp_graphics_pdf = 'temp_graphics.pdf'
249
  pdf.output(temp_graphics_pdf)
 
320
  contador_csv_path = os.path.join(output_directory, "contador_tarefas.csv")
321
  relatorio_csv_path = os.path.join(output_directory, "relatorio_final.csv")
322
  process_all_tarefas_in_directory(output_directory, alunos_csv_path, contador_csv_path, relatorio_csv_path)
323
+ df, media_tempo_medio_turma, media_acertos_turma, media_tarefas_turma = process_relatorios(contador_csv_path, relatorio_csv_path)
324
 
325
  # Salva o relatório em HTML e PDF
326
  html_output_path = os.path.join(output_directory, "relatorio_final.html")
327
  df.to_html(html_output_path, index=False, encoding='utf-8-sig')
328
 
329
  pdf_output_path = os.path.join(output_directory, "relatorio_final.pdf")
330
+ generate_pdf_report(df, media_tempo_medio_turma, media_acertos_turma, media_tarefas_turma, html_output_path, pdf_output_path)
331
 
332
  return df.to_html(index=False), html_output_path, pdf_output_path
333