# import streamlit as st # from app_config import AppConfig # Import the configerations 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 # def main(): # # Initialize the app configuration # app_config = AppConfig() # # 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("Intervention Program Analysis") # # 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) # st.subheader("Uploaded Data") # st.write(df) # # Ensure expected column is available # if DataProcessor.INTERVENTION_COLUMN not in df.columns: # st.error(f"Expected column '{DataProcessor.INTERVENTION_COLUMN}' not found.") # return # # Compute Intervention Session Statistics # intervention_stats = data_processor.compute_intervention_statistics(df) # st.subheader("Intervention Session Statistics") # st.write(intervention_stats) # # Plot and download intervention statistics # intervention_fig = visualization.plot_intervention_statistics(intervention_stats) # visualization.download_chart(intervention_fig, "intervention_statistics_chart.png") # # Compute Student Metrics # student_metrics_df = data_processor.compute_student_metrics(df) # st.subheader("Student Metrics") # 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") # # Prepare input for the language model # llm_input = ai_analysis.prepare_llm_input(student_metrics_df) # # Generate Notes and Recommendations using Hugging Face LLM # with st.spinner("Generating AI analysis..."): # recommendations = ai_analysis.prompt_response_from_hf_llm(llm_input) # st.subheader("AI Analysis") # st.markdown(recommendations) # # Download AI output # ai_analysis.download_llm_output(recommendations, "llm_output.txt") # except Exception as e: # st.error(f"Error reading the file: {str(e)}") # if __name__ == '__main__': # main() import streamlit as st 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 def main(): # Initialize the app configuration app_config = AppConfig() # 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("Intervention Program Analysis") # 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) st.subheader("Uploaded Data") st.write(df) # Ensure expected column is available if DataProcessor.INTERVENTION_COLUMN not in df.columns: st.error(f"Expected column '{DataProcessor.INTERVENTION_COLUMN}' not found.") return # Compute Intervention Session Statistics intervention_stats = data_processor.compute_intervention_statistics(df) st.subheader("Intervention Session Statistics") st.write(intervention_stats) # Plot and download intervention statistics intervention_fig = visualization.plot_intervention_statistics(intervention_stats) visualization.download_chart(intervention_fig, "intervention_statistics_chart.png") # Compute Student Metrics student_metrics_df = data_processor.compute_student_metrics(df) st.subheader("Student Metrics") 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) st.graphviz_chart(tree_diagram.source) # Prepare input for the language model llm_input = ai_analysis.prepare_llm_input(student_metrics_df) # Generate Notes and Recommendations using Hugging Face LLM with st.spinner("Generating AI analysis..."): recommendations = ai_analysis.prompt_response_from_hf_llm(llm_input) st.subheader("AI Analysis") st.markdown(recommendations) # Download AI output ai_analysis.download_llm_output(recommendations, "llm_output.txt") except Exception as e: st.error(f"Error processing the file: {str(e)}") if __name__ == '__main__': main()