job-fair / pages /2_Evaluation.py
Zekun Wu
update
3922c93
raw
history blame
No virus
4.52 kB
import os
import streamlit as st
import pandas as pd
from io import StringIO
from util.evaluation import statistical_tests,calculate_correlations,calculate_divergences
from util.plot import create_score_plot,create_rank_plots,create_correlation_heatmaps
import plotly.express as px
def check_password():
def password_entered():
if password_input == os.getenv('PASSWORD'):
st.session_state['password_correct'] = True
else:
st.error("Incorrect Password, please try again.")
password_input = st.text_input("Enter Password:", type="password")
submit_button = st.button("Submit", on_click=password_entered)
if submit_button and not st.session_state.get('password_correct', False):
st.error("Please enter a valid password to access the demo.")
def app():
st.title('Result Evaluation')
if not st.session_state.get('password_correct', False):
check_password()
else:
st.sidebar.success("Password Verified. Proceed with the demo.")
# Allow users to upload a CSV file with processed results
uploaded_file = st.file_uploader("Upload your processed CSV file", type="csv")
if uploaded_file is not None:
data = StringIO(uploaded_file.getvalue().decode('utf-8'))
df = pd.read_csv(data)
st.write('Uploaded Data:', df)
if st.button('Evaluate Data'):
with st.spinner('Evaluating data...'):
statistical_results = statistical_tests(df)
#correlation_results = calculate_correlations(df)
#divergence_results = calculate_divergences(df)
flat_statistical_results = {f"Statistical_{key1}": value1 for key1, value1 in statistical_results.items()}
#flat_correlation_results = {f"Correlation_{key1}": value1 for key1, value1 in correlation_results.items()}
#flat_divergence_results = {f"Divergence_{key1}": value1 for key1, value1 in divergence_results.items()}
results_combined = {**flat_statistical_results} #,**flat_correlation_results}#, **flat_divergence_results}
results_df = pd.DataFrame(list(results_combined.items()), columns=['Metric', 'Value'])
st.write('Test Results:', results_df)
score_fig = create_score_plot(df)
st.plotly_chart(score_fig)
rank_fig = create_rank_plots(df)
st.plotly_chart(rank_fig)
hist_fig = px.histogram(df.melt(id_vars=['Role'],
value_vars=['Privilege_Avg_Score', 'Protect_Avg_Score',
'Neutral_Avg_Score']),
x='value', color='variable', facet_col='variable',
title='Distribution of Scores')
st.plotly_chart(hist_fig)
hist_rank_fig = px.histogram(
df.melt(id_vars=['Role'], value_vars=['Privilege_Rank', 'Protect_Rank', 'Neutral_Rank']),
x='value', color='variable', facet_col='variable', title='Distribution of Ranks')
st.plotly_chart(hist_rank_fig)
box_fig = px.box(df.melt(id_vars=['Role'], value_vars=['Privilege_Avg_Score', 'Protect_Avg_Score',
'Neutral_Avg_Score']),
x='variable', y='value', color='variable', title='Spread of Scores')
st.plotly_chart(box_fig)
box_rank_fig = px.box(
df.melt(id_vars=['Role'], value_vars=['Privilege_Rank', 'Protect_Rank', 'Neutral_Rank']),
x='variable', y='value', color='variable', title='Spread of Ranks')
st.plotly_chart(box_rank_fig)
heatmaps = create_correlation_heatmaps(df)
for title, fig in heatmaps.items():
st.plotly_chart(fig)
st.download_button(
label="Download Evaluation Results",
data=results_df.to_csv(index=False).encode('utf-8'),
file_name='evaluation_results.csv',
mime='text/csv',
)
if __name__ == "__main__":
app()