Spaces:
Sleeping
Sleeping
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) | |