| | import streamlit as st |
| | import pandas as pd |
| | from app_config import AppConfig |
| | from data_processor import DataProcessor |
| | from visualization import Visualization |
| | from ai_analysis import AIAnalysis |
| | from sidebar import Sidebar |
| | from report import ReportGenerator |
| |
|
| | |
| |
|
| | def main(): |
| | |
| | app_config = AppConfig() |
| |
|
| | |
| | sidebar = Sidebar() |
| | sidebar.display() |
| |
|
| | |
| | data_processor = DataProcessor() |
| |
|
| | |
| | visualization = Visualization() |
| |
|
| | |
| | ai_analysis = AIAnalysis(data_processor.client) |
| |
|
| | st.title("Literacy Implementation Record Data Analysis") |
| |
|
| | |
| | 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_option = st.radio( |
| | "Select data range:", |
| | ("All Data", "Date Range") |
| | ) |
| |
|
| | |
| | start_date = None |
| | end_date = None |
| |
|
| | if date_option == "Date Range": |
| | |
| | start_date = st.date_input("Start Date") |
| | end_date = st.date_input("End Date") |
| |
|
| | |
| | if start_date > end_date: |
| | st.error("Start date must be before end date.") |
| | return |
| |
|
| | |
| | uploaded_file = st.file_uploader("Upload your Excel file", type=["xlsx"]) |
| |
|
| | if uploaded_file is not None: |
| | try: |
| | |
| | df = data_processor.read_excel(uploaded_file) |
| |
|
| | |
| | df = data_processor.format_session_data(df) |
| |
|
| | |
| | df = data_processor.replace_student_names_with_initials(df) |
| |
|
| | |
| | if date_option == "Date Range": |
| | |
| | start_date = pd.to_datetime(start_date).date() |
| | end_date = pd.to_datetime(end_date).date() |
| |
|
| | |
| | date_column = next((col for col in df.columns if col in ["Date of Session", "Date"]), None) |
| | if date_column: |
| | |
| | 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) |
| |
|
| | |
| | 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 |
| |
|
| | |
| | intervention_stats = data_processor.compute_intervention_statistics(df) |
| | st.subheader("Intervention Dosage") |
| | st.write(intervention_stats) |
| |
|
| | |
| | col1, col2 = st.columns([3, 1]) |
| |
|
| | with col1: |
| | intervention_fig = visualization.plot_intervention_statistics(intervention_stats) |
| |
|
| | with col2: |
| | intervention_frequency = intervention_stats['Intervention Dosage (%)'].values[0] |
| | |
| | st.markdown("<h3 style='color: #358E66;'>Intervention Dosage</h3>", unsafe_allow_html=True) |
| | |
| | st.markdown(f"<h1 style='color: #358E66;'>{intervention_frequency}%</h1>", unsafe_allow_html=True) |
| |
|
| | visualization.download_chart(intervention_fig, "intervention_statistics_chart.png") |
| |
|
| | |
| | student_metrics_df = data_processor.compute_student_metrics(df) |
| | st.subheader("Student Attendance and Engagement") |
| | st.write(student_metrics_df) |
| |
|
| | |
| | attendance_avg_stats, engagement_avg_stats = data_processor.compute_average_metrics(student_metrics_df) |
| |
|
| | |
| | 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") |
| |
|
| | |
| | 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']]) |
| |
|
| | |
| | for index, row in student_metrics_df.iterrows(): |
| | tree_diagram = visualization.build_tree_diagram(row) |
| |
|
| | |
| | student_name = row['Student'] |
| |
|
| | |
| | with st.expander(f"{student_name} Decision Tree", expanded=False): |
| | st.graphviz_chart(tree_diagram.source) |
| |
|
| | |
| | llm_input = ai_analysis.prepare_llm_input(student_metrics_df) |
| |
|
| | |
| | with st.spinner("Generating AI analysis..."): |
| | |
| | recommendations = ai_analysis.prompt_response_from_mistral_llm(llm_input) |
| |
|
| | st.subheader("AI Analysis") |
| | st.markdown(recommendations) |
| |
|
| | |
| | ai_analysis.download_llm_output(recommendations, "llm_output.txt") |
| |
|
| | |
| | report_gen = ReportGenerator() |
| | combined_pdf = report_gen.create_combined_pdf(intervention_fig, student_metrics_fig, recommendations) |
| | |
| | |
| | st.download_button( |
| | label="Download Combined Report (PDF)", |
| | data=combined_pdf, |
| | file_name="combined_report.pdf", |
| | mime="application/pdf", |
| | icon="📄" |
| | ) |
| |
|
| | except Exception as e: |
| | st.error(f"Error processing the file: {str(e)}") |
| |
|
| | if __name__ == '__main__': |
| | main() |