import gradio as gr import pandas as pd # Load the Excel files df_norm = pd.read_excel(r'norm_fazlasi.xlsx') df_ihtiyac = pd.read_excel(r'ihtiyac_data.xlsx') # Filter the DataFrame based on user input def filter_dataframe(ilce_values, brans_values, aciklama_values, include_empty_aciklama): df = df_norm.copy() # Apply filters if values are provided if ilce_values and "Tüm İlçeler" not in ilce_values: df = df[df['İlçe Adı'].isin(ilce_values)] if brans_values: df = df[df['Branşı'].isin(brans_values)] if aciklama_values: df = df[df['Açıklamalar'].isin(aciklama_values)] if include_empty_aciklama: df = pd.concat([df, df[df['Açıklamalar'].isna()]]).drop_duplicates() return df, f"Kayıt Sayısı: {len(df)}" # Calculate needs and norm excess per district def calculate_needs_and_norm(ilce_values, brans_values): # İlçeler ve branşlar üzerinde tam liste için filtrelenmiş veya tüm veri çerçevelerini kullan if ilce_values and "Tüm İlçeler" not in ilce_values: df_ihtiyac_filtered = df_ihtiyac[df_ihtiyac['ilçe'].isin(ilce_values)] df_norm_filtered = df_norm[df_norm['İlçe Adı'].isin(ilce_values)] else: df_ihtiyac_filtered = df_ihtiyac df_norm_filtered = df_norm # Filtrelenen branşlar varsa uygula if brans_values: df_ihtiyac_filtered = df_ihtiyac_filtered[df_ihtiyac_filtered['branş'].isin(brans_values)] df_norm_filtered = df_norm_filtered[df_norm_filtered['Branşı'].isin(brans_values)] # Benzersiz ilçe ve branşları çıkar unique_ilce_values = ilce_values if ilce_values and "Tüm İlçeler" not in ilce_values else df_norm['İlçe Adı'].unique().tolist() unique_brans_values = brans_values if brans_values else df_norm['Branşı'].unique().tolist() # Sonuçları doldur results = [] for ilce in unique_ilce_values: df_ihtiyac_ilce = df_ihtiyac_filtered[df_ihtiyac_filtered['ilçe'] == ilce] df_norm_ilce = df_norm_filtered[df_norm_filtered['İlçe Adı'] == ilce] for brans in unique_brans_values: # İhtiyaçları ve norm fazlalarını hesapla total_needs = df_ihtiyac_ilce[df_ihtiyac_ilce['branş'] == brans]['ihtiyac'].sum() if not df_ihtiyac_ilce.empty else 0 mazaretli_count = df_norm_ilce[(df_norm_ilce['Branşı'] == brans) & (df_norm_ilce['Açıklamalar'].notna())].shape[0] mazaretsiz_count = df_norm_ilce[(df_norm_ilce['Branşı'] == brans) & (df_norm_ilce['Açıklamalar'].isna())].shape[0] results.append({ 'İlçe': ilce, 'Branş': brans, 'Toplam İhtiyaç': total_needs, 'Norm Fazlası (Mazaretli)': mazaretli_count, 'Norm Fazlası (Mazaretsiz)': mazaretsiz_count }) # Sonuçları DataFrame olarak kaydet result_df = pd.DataFrame(results) # Toplamları hesapla total_needs_sum = result_df['Toplam İhtiyaç'].sum() total_mazaretli_sum = result_df['Norm Fazlası (Mazaretli)'].sum() total_mazaretsiz_sum = result_df['Norm Fazlası (Mazaretsiz)'].sum() summary_text = (f"Toplam İhtiyaç: {total_needs_sum} | " f"Toplam Norm Fazlası (Mazaretli): {total_mazaretli_sum} | " f"Toplam Norm Fazlası (Mazaretsiz): {total_mazaretsiz_sum}") return result_df, summary_text # Define Gradio interface components with gr.Blocks() as demo: with gr.Tab("Antalya Norm Fazlası Öğretmenler"): ilce_choices = sorted(df_norm['İlçe Adı'].dropna().astype(str).unique().tolist()) ilce_multiselect = gr.Dropdown(choices=["Tüm İlçeler"] + ilce_choices, label="İlçe Adı", multiselect=True) brans_multiselect = gr.Dropdown(choices=sorted(df_norm['Branşı'].dropna().unique().tolist()), label="Branş", multiselect=True) aciklama_choices = sorted(df_norm['Açıklamalar'].dropna().unique().tolist()) aciklama_multiselect = gr.Dropdown(choices=aciklama_choices, label="Mazaretliler", multiselect=True) include_empty_aciklama = gr.Checkbox(label="Mazaretsizleri de listeye ekle") # Action button filter_button = gr.Button("Listele") # Output components record_count = gr.Textbox(label="Kişi Sayısı", interactive=False) output = gr.DataFrame() # Set up the interaction filter_button.click(fn=filter_dataframe, inputs=[ilce_multiselect, brans_multiselect, aciklama_multiselect, include_empty_aciklama], outputs=[output, record_count]) with gr.Tab("İhtiyaç ve Norm Fazlası Analizi"): ilce_choices_ihtiyac = sorted(df_ihtiyac['ilçe'].dropna().astype(str).unique().tolist()) ilce_multiselect_ihtiyac = gr.Dropdown(choices=["Tüm İlçeler"] + ilce_choices_ihtiyac, label="Select İlçe Adı", multiselect=True) brans_multiselect_ihtiyac = gr.Dropdown(choices=sorted(df_ihtiyac['branş'].dropna().unique().tolist()), label="Select Branşı", multiselect=True) # Action button analyze_button = gr.Button("Analiz Et") # Output components analysis_record_count = gr.Textbox(label="Özet Bilgi", interactive=False) analysis_output = gr.DataFrame() # Set up the interaction analyze_button.click(fn=calculate_needs_and_norm, inputs=[ilce_multiselect_ihtiyac, brans_multiselect_ihtiyac], outputs=[analysis_output, analysis_record_count]) # Run the app demo.launch()