Commit
·
bb7de2f
1
Parent(s):
6f2ce65
dashboard
Browse files
__pycache__/label_oabench_practical.cpython-310.pyc
CHANGED
Binary files a/__pycache__/label_oabench_practical.cpython-310.pyc and b/__pycache__/label_oabench_practical.cpython-310.pyc differ
|
|
anotacoes/raul_anotacoes_discursivas.json
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"1": {
|
3 |
+
"exame_41_area_administrativo_questao_numero_1_letra_A_parte_I": "Sim"
|
4 |
+
}
|
5 |
+
}
|
anotacoes/raul_anotacoes_praticas.json
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"1": {
|
3 |
+
"exame_41_area_administrativo_questao_numero_1_parte_I": "Sim"
|
4 |
+
}
|
5 |
+
}
|
app.py
CHANGED
@@ -1,16 +1,18 @@
|
|
1 |
import streamlit as st
|
2 |
import label_oabench_discursive
|
3 |
import label_oabench_practical
|
|
|
4 |
|
5 |
st.set_page_config(layout="wide")
|
6 |
|
7 |
# Criando a barra lateral para navegação
|
8 |
st.sidebar.title("Anotação paper LLM-as-Judge")
|
9 |
-
opcao = st.sidebar.radio("Escolha uma aplicação:", ["Provas práticas", "Questões discursivas"])
|
10 |
|
11 |
# Roteando para a aplicação correta
|
12 |
if opcao == "Provas práticas":
|
13 |
label_oabench_practical.run()
|
14 |
elif opcao == "Questões discursivas":
|
15 |
label_oabench_discursive.run()
|
16 |
-
|
|
|
|
1 |
import streamlit as st
|
2 |
import label_oabench_discursive
|
3 |
import label_oabench_practical
|
4 |
+
import label_oabench_dashboard
|
5 |
|
6 |
st.set_page_config(layout="wide")
|
7 |
|
8 |
# Criando a barra lateral para navegação
|
9 |
st.sidebar.title("Anotação paper LLM-as-Judge")
|
10 |
+
opcao = st.sidebar.radio("Escolha uma aplicação:", ["Provas práticas", "Questões discursivas","Dashboard Anotações"])
|
11 |
|
12 |
# Roteando para a aplicação correta
|
13 |
if opcao == "Provas práticas":
|
14 |
label_oabench_practical.run()
|
15 |
elif opcao == "Questões discursivas":
|
16 |
label_oabench_discursive.run()
|
17 |
+
elif opcao == "Dashboard Anotações":
|
18 |
+
label_oabench_dashboard.run()
|
label_oabench_dashboard.py
ADDED
@@ -0,0 +1,119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
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"):
|
8 |
+
anotacoes = {}
|
9 |
+
if os.path.exists(pasta):
|
10 |
+
for arquivo in os.listdir(pasta):
|
11 |
+
if arquivo.endswith(f"_{tipo}.json"):
|
12 |
+
usuario = arquivo.split("_")[0]
|
13 |
+
with open(os.path.join(pasta, arquivo), "r", encoding="utf-8") as f:
|
14 |
+
anotacoes[usuario] = json.load(f)
|
15 |
+
return anotacoes
|
16 |
+
|
17 |
+
# Função para calcular os totais de anotações
|
18 |
+
def calcular_totais(anotacoes_discursivas, anotacoes_praticas, df_discursivas, df_praticas):
|
19 |
+
resultados = []
|
20 |
+
|
21 |
+
total_questoes_discursivas = len(df_discursivas)
|
22 |
+
total_criterios_discursivos = sum(len(q["formated_criteria"]) for _, q in df_discursivas.iterrows())
|
23 |
+
total_provas_praticas = len(df_praticas)
|
24 |
+
total_criterios_praticos = sum(len(q["formated_criteria"]) for _, q in df_praticas.iterrows())
|
25 |
+
|
26 |
+
usuarios = set(anotacoes_discursivas.keys()).union(set(anotacoes_praticas.keys()))
|
27 |
+
|
28 |
+
for usuario in usuarios:
|
29 |
+
questoes_discursivas_completas = 0
|
30 |
+
criterios_discursivos_anotados = 0
|
31 |
+
provas_praticas_completas = 0
|
32 |
+
criterios_praticos_anotados = 0
|
33 |
+
|
34 |
+
if usuario in anotacoes_discursivas:
|
35 |
+
for questao_id, criterios in anotacoes_discursivas[usuario].items():
|
36 |
+
if questao_id in df_discursivas["id"].astype(str).values:
|
37 |
+
criterios_totais = len(df_discursivas[df_discursivas["id"] == int(questao_id)].iloc[0]["formated_criteria"])
|
38 |
+
criterios_anotados = len([k for k, v in criterios.items() if v in ["Sim", "Não"]])
|
39 |
+
if criterios_anotados == criterios_totais:
|
40 |
+
questoes_discursivas_completas += 1
|
41 |
+
criterios_discursivos_anotados += criterios_anotados
|
42 |
+
|
43 |
+
if usuario in anotacoes_praticas:
|
44 |
+
for questao_id, criterios in anotacoes_praticas[usuario].items():
|
45 |
+
if questao_id in df_praticas["id"].astype(str).values:
|
46 |
+
criterios_totais = len(df_praticas[df_praticas["id"] == int(questao_id)].iloc[0]["formated_criteria"])
|
47 |
+
criterios_anotados = len([k for k, v in criterios.items() if v in ["Sim", "Não"]])
|
48 |
+
if criterios_anotados == criterios_totais:
|
49 |
+
provas_praticas_completas += 1
|
50 |
+
criterios_praticos_anotados += criterios_anotados
|
51 |
+
|
52 |
+
resultados.append({
|
53 |
+
"usuario": usuario,
|
54 |
+
"questoes_discursivas_anotadas": f"{questoes_discursivas_completas}/{total_questoes_discursivas}",
|
55 |
+
"total_criterios_discursivos_anotados": f"{criterios_discursivos_anotados}/{total_criterios_discursivos}",
|
56 |
+
"provas_praticas_anotadas": f"{provas_praticas_completas}/{total_provas_praticas}",
|
57 |
+
"criterios_praticos_anotados": f"{criterios_praticos_anotados}/{total_criterios_praticos}"
|
58 |
+
})
|
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")
|
86 |
+
anotacoes_discursivas = carregar_anotacoes("anotacoes_discursivas")
|
87 |
+
anotacoes_praticas = carregar_anotacoes("anotacoes_praticas")
|
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.")
|