histlearn commited on
Commit
5562b19
·
verified ·
1 Parent(s): eadae16

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -19
app.py CHANGED
@@ -4,8 +4,6 @@ import re
4
  import os
5
  from datetime import timedelta
6
 
7
- # --- Funções auxiliares ---
8
-
9
  def parse_duration(duration_str):
10
  try:
11
  h, m, s = map(int, duration_str.split(':'))
@@ -37,7 +35,7 @@ def normalize_multiple_excel_to_csv(input_directory, output_directory):
37
 
38
  def extract_aluno_pattern(nome):
39
  if isinstance(nome, str):
40
- match = re.search(r"(\d{8,9}-\w{2})", nome.lower())
41
  return match.group(1) if match else None
42
  return None
43
 
@@ -80,27 +78,25 @@ def match_alunos(tarefas_csv_path, alunos_csv_path, contador_csv_path):
80
 
81
  matched_alunos = alunos_df[alunos_df['Aluno_Pattern'].isin(tarefas_df['Aluno_Pattern'])]
82
 
83
- # Incluir todos os alunos, mesmo os que não têm tarefas correspondentes
84
- todos_alunos = pd.DataFrame({'Nome do Aluno': alunos_df['Nome do Aluno'], 'Aluno_Pattern': alunos_df['Aluno_Pattern']})
85
- todos_alunos = todos_alunos.drop_duplicates()
86
 
87
- for aluno in todos_alunos['Nome do Aluno']:
88
- aluno_pattern = todos_alunos.loc[todos_alunos['Nome do Aluno'] == aluno, 'Aluno_Pattern'].values[0]
89
  aluno_tarefas = tarefas_df[tarefas_df['Aluno_Pattern'] == aluno_pattern]
90
- nota_total = aluno_tarefas['Nota'].sum() if not aluno_tarefas.empty else 0
91
- tempo_total = aluno_tarefas['Duração'].sum() if not aluno_tarefas.empty else timedelta(0)
92
 
93
  if aluno in contador_df['Nome do Aluno'].values:
94
- contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Tarefas Completadas'] += aluno_tarefas.shape[0]
95
  contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Acertos Absolutos'] += nota_total
96
  current_total_tempo = pd.to_timedelta(contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Total Tempo'].values[0])
97
  contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Total Tempo'] = str(current_total_tempo + tempo_total)
98
  else:
99
- contador_df = pd.concat([contador_df, pd.DataFrame({'Nome do Aluno': [aluno], 'Tarefas Completadas': [aluno_tarefas.shape[0]], 'Acertos Absolutos': [nota_total], 'Total Tempo': [str(tempo_total)]})], ignore_index=True)
100
 
101
  contador_df.to_csv(contador_csv_path, index=False)
102
-
103
- return todos_alunos
104
 
105
  def process_all_tarefas_in_directory(directory, alunos_csv_path, contador_csv_path, relatorio_csv_path):
106
  tarefas_files = [os.path.join(directory, f) for f in os.listdir(directory) if f.endswith('.csv') and f not in ['alunos_fim.csv', 'contador_tarefas.csv']]
@@ -116,11 +112,7 @@ def process_relatorios(contador_csv_path, relatorio_csv_path):
116
  contador_df = pd.read_csv(contador_csv_path)
117
  contador_df['Média de Acertos'] = ((contador_df['Acertos Absolutos'] / (contador_df['Tarefas Completadas'] * 2)) * 100).round(2).astype(str) + '%'
118
  contador_df['Total Tempo'] = pd.to_timedelta(contador_df['Total Tempo'])
119
-
120
- # Evitar divisão por zero para calcular 'Tempo Médio por Tarefa'
121
- contador_df['Tempo Médio por Tarefa'] = contador_df.apply(
122
- lambda row: format_timedelta(row['Total Tempo'] / row['Tarefas Completadas']) if row['Tarefas Completadas'] > 0 else '00:00:00', axis=1
123
- )
124
  contador_df['Total Tempo'] = contador_df['Total Tempo'].apply(format_timedelta)
125
  contador_df = contador_df.sort_values(by='Tarefas Completadas', ascending=False)
126
  contador_df.to_csv(relatorio_csv_path, index=False)
 
4
  import os
5
  from datetime import timedelta
6
 
 
 
7
  def parse_duration(duration_str):
8
  try:
9
  h, m, s = map(int, duration_str.split(':'))
 
35
 
36
  def extract_aluno_pattern(nome):
37
  if isinstance(nome, str):
38
+ match = re.search(r"(\d{8,9}-\w{2})", nome.lower())
39
  return match.group(1) if match else None
40
  return None
41
 
 
78
 
79
  matched_alunos = alunos_df[alunos_df['Aluno_Pattern'].isin(tarefas_df['Aluno_Pattern'])]
80
 
81
+ result_df = matched_alunos[['Nome do Aluno']].drop_duplicates()
 
 
82
 
83
+ for aluno in result_df['Nome do Aluno']:
84
+ aluno_pattern = alunos_df.loc[alunos_df['Nome do Aluno'] == aluno, 'Aluno_Pattern'].values[0]
85
  aluno_tarefas = tarefas_df[tarefas_df['Aluno_Pattern'] == aluno_pattern]
86
+ nota_total = aluno_tarefas['Nota'].sum()
87
+ tempo_total = aluno_tarefas['Duração'].sum()
88
 
89
  if aluno in contador_df['Nome do Aluno'].values:
90
+ contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Tarefas Completadas'] += 1
91
  contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Acertos Absolutos'] += nota_total
92
  current_total_tempo = pd.to_timedelta(contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Total Tempo'].values[0])
93
  contador_df.loc[contador_df['Nome do Aluno'] == aluno, 'Total Tempo'] = str(current_total_tempo + tempo_total)
94
  else:
95
+ contador_df = pd.concat([contador_df, pd.DataFrame({'Nome do Aluno': [aluno], 'Tarefas Completadas': [1], 'Acertos Absolutos': [nota_total], 'Total Tempo': [str(tempo_total)]})], ignore_index=True)
96
 
97
  contador_df.to_csv(contador_csv_path, index=False)
98
+
99
+ return result_df
100
 
101
  def process_all_tarefas_in_directory(directory, alunos_csv_path, contador_csv_path, relatorio_csv_path):
102
  tarefas_files = [os.path.join(directory, f) for f in os.listdir(directory) if f.endswith('.csv') and f not in ['alunos_fim.csv', 'contador_tarefas.csv']]
 
112
  contador_df = pd.read_csv(contador_csv_path)
113
  contador_df['Média de Acertos'] = ((contador_df['Acertos Absolutos'] / (contador_df['Tarefas Completadas'] * 2)) * 100).round(2).astype(str) + '%'
114
  contador_df['Total Tempo'] = pd.to_timedelta(contador_df['Total Tempo'])
115
+ contador_df['Tempo Médio por Tarefa'] = (contador_df['Total Tempo'] / contador_df['Tarefas Completadas']).apply(format_timedelta)
 
 
 
 
116
  contador_df['Total Tempo'] = contador_df['Total Tempo'].apply(format_timedelta)
117
  contador_df = contador_df.sort_values(by='Tarefas Completadas', ascending=False)
118
  contador_df.to_csv(relatorio_csv_path, index=False)