| 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() |