File size: 10,776 Bytes
ae745bf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5fdb80c
ae745bf
 
5fdb80c
ae745bf
 
 
 
 
 
 
 
 
 
 
164ace4
ae745bf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5fdb80c
ae745bf
 
 
 
 
 
 
 
 
 
 
8a1f7ab
99cc5d4
8a1f7ab
 
32194d1
 
99cc5d4
8a1f7ab
2e18d59
99cc5d4
 
 
235d58f
 
ae745bf
 
 
30fc8e3
 
ae745bf
 
 
 
 
30fc8e3
9ab8d38
 
 
 
30fc8e3
ae745bf
e3c6dbc
8a1f7ab
 
 
 
 
 
 
 
 
 
ae745bf
 
 
 
 
 
 
 
 
 
 
 
 
 
e3c6dbc
ae745bf
a3940e8
ae745bf
 
 
 
 
 
 
 
 
d5e228f
c8a19df
788d0b9
 
ae745bf
 
 
dcbfd6c
ae745bf
 
 
 
 
 
 
 
817cb35
ae745bf
 
d96b35d
ae745bf
5fdb80c
ae745bf
 
 
5fdb80c
ae745bf
 
 
 
 
 
 
 
 
 
 
 
 
 
817cb35
ae745bf
 
 
 
 
 
 
817cb35
ae745bf
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
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)