ProfessorLeVesseur's picture
Update main.py
a6c607c verified
raw
history blame
15.9 kB
# import streamlit as st
# import pandas as pd
# from app_config import AppConfig # Import the configurations class
# from data_processor import DataProcessor # Import the data analysis class
# from visualization import Visualization # Import the data viz class
# from ai_analysis import AIAnalysis # Import the ai analysis class
# from sidebar import Sidebar # Import the Sidebar class
# from report import ReportGenerator
# def main():
# # Initialize the app configuration
# app_config = AppConfig()
# # Initialize the session state
# if 'ai_recommendations' not in st.session_state:
# st.session_state.ai_recommendations = None
# # Initialize the sidebar
# sidebar = Sidebar()
# sidebar.display()
# # Initialize the data processor
# data_processor = DataProcessor()
# # Initialize the visualization handler
# visualization = Visualization()
# # Initialize the AI analysis handler
# ai_analysis = AIAnalysis(data_processor.client)
# st.title("Literacy Implementation Record Data Analysis")
# # Add the descriptive text
# st.markdown("""
# This tool summarizes implementation record data for student attendance, engagement, and intervention dosage to address hypothesis #1: Have Students Received Adequate Instruction?
# """)
# # Date selection option
# date_option = st.radio(
# "Select data range:",
# ("All Data", "Date Range")
# )
# # Initialize start and end date variables
# start_date = None
# end_date = None
# if date_option == "Date Range":
# # Prompt user to enter start and end dates
# start_date = st.date_input("Start Date")
# end_date = st.date_input("End Date")
# # Ensure start date is before end date
# if start_date > end_date:
# st.error("Start date must be before end date.")
# return
# # File uploader
# uploaded_file = st.file_uploader("Upload your Excel file", type=["xlsx"])
# if uploaded_file is not None:
# try:
# # Read the Excel file into a DataFrame
# df = data_processor.read_excel(uploaded_file)
# # Format the session data
# df = data_processor.format_session_data(df)
# # Replace student names with initials
# df = data_processor.replace_student_names_with_initials(df)
# # Filter data if date range is selected
# if date_option == "Date Range":
# # Convert start_date and end_date to datetime
# start_date = pd.to_datetime(start_date).date()
# end_date = pd.to_datetime(end_date).date()
# # Identify the date column
# date_column = next((col for col in df.columns if col in ["Date of Session", "Date"]), None)
# if date_column:
# # Filter the DataFrame based on the selected date range
# df = df[(df[date_column] >= start_date) & (df[date_column] <= end_date)]
# else:
# st.error("Date column not found in the data.")
# return
# st.subheader("Uploaded Data")
# st.write(df)
# # Ensure the intervention column is determined
# intervention_column = data_processor.get_intervention_column(df)
# if intervention_column not in df.columns:
# st.error(f"Expected column '{intervention_column}' not found.")
# return
# # Compute Intervention Session Statistics
# intervention_stats = data_processor.compute_intervention_statistics(df)
# st.subheader("Intervention Dosage")
# st.write(intervention_stats)
# # Plot and download intervention statistics: Two-column layout for the visualization and intervention frequency
# col1, col2 = st.columns([3, 1]) # Set the column width ratio
# with col1:
# intervention_fig = visualization.plot_intervention_statistics(intervention_stats)
# with col2:
# intervention_frequency = intervention_stats['Intervention Dosage (%)'].values[0]
# # Display the "Intervention Dosage (%)" text
# st.markdown("<h3 style='color: #358E66;'>Intervention Dosage</h3>", unsafe_allow_html=True)
# # Display the frequency value below it
# st.markdown(f"<h1 style='color: #358E66;'>{intervention_frequency}%</h1>", unsafe_allow_html=True)
# visualization.download_chart(intervention_fig, "intervention_statistics_chart.png")
# # Compute Student Metrics
# student_metrics_df = data_processor.compute_student_metrics(df)
# st.subheader("Student Attendance and Engagement")
# st.write(student_metrics_df)
# # Compute Student Metric Averages
# attendance_avg_stats, engagement_avg_stats = data_processor.compute_average_metrics(student_metrics_df)
# # Plot and download student metrics
# student_metrics_fig = visualization.plot_student_metrics(student_metrics_df, attendance_avg_stats, engagement_avg_stats)
# visualization.download_chart(student_metrics_fig, "student_metrics_chart.png")
# # Evaluate each student and build decision tree diagrams
# student_metrics_df['Evaluation'] = student_metrics_df.apply(
# lambda row: data_processor.evaluate_student(row), axis=1
# )
# st.subheader("Student Evaluations")
# st.write(student_metrics_df[['Student', 'Evaluation']])
# # Build and display decision tree diagrams for each student
# for index, row in student_metrics_df.iterrows():
# tree_diagram = visualization.build_tree_diagram(row)
# # Get the student's name from the DataFrame
# student_name = row['Student']
# # Use st.expander to wrap the graphviz chart with the student's name
# with st.expander(f"{student_name} Decision Tree", expanded=False):
# st.graphviz_chart(tree_diagram.source)
# # Generate Notes and Recommendations using LLM
# if st.session_state.ai_recommendations is None:
# with st.spinner("Generating MTSS.ai Analysis..."):
# llm_input = ai_analysis.prepare_llm_input(student_metrics_df)
# # recommendations = ai_analysis.prompt_response_from_hf_llm(llm_input)
# recommendations = ai_analysis.prompt_response_from_mistral_llm(llm_input)
# st.session_state.ai_recommendations = recommendations
# # Display the recommendations
# st.subheader("MTSS.ai Analysis")
# # st.markdown(recommendations)
# st.markdown(st.session_state.ai_recommendations)
# # Download AI output
# # ai_analysis.download_llm_output(recommendations, "MTSSai_Report.txt")
# ai_analysis.download_llm_output(st.session_state.ai_recommendations, "MTSSai_Report.txt")
# # Generate the PDF Report using the stored recommendations
# report_gen = ReportGenerator()
# combined_pdf = report_gen.create_combined_pdf(
# intervention_fig,
# student_metrics_fig,
# st.session_state.ai_recommendations
# )
# # Add the download button for the PDF
# st.download_button(
# label="Download MTSS.ai Report (PDF)",
# data=combined_pdf,
# file_name="MTSSai_LIR_Report.pdf",
# mime="application/pdf",
# icon="📄",
# use_container_width=True
# )
# except Exception as e:
# st.error(f"Error processing the file: {str(e)}")
# if __name__ == '__main__':
# main()
import streamlit as st
import pandas as pd
from app_config import AppConfig # Import the configurations class
from data_processor import DataProcessor # Import the data analysis class
from visualization import Visualization # Import the data viz class
from ai_analysis import AIAnalysis # Import the ai analysis class
from sidebar import Sidebar # Import the Sidebar class
from report import ReportGenerator
def main():
# Initialize the app configuration
app_config = AppConfig()
# Initialize the session state
if 'ai_recommendations' not in st.session_state:
st.session_state.ai_recommendations = None
# Initialize the sidebar
sidebar = Sidebar()
sidebar.display()
# Initialize the data processor
data_processor = DataProcessor()
# Initialize the visualization handler
visualization = Visualization()
# Initialize the AI analysis handler
ai_analysis = AIAnalysis(data_processor.client)
st.title("Literacy Implementation Record Data Analysis")
# Add the descriptive text
st.markdown("""
This tool summarizes implementation record data for student attendance, engagement, and intervention dosage to address hypothesis #1: Have Students Received Adequate Instruction?
""")
# Date selection option
date_option = st.radio(
"Select data range:",
("All Data", "Date Range")
)
# Initialize start and end date variables
start_date = None
end_date = None
if date_option == "Date Range":
# Prompt user to enter start and end dates
start_date = st.date_input("Start Date")
end_date = st.date_input("End Date")
# Ensure start date is before end date
if start_date > end_date:
st.error("Start date must be before end date.")
return
# File uploader
uploaded_file = st.file_uploader("Upload your Excel file", type=["xlsx"])
if uploaded_file is not None:
try:
# Read the Excel file into a DataFrame
df = data_processor.read_excel(uploaded_file)
# Format the session data
df = data_processor.format_session_data(df)
# Replace student names with initials
df = data_processor.replace_student_names_with_initials(df)
# Filter data if date range is selected
if date_option == "Date Range":
# Convert start_date and end_date to datetime
start_date = pd.to_datetime(start_date).date()
end_date = pd.to_datetime(end_date).date()
# Identify the date column
date_column = next((col for col in df.columns if col in ["Date of Session", "Date"]), None)
if date_column:
# Filter the DataFrame based on the selected date range
df = df[(df[date_column] >= start_date) & (df[date_column] <= end_date)]
else:
st.error("Date column not found in the data.")
return
st.subheader("Uploaded Data")
st.write(df)
# Ensure the intervention column is determined
intervention_column = data_processor.get_intervention_column(df)
if intervention_column not in df.columns:
st.error(f"Expected column '{intervention_column}' not found.")
return
# Compute Student Metrics
student_metrics_df = data_processor.compute_student_metrics(df)
st.subheader("Student Attendance and Engagement")
st.write(student_metrics_df)
# Compute Student Metric Averages
attendance_avg_stats, engagement_avg_stats = data_processor.compute_average_metrics(student_metrics_df)
# Plot and download student metrics
student_metrics_fig = visualization.plot_student_metrics(student_metrics_df, attendance_avg_stats, engagement_avg_stats)
visualization.download_chart(student_metrics_fig, "student_metrics_chart.png")
# Compute Intervention Session Statistics
intervention_stats = data_processor.compute_intervention_statistics(df)
st.subheader("Intervention Dosage")
st.write(intervention_stats)
# Plot and download intervention statistics: Two-column layout for the visualization and intervention frequency
col1, col2 = st.columns([3, 1]) # Set the column width ratio
with col1:
intervention_fig = visualization.plot_intervention_statistics(intervention_stats)
with col2:
intervention_frequency = intervention_stats['Intervention Dosage (%)'].values[0]
# Display the "Intervention Dosage (%)" text
st.markdown("<h3 style='color: #358E66;'>Intervention Dosage</h3>", unsafe_allow_html=True)
# Display the frequency value below it
st.markdown(f"<h1 style='color: #358E66;'>{intervention_frequency}%</h1>", unsafe_allow_html=True)
visualization.download_chart(intervention_fig, "intervention_statistics_chart.png")
# Evaluate each student and build decision tree diagrams
student_metrics_df['Evaluation'] = student_metrics_df.apply(
lambda row: data_processor.evaluate_student(row), axis=1
)
st.subheader("Student Evaluations")
st.write(student_metrics_df[['Student', 'Evaluation']])
# Build and display decision tree diagrams for each student
for index, row in student_metrics_df.iterrows():
tree_diagram = visualization.build_tree_diagram(row)
# Get the student's name from the DataFrame
student_name = row['Student']
# Use st.expander to wrap the graphviz chart with the student's name
with st.expander(f"{student_name} Decision Tree", expanded=False):
st.graphviz_chart(tree_diagram.source)
# Generate Notes and Recommendations using LLM
if st.session_state.ai_recommendations is None:
with st.spinner("Generating MTSS.ai Analysis..."):
llm_input = ai_analysis.prepare_llm_input(student_metrics_df)
# recommendations = ai_analysis.prompt_response_from_hf_llm(llm_input)
recommendations = ai_analysis.prompt_response_from_mistral_llm(llm_input)
st.session_state.ai_recommendations = recommendations
# Display the recommendations
st.subheader("MTSS.ai Analysis")
# st.markdown(recommendations)
st.markdown(st.session_state.ai_recommendations)
# Download AI output
# ai_analysis.download_llm_output(recommendations, "MTSSai_Report.txt")
ai_analysis.download_llm_output(st.session_state.ai_recommendations, "MTSSai_Report.txt")
# Generate the PDF Report using the stored recommendations
report_gen = ReportGenerator()
combined_pdf = report_gen.create_combined_pdf(
intervention_fig,
student_metrics_fig,
st.session_state.ai_recommendations
)
# Add the download button for the PDF
st.download_button(
label="Download MTSS.ai Report (PDF)",
data=combined_pdf,
file_name="MTSSai_LIR_Report.pdf",
mime="application/pdf",
icon="📄",
use_container_width=True
)
except Exception as e:
st.error(f"Error processing the file: {str(e)}")
if __name__ == '__main__':
main()