eduardocpacheco commited on
Commit
72dc442
·
1 Parent(s): 0600aa3
__pycache__/label_oabench_dashboard.cpython-310.pyc CHANGED
Binary files a/__pycache__/label_oabench_dashboard.cpython-310.pyc and b/__pycache__/label_oabench_dashboard.cpython-310.pyc differ
 
label_oabench_dashboard.py CHANGED
@@ -2,6 +2,8 @@ import streamlit as st
2
  import pandas as pd
3
  import os
4
  import json
 
 
5
 
6
  # Função para carregar anotações específicas (discursivas ou práticas)
7
  def carregar_anotacoes(tipo, pasta="anotacoes"):
@@ -59,27 +61,49 @@ def calcular_totais(anotacoes_discursivas, anotacoes_praticas, df_discursivas, d
59
 
60
  return resultados
61
 
62
- # Função para calcular contadores de "Sim" e "Não" por parte
63
- def calcular_contadores_por_parte(anotacoes, df):
64
- contadores = {}
65
- for usuario, criterios_usuario in anotacoes.items():
66
- for questao_id, criterios in criterios_usuario.items():
67
- if questao_id in df["id"].astype(str).values:
68
- for criterio, valor in criterios.items():
69
- parte = "_".join(criterio.split("_")[-2:]) # Exemplo: "parte_I" ou "parte_II"
70
- if parte not in contadores:
71
- contadores[parte] = {"Sim": 0, "Não": 0}
72
- if valor in ["Sim", "Não"]:
73
- contadores[parte][valor] += 1
74
- return contadores
75
-
76
- # Função principal para rodar o dashboard no Streamlit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  def run():
78
- #st.set_page_config(layout="wide")
79
  st.title("Dashboard de Anotações - Benchmark Jurídico OAB")
80
 
81
  # Carregar os DataFrames
82
- st.markdown("### Carregando dados...")
83
  with st.spinner("Carregando arquivos..."):
84
  df_discursivas = pd.read_pickle("df_evaluated_discursive.pkl")
85
  df_praticas = pd.read_pickle("df_evaluated.pkl")
@@ -88,32 +112,43 @@ def run():
88
 
89
  # Calcular os totais
90
  resultados = calcular_totais(anotacoes_discursivas, anotacoes_praticas, df_discursivas, df_praticas)
 
91
 
92
  # Exibir os dados em uma tabela
93
  st.markdown("### Resumo das Anotações")
94
- st.write("Análises completas por usuário:")
95
-
96
- df_resultados = pd.DataFrame(resultados)
97
  st.dataframe(df_resultados, use_container_width=True)
98
 
99
- # Calcular contadores para discursivas e práticas
100
- st.markdown("### Contadores de Sim e Não por Parte")
101
- contadores_discursivas = calcular_contadores_por_parte(anotacoes_discursivas, df_discursivas)
102
- contadores_praticas = calcular_contadores_por_parte(anotacoes_praticas, df_praticas)
103
-
104
- # Exibir os contadores no dashboard
105
- st.markdown("#### Discursivas")
106
- if contadores_discursivas:
107
- df_contadores_discursivas = pd.DataFrame.from_dict(contadores_discursivas, orient="index").reset_index()
108
- df_contadores_discursivas.columns = ["Parte", "Sim", "Não"]
109
- st.dataframe(df_contadores_discursivas, use_container_width=True)
110
- else:
111
- st.write("Nenhum dado encontrado para discursivas.")
112
-
113
- st.markdown("#### Práticas")
114
- if contadores_praticas:
115
- df_contadores_praticas = pd.DataFrame.from_dict(contadores_praticas, orient="index").reset_index()
116
- df_contadores_praticas.columns = ["Parte", "Sim", "Não"]
117
- st.dataframe(df_contadores_praticas, use_container_width=True)
118
- else:
119
- st.write("Nenhum dado encontrado para práticas.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  import pandas as pd
3
  import os
4
  import json
5
+ import zipfile
6
+ import io
7
 
8
  # Função para carregar anotações específicas (discursivas ou práticas)
9
  def carregar_anotacoes(tipo, pasta="anotacoes"):
 
61
 
62
  return resultados
63
 
64
+ # Função para calcular itens incompletos por usuário
65
+ def calcular_itens_incompletos(anotacoes_discursivas, anotacoes_praticas, df_discursivas, df_praticas):
66
+ resultados_incompletos = []
67
+
68
+ usuarios = set(anotacoes_discursivas.keys()).union(set(anotacoes_praticas.keys()))
69
+
70
+ for usuario in usuarios:
71
+ # Verificar discursivas
72
+ if usuario in anotacoes_discursivas:
73
+ for questao_id, criterios in anotacoes_discursivas[usuario].items():
74
+ if questao_id in df_discursivas["id"].astype(str).values:
75
+ criterios_totais = df_discursivas[df_discursivas["id"] == int(questao_id)].iloc[0]["formated_criteria"]
76
+ criterios_anotados = [k for k, v in criterios.items() if v in ["Sim", "Não"]]
77
+ if len(criterios_anotados) < len(criterios_totais):
78
+ for criterio in criterios_totais:
79
+ if criterio not in criterios_anotados:
80
+ resultados_incompletos.append({
81
+ "usuario": usuario,
82
+ "item_pendente": f"D {questao_id} {criterio['letra']}-{criterio['parte']}"
83
+ })
84
+
85
+ # Verificar práticas
86
+ if usuario in anotacoes_praticas:
87
+ for questao_id, criterios in anotacoes_praticas[usuario].items():
88
+ if questao_id in df_praticas["id"].astype(str).values:
89
+ criterios_totais = df_praticas[df_praticas["id"] == int(questao_id)].iloc[0]["formated_criteria"]
90
+ criterios_anotados = [k for k, v in criterios.items() if v in ["Sim", "Não"]]
91
+ if len(criterios_anotados) < len(criterios_totais):
92
+ for criterio in criterios_totais:
93
+ if criterio not in criterios_anotados:
94
+ resultados_incompletos.append({
95
+ "usuario": usuario,
96
+ "item_pendente": f"P {questao_id} {criterio['numero']}-{criterio['parte']}"
97
+ })
98
+
99
+ return resultados_incompletos
100
+
101
+ # Função principal do Streamlit
102
  def run():
103
+ st.set_page_config(layout="wide")
104
  st.title("Dashboard de Anotações - Benchmark Jurídico OAB")
105
 
106
  # Carregar os DataFrames
 
107
  with st.spinner("Carregando arquivos..."):
108
  df_discursivas = pd.read_pickle("df_evaluated_discursive.pkl")
109
  df_praticas = pd.read_pickle("df_evaluated.pkl")
 
112
 
113
  # Calcular os totais
114
  resultados = calcular_totais(anotacoes_discursivas, anotacoes_praticas, df_discursivas, df_praticas)
115
+ df_resultados = pd.DataFrame(resultados)
116
 
117
  # Exibir os dados em uma tabela
118
  st.markdown("### Resumo das Anotações")
 
 
 
119
  st.dataframe(df_resultados, use_container_width=True)
120
 
121
+ # Calcular itens incompletos
122
+ itens_incompletos = calcular_itens_incompletos(anotacoes_discursivas, anotacoes_praticas, df_discursivas, df_praticas)
123
+ df_incompletos = pd.DataFrame(itens_incompletos)
124
+
125
+ # Permitir filtragem por usuário
126
+ usuarios_disponiveis = df_incompletos["usuario"].unique().tolist()
127
+ usuario_selecionado = st.selectbox("Selecione um usuário:", options=["Todos"] + usuarios_disponiveis)
128
+
129
+ if usuario_selecionado != "Todos":
130
+ df_incompletos = df_incompletos[df_incompletos["usuario"] == usuario_selecionado]
131
+
132
+ # Exibir os itens incompletos
133
+ st.markdown("### Itens Incompletos por Usuário")
134
+ st.dataframe(df_incompletos, use_container_width=True)
135
+
136
+ # Criar um ZIP com os arquivos JSON
137
+ folder_path = "anotacoes"
138
+ zip_buffer = io.BytesIO()
139
+
140
+ with zipfile.ZipFile(zip_buffer, "w", zipfile.ZIP_DEFLATED) as zip_file:
141
+ for file_name in os.listdir(folder_path):
142
+ if file_name.endswith(".json"):
143
+ file_path = os.path.join(folder_path, file_name)
144
+ zip_file.write(file_path, arcname=file_name)
145
+
146
+ zip_buffer.seek(0)
147
+
148
+ # Criar botão de download
149
+ st.download_button(
150
+ label="📥 Baixar Todos os JSONs",
151
+ data=zip_buffer,
152
+ file_name="anotacoes.zip",
153
+ mime="application/zip"
154
+ )