histlearn commited on
Commit
823bda9
·
verified ·
1 Parent(s): 25b934a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -53
app.py CHANGED
@@ -146,14 +146,13 @@ class ReportGenerator:
146
  def generate_graphs(self) -> List[plt.Figure]:
147
  """Gera gráficos para o relatório."""
148
  graphs = []
149
-
150
  # Distribuição de notas
151
  plt.figure(figsize=(10, 6))
152
- # Corrigindo o processamento da string
153
  acertos_data = pd.Series(self.data['Média de Acertos']).str.rstrip('%').astype(float)
154
  sns.histplot(data=acertos_data, bins=10)
155
  plt.axvline(self.stats['media_acertos'], color='r', linestyle='--',
156
- label=f'Média ({self.stats["media_acertos"]:.1f}%)')
157
  plt.title('Distribuição das Notas')
158
  plt.xlabel('Percentual de Acertos')
159
  plt.ylabel('Número de Alunos')
@@ -173,7 +172,7 @@ class ReportGenerator:
173
  plt.close()
174
 
175
  return graphs
176
-
177
  def generate_pdf(self, output_path: str, graphs: List[plt.Figure]) -> None:
178
  """Gera relatório em PDF."""
179
  class PDF(FPDF):
@@ -182,58 +181,57 @@ class ReportGenerator:
182
  self.cell(0, 10, 'Relatório de Desempenho - Análise Detalhada', 0, 1, 'C')
183
  self.ln(10)
184
 
185
- pdf = PDF('L', 'mm', 'A4')
186
-
187
- # Sumário executivo
188
- pdf.add_page()
189
- pdf.set_font('Arial', 'B', 12)
190
- pdf.cell(0, 10, 'Sumário Executivo', 0, 1)
191
- pdf.set_font('Arial', '', 10)
192
-
193
- # Usando - em vez de • para compatibilidade
194
- summary_text = f"""
195
- Análise da Turma:
196
- - Média de Acertos: {self.stats['media_acertos']:.1f}%
197
- - Desvio Padrão: {self.stats['desvio_padrao']:.1f}%
198
- - Mediana: {self.stats['mediana_acertos']:.1f}%
199
- - Número de Alunos: {self.stats['total_alunos']}
200
- - Média de Tarefas por Aluno: {self.stats['media_tarefas']:.1f}
201
- - Tempo Médio Total: {self.stats['media_tempo']}
202
- """
203
- pdf.multi_cell(0, 10, summary_text)
204
-
205
- # Gráficos
206
- for i, graph in enumerate(graphs):
207
  pdf.add_page()
208
- graph_path = f'temp_graph_{i}.png'
209
- graph.savefig(graph_path)
210
- pdf.image(graph_path, x=10, y=30, w=270)
211
- os.remove(graph_path)
212
-
213
- # Tabela de alunos
214
- pdf.add_page()
215
- pdf.set_font('Arial', 'B', 12)
216
- pdf.cell(0, 10, 'Desempenho Individual', 0, 1)
217
-
218
- # Cabeçalhos
219
- columns = ['Nome do Aluno', 'Média de Acertos', 'Tarefas', 'Tempo Total', 'Eficiência']
220
- widths = [80, 30, 30, 30, 30]
221
- pdf.set_font('Arial', 'B', 8)
222
- for i, col in enumerate(columns):
223
- pdf.cell(widths[i], 7, col, 1)
224
- pdf.ln()
225
-
226
- # Dados
227
- pdf.set_font('Arial', '', 8)
228
- for _, row in self.data.iterrows():
229
- pdf.cell(widths[0], 6, str(row['Nome do Aluno'])[:40], 1)
230
- pdf.cell(widths[1], 6, str(row['Média de Acertos']), 1)
231
- pdf.cell(widths[2], 6, str(row['Tarefas Completadas']), 1)
232
- pdf.cell(widths[3], 6, str(row['Total Tempo']), 1)
233
- pdf.cell(widths[4], 6, str(row['Eficiência']), 1)
 
 
 
 
 
 
 
 
234
  pdf.ln()
235
 
236
- pdf.output(output_path)
 
 
 
 
 
 
 
 
 
 
237
 
238
  def process_files(html_file, excel_files) -> Tuple[str, str, str]:
239
  """Processa arquivos e gera relatório."""
 
146
  def generate_graphs(self) -> List[plt.Figure]:
147
  """Gera gráficos para o relatório."""
148
  graphs = []
149
+
150
  # Distribuição de notas
151
  plt.figure(figsize=(10, 6))
 
152
  acertos_data = pd.Series(self.data['Média de Acertos']).str.rstrip('%').astype(float)
153
  sns.histplot(data=acertos_data, bins=10)
154
  plt.axvline(self.stats['media_acertos'], color='r', linestyle='--',
155
+ label=f'Média ({self.stats["media_acertos"]:.1f}%)')
156
  plt.title('Distribuição das Notas')
157
  plt.xlabel('Percentual de Acertos')
158
  plt.ylabel('Número de Alunos')
 
172
  plt.close()
173
 
174
  return graphs
175
+
176
  def generate_pdf(self, output_path: str, graphs: List[plt.Figure]) -> None:
177
  """Gera relatório em PDF."""
178
  class PDF(FPDF):
 
181
  self.cell(0, 10, 'Relatório de Desempenho - Análise Detalhada', 0, 1, 'C')
182
  self.ln(10)
183
 
184
+ pdf = PDF('L', 'mm', 'A4')
185
+
186
+ # Sumário executivo
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  pdf.add_page()
188
+ pdf.set_font('Arial', 'B', 12)
189
+ pdf.cell(0, 10, 'Sumário Executivo', 0, 1)
190
+ pdf.set_font('Arial', '', 10)
191
+
192
+ summary_text = f"""
193
+ Análise da Turma:
194
+ - Média de Acertos: {self.stats['media_acertos']:.1f}%
195
+ - Desvio Padrão: {self.stats['desvio_padrao']:.1f}%
196
+ - Mediana: {self.stats['mediana_acertos']:.1f}%
197
+ - Número de Alunos: {self.stats['total_alunos']}
198
+ - Média de Tarefas por Aluno: {self.stats['media_tarefas']:.1f}
199
+ - Tempo Médio Total: {self.stats['media_tempo']}
200
+ """
201
+ pdf.multi_cell(0, 10, summary_text)
202
+
203
+ # Gráficos
204
+ for i, graph in enumerate(graphs):
205
+ pdf.add_page()
206
+ graph_path = f'temp_graph_{i}.png'
207
+ graph.savefig(graph_path)
208
+ pdf.image(graph_path, x=10, y=30, w=270)
209
+ os.remove(graph_path)
210
+
211
+ # Tabela de alunos
212
+ pdf.add_page()
213
+ pdf.set_font('Arial', 'B', 12)
214
+ pdf.cell(0, 10, 'Desempenho Individual', 0, 1)
215
+
216
+ # Cabeçalhos
217
+ columns = ['Nome do Aluno', 'Média de Acertos', 'Tarefas', 'Tempo Total', 'Eficiência']
218
+ widths = [80, 30, 30, 30, 30]
219
+ pdf.set_font('Arial', 'B', 8)
220
+ for i, col in enumerate(columns):
221
+ pdf.cell(widths[i], 7, col, 1)
222
  pdf.ln()
223
 
224
+ # Dados
225
+ pdf.set_font('Arial', '', 8)
226
+ for _, row in self.data.iterrows():
227
+ pdf.cell(widths[0], 6, str(row['Nome do Aluno'])[:40], 1)
228
+ pdf.cell(widths[1], 6, str(row['Média de Acertos']), 1)
229
+ pdf.cell(widths[2], 6, str(row['Tarefas Completadas']), 1)
230
+ pdf.cell(widths[3], 6, str(row['Total Tempo']), 1)
231
+ pdf.cell(widths[4], 6, str(row['Eficiência']), 1)
232
+ pdf.ln()
233
+
234
+ pdf.output(output_path)
235
 
236
  def process_files(html_file, excel_files) -> Tuple[str, str, str]:
237
  """Processa arquivos e gera relatório."""