import gradio as gr import pandas as pd import matplotlib.pyplot as plt ihtiyac_df = pd.read_excel("ihtiyac_data.xlsx") fazla_df = pd.read_excel("norm_fazlasi.xlsx") # Branşlar listesi branşlar = fazla_df['Branşı'].unique().tolist() # Fazla öğretmen sayısını hesaplama fazla_ogretmen = fazla_df.groupby('Branşı').size().reset_index(name='fazla_sayisi') # Branşa göre ihtiyaçların toplamını hesaplama branş_ihtiyac_df = ihtiyac_df.groupby('branş', as_index=False)['ihtiyac'].sum() # Fazla öğretmen ve ihtiyaç verisini birleştirme merged_df = pd.merge(branş_ihtiyac_df, fazla_ogretmen, left_on='branş', right_on='Branşı', how='left') merged_df['fazla_sayisi'] = merged_df['fazla_sayisi'].fillna(0) merged_df['kalan_ihtiyac'] = merged_df['ihtiyac'] - merged_df['fazla_sayisi'] merged_df['kalan_ihtiyac'] = merged_df['kalan_ihtiyac'].apply(lambda x: max(x, 0)) merged_df['ucretli_ihtiyaci'] = merged_df['kalan_ihtiyac'] # Hizmet bölgelerine göre toplam ihtiyaç hesaplama hizmet_bolgesi_ihtiyac_df = ihtiyac_df.groupby('hizmet_bolgesi', as_index=False)['ihtiyac'].sum() # Fazla öğretmen verisini hizmet bölgesine göre gruplayarak hesapla fazla_bolgesi_df = fazla_df.groupby('HizmetPuanı').size().reset_index(name='fazla_sayisi') # Verileri birleştir merged_bolge_df = pd.merge(hizmet_bolgesi_ihtiyac_df, fazla_bolgesi_df, left_on='hizmet_bolgesi', right_on='HizmetPuanı', how='left') # Fazla öğretmen olmayan bölgeler için 0 atama merged_bolge_df['fazla_sayisi'] = merged_bolge_df['fazla_sayisi'].fillna(0) # Kalan ihtiyaçları hesaplama merged_bolge_df['kalan_ihtiyac'] = merged_bolge_df['ihtiyac'] - merged_bolge_df['fazla_sayisi'] merged_bolge_df['kalan_ihtiyac'] = merged_bolge_df['kalan_ihtiyac'].apply(lambda x: max(x, 0)) # Hizmet bölgesine göre kalan ihtiyaçları sırala merged_bolge_df_sorted = merged_bolge_df.sort_values(by='kalan_ihtiyac', ascending=True) def hizmet_bolgesine_gore_eksik_ogretmen(branş): # Seçilen branşın verilerini filtrele branş_ihtiyac_df = ihtiyac_df[ihtiyac_df['branş'] == branş] # Her bir hizmet bölgesinde ihtiyaçları grupla hizmet_bolgesi_ihtiyac_df = branş_ihtiyac_df.groupby('hizmet_bolgesi', as_index=False)['ihtiyac'].sum() # Grafik oluşturma fig, ax = plt.subplots(figsize=(10, 6)) hizmet_bolgesi_ihtiyac_df.plot(kind='bar', x='hizmet_bolgesi', y='ihtiyac', ax=ax, color='green') ax.set_title(f"{branş} Branşı İçin Hizmet Bölgelerinde İhtiyaç Dağılımı") ax.set_ylabel("İhtiyaç Sayısı") ax.set_xlabel("Hizmet Bölgesi") plt.tight_layout() # Grafik döndürme return hizmet_bolgesi_ihtiyac_df[['hizmet_bolgesi', 'ihtiyac']], fig # Ücretli öğretmen hesaplama fonksiyonu def ucretli_ogretmenler(branş): # Seçilen branşın verilerini çekme branş_veri = merged_df[merged_df['branş'] == branş] if branş_veri.empty: return "Bu branş için veri bulunamadı.", None ihtiyac = int(branş_veri['ihtiyac'].values[0]) fazla_sayisi = int(branş_veri['fazla_sayisi'].values[0]) ucretli_ihtiyaci = int(branş_veri['ucretli_ihtiyaci'].values[0]) # Grafik oluşturma fig, ax = plt.subplots() ax.bar(['İhtiyaç', 'Fazla Sayısı', 'Ücretli İhtiyacı'], [ihtiyac, fazla_sayisi, ucretli_ihtiyaci], color=['blue', 'orange', 'green']) ax.set_title(f"{branş} Branşı Analizi") ax.set_ylabel("Sayı") ax.set_xlabel("Kategoriler") plt.tight_layout() return (f"Seçilen Branş: {branş}\n\n" f"İhtiyaç: {ihtiyac}\n" f"Fazla Sayısı: {fazla_sayisi}\n" f"Ücretli İhtiyacı: {ucretli_ihtiyaci}"), fig def clear(): return '', None def en_fazla_hizmet_puani_ogretmeni_bul(): # Hizmet puanlarına göre en yüksek olanı bul max_hizmet_puani = fazla_df['HizmetPuanı'].max() # En yüksek hizmet puanına sahip öğretmen ve branşını bul en_yuksek_puan_ogretmen = fazla_df[fazla_df['HizmetPuanı'] == max_hizmet_puani] # Sonuçları döndür if not en_yuksek_puan_ogretmen.empty: return f"En fazla hizmet puanına sahip öğretmen: {en_yuksek_puan_ogretmen['Adı'].values[0]}\nBranşı: {en_yuksek_puan_ogretmen['Branşı'].values[0]}\nHizmet Puanı: {max_hizmet_puani}" else: return "Veri bulunamadı." # Hizmet puanına göre sıralama def hizmet_puanina_gore_sirala(branş): branş_df = fazla_df[fazla_df['Branşı'] == branş] # Hizmet puanına göre sıralama branş_df_sorted = branş_df.sort_values(by='HizmetPuanı', ascending=False) # Sonuçları döndür return branş_df_sorted[['Adı', 'HizmetPuanı']] def kac_okul_var(): egitim_seviyeleri = ['anaokulu', 'ilkokul', 'ortaokul', 'lise'] # Eğitim seviyelerine göre kurumları sayma kurum_sayisi = {} for egitim_seviyesi in egitim_seviyeleri: # Eğitim seviyesine göre filtreleme filtrelenmis_kurumlar = ihtiyac_df[ihtiyac_df['okul'].str.contains(egitim_seviyesi, case=False, na=False)] kurum_sayisi[egitim_seviyesi] = filtrelenmis_kurumlar.shape[0] # Pasta grafiği için verileri hazırlama labels = list(kurum_sayisi.keys()) sizes = list(kurum_sayisi.values()) # Grafik başlığı fig, ax = plt.subplots(figsize=(7,7)) ax.set_title('Eğitim Seviyelerine Göre Kurum Dağılımı') # Pasta grafiği oluşturma ax.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90, colors=['#ff9999','#66b3ff','#99ff99','#ffcc99']) ax.axis('equal') # Dairesel # Sonuçları formatlı bir şekilde döndürme sonuc = "Eğitim Seviyelerine Göre Kurum Sayıları:\n" for egitim_seviyesi, sayi in kurum_sayisi.items(): sonuc += f"{egitim_seviyesi.capitalize()}: {sayi} kurum\n" return sonuc, fig def birinci_hizmet_bolgesi_okullari(branş): # Hizmet bölgesi 4 olan ve belirtilen branşa uyan okulları filtrele birinci_hizmet_bolgesi_okullari = ihtiyac_df[ (ihtiyac_df['hizmet_bolgesi'] == 1) & (ihtiyac_df['branş'] == branş) ]['okul'] # DataFrame'e dönüştür birinci_hizmet_bolgesi_df = pd.DataFrame(birinci_hizmet_bolgesi_okullari, columns=['okul']) # Sonucu döndür return dorduncu_hizmet_bolgesi_df def ikinci_hizmet_bolgesi_okullari(): # 1. hizmet bölgesine ait okulları filtreleyip, sadece okul isimlerini almak ikinci_hizmet_bolgesi_okullari = ihtiyac_df[ihtiyac_df['hizmet_bolgesi'] == 2]['okul'] ikinci_hizmet_bolgesi_df = pd.DataFrame(ikinci_hizmet_bolgesi_okullari) return ikinci_hizmet_bolgesi_df def ucuncu_hizmet_bolgesi_okullari(): # 1. hizmet bölgesine ait okulları filtreleyip, sadece okul isimlerini almak ucuncu_hizmet_bolgesi_okullari = ihtiyac_df[ihtiyac_df['hizmet_bolgesi'] == 3]['okul'] ucuncu_hizmet_bolgesi_df = pd.DataFrame(ucuncu_hizmet_bolgesi_okullari) # Tüm satır ve sütunların görünmesini sağlama pd.set_option('display.max_rows', None) # Tüm satırları göster pd.set_option('display.max_columns', None) # Tüm sütunları göster return ucuncu_hizmet_bolgesi_df def dorduncu_hizmet_bolgesi_okullari(branş): # Hizmet bölgesi 4 olan ve belirtilen branşa uyan okulları filtrele dorduncu_hizmet_bolgesi_okullari = ihtiyac_df[ (ihtiyac_df['hizmet_bolgesi'] == 4) & (ihtiyac_df['branş'] == branş) ]['okul'] # DataFrame'e dönüştür dorduncu_hizmet_bolgesi_df = pd.DataFrame(dorduncu_hizmet_bolgesi_okullari, columns=['okul']) # Sonucu döndür return dorduncu_hizmet_bolgesi_df # Gradio arayüzü def gradio_ui(): with gr.Blocks() as demo: gr.Markdown("# Öğretmen Analiz ") gr.Markdown("Bir işlem seçin ") # Branş Seçimi branş_seçimi = gr.Dropdown(choices=branşlar, label="Branş Seçin") # Butonlar with gr.Row(): ucretli_button = gr.Button("Branş Bazında Ücretli Öğretmen İhtiyaç Analizi", elem_id="ucretli_button") hizmet_puani_button = gr.Button("Branş Bazında Hizmet Puanına Göre Sıralama", elem_id="hizmet_puani_button") hizmet_bolgesi_button = gr.Button("Hizmet Bölgesine Göre Öğretmen İhtiyaç Analizi", elem_id="hizmet_bolgesi_button") with gr.Row(): en_fazla_hizmet_puani_button = gr.Button("En Fazla Hizmet Puanına Sahip Öğretmeni Bul", elem_id="en_fazla_hizmet_puani_button") with gr.Row(): kac_okul_button = gr.Button("Tüm Eğitim Kademelerinde Kaç Okul Var?", elem_id="kac_okul_button") with gr.Row(): birinci_hizmet_bolgesi_button=gr.Button("1.Hizmet Bölgesinde İhtiyaç Olan Okullar",elem_id="birinci_hizmet_bolgesi_button") ikinci_hizmet_bolgesi_button=gr.Button("2.Hizmet Bölgesinde İhtiyaç Olan Okullar",elem_id="ikinci_hizmet_bolgesi_button") ucuncu_hizmet_bolgesi_button=gr.Button("3.Hizmet Bölgesinde İhtiyaç Olan Okullar",elem_id="ucuncu_hizmet_bolgesi_button") dorduncu_hizmet_bolgesi_button=gr.Button("4.Hizmet Bölgesinde İhtiyaç Olan Okullar",elem_id="dorduncu_hizmet_bolgesi_button") with gr.Row(): clear_button = gr.Button("Temizle", elem_id="clear_button") # Sonuçları göstermek sonuç_text = gr.Textbox(label="Sonuçlar") grafik = gr.Plot(label=" Grafik") # İşlem butonları ucretli_button.click(ucretli_ogretmenler, inputs=[branş_seçimi], outputs=[sonuç_text, grafik]) hizmet_puani_button.click(hizmet_puanina_gore_sirala, inputs=[branş_seçimi], outputs=sonuç_text) hizmet_bolgesi_button.click(hizmet_bolgesine_gore_eksik_ogretmen, inputs=[branş_seçimi], outputs=[sonuç_text, grafik]) en_fazla_hizmet_puani_button.click(en_fazla_hizmet_puani_ogretmeni_bul, inputs=[], outputs=sonuç_text) kac_okul_button.click(kac_okul_var,inputs=[],outputs=[sonuç_text,grafik]) birinci_hizmet_bolgesi_button.click(birinci_hizmet_bolgesi_okullari,inputs=[],outputs=[sonuç_text]) ikinci_hizmet_bolgesi_button.click(ikinci_hizmet_bolgesi_okullari,inputs=[],outputs=[sonuç_text]) ucuncu_hizmet_bolgesi_button.click(ucuncu_hizmet_bolgesi_okullari,inputs=[],outputs=[sonuç_text]) dorduncu_hizmet_bolgesi_button.click(dorduncu_hizmet_bolgesi_okullari,inputs=[],outputs=[sonuç_text]) clear_button.click(clear, inputs=[], outputs=[sonuç_text, grafik]) return demo demo = gradio_ui() demo.launch(share=True)