import gradio as gr import pandas as pd import matplotlib.pyplot as plt # 직원 데이터를 분석하여 교육 프로그램을 추천하고 결과를 시각화하는 함수 def analyze_data(employee_file, program_file): # 직원 데이터와 교육 프로그램 데이터 불러오기 employee_df = pd.read_csv(employee_file.name) program_df = pd.read_csv(program_file.name) # 직원별 추천 프로그램 리스트 recommendations = [] for _, employee in employee_df.iterrows(): recommended_programs = [] for _, program in program_df.iterrows(): # 직원의 현재 역량과 학습 목표를 기반으로 적합한 프로그램을 추천 if any(skill in program['skills_acquired'] for skill in employee['current_skills'].split(',')) or \ employee['learning_goal'] in program['learning_objectives']: recommended_programs.append(f"{program['program_name']} ({program['duration']})") if recommended_programs: recommendation = f"직원 {employee['employee_name']}의 추천 프로그램: {', '.join(recommended_programs)}" else: recommendation = f"직원 {employee['employee_name']}에게 적합한 프로그램이 없습니다." recommendations.append(recommendation) # 결과를 텍스트로 반환 result_text = "\n".join(recommendations) # 시각화용 차트 생성 plt.figure(figsize=(8, 4)) employee_roles = employee_df['current_role'].value_counts() employee_roles.plot(kind='bar', color='skyblue') plt.title('직원별 현재 직무 분포') plt.xlabel('직무') plt.ylabel('직원 수') # 차트를 반환 plt.tight_layout() return result_text, plt.gcf() # Gradio 인터페이스 정의 def main(employee_file, program_file): return analyze_data(employee_file, program_file) # 사이드바에서 파일 업로드 기능 구현 with gr.Blocks() as demo: with gr.Row(): with gr.Column(scale=1): gr.Markdown("# HybridRAG 시스템") gr.Markdown("두 개의 CSV 파일을 업로드하여 분석을 진행하세요.") employee_file = gr.File(label="직원 데이터 업로드") program_file = gr.File(label="교육 프로그램 데이터 업로드") analyze_button = gr.Button("분석 시작") output_text = gr.Textbox(label="분석 결과") analyze_button.click(main, inputs=[employee_file, program_file], outputs=[output_text]) with gr.Column(scale=2): gr.Markdown("### 정보 패널") gr.Markdown("업로드된 데이터에 대한 분석 및 결과를 여기에 표시합니다.") # 시각화 차트 출력 chart_output = gr.Plot(label="시각화 차트") # 분석 버튼 클릭 시 차트 업데이트 analyze_button.click(main, inputs=[employee_file, program_file], outputs=[output_text, chart_output]) # Gradio 인터페이스 실행 demo.launch()