drmurataltun commited on
Commit
41709cb
·
verified ·
1 Parent(s): 18f609a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -21
app.py CHANGED
@@ -1,9 +1,11 @@
1
  import gradio as gr
2
  import pandas as pd
 
 
3
 
4
  # Load the Excel files
5
- df_norm = pd.read_excel(r'norm_fazlasi.xlsx')
6
- df_ihtiyac = pd.read_excel(r'ihtiyac_data.xlsx')
7
 
8
  # Filter the DataFrame based on user input
9
  def filter_dataframe(ilce_values, brans_values, aciklama_values, include_empty_aciklama):
@@ -23,7 +25,6 @@ def filter_dataframe(ilce_values, brans_values, aciklama_values, include_empty_a
23
 
24
  # Calculate needs and norm excess per district
25
  def calculate_needs_and_norm(ilce_values, brans_values):
26
- # İlçeler ve branşlar üzerinde tam liste için filtrelenmiş veya tüm veri çerçevelerini kullan
27
  if ilce_values and "Tüm İlçeler" not in ilce_values:
28
  df_ihtiyac_filtered = df_ihtiyac[df_ihtiyac['ilçe'].isin(ilce_values)]
29
  df_norm_filtered = df_norm[df_norm['İlçe Adı'].isin(ilce_values)]
@@ -31,23 +32,19 @@ def calculate_needs_and_norm(ilce_values, brans_values):
31
  df_ihtiyac_filtered = df_ihtiyac
32
  df_norm_filtered = df_norm
33
 
34
- # Filtrelenen branşlar varsa uygula
35
  if brans_values:
36
  df_ihtiyac_filtered = df_ihtiyac_filtered[df_ihtiyac_filtered['branş'].isin(brans_values)]
37
- df_norm_filtered = df_norm_filtered[df_norm_filtered['Branşı'].isin(brans_values)]
38
 
39
- # Benzersiz ilçe ve branşları çıkar
40
  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()
41
  unique_brans_values = brans_values if brans_values else df_norm['Branşı'].unique().tolist()
42
 
43
- # Sonuçları doldur
44
  results = []
45
  for ilce in unique_ilce_values:
46
  df_ihtiyac_ilce = df_ihtiyac_filtered[df_ihtiyac_filtered['ilçe'] == ilce]
47
  df_norm_ilce = df_norm_filtered[df_norm_filtered['İlçe Adı'] == ilce]
48
 
49
  for brans in unique_brans_values:
50
- # İhtiyaçları ve norm fazlalarını hesapla
51
  total_needs = df_ihtiyac_ilce[df_ihtiyac_ilce['branş'] == brans]['ihtiyac'].sum() if not df_ihtiyac_ilce.empty else 0
52
  mazaretli_count = df_norm_ilce[(df_norm_ilce['Branşı'] == brans) & (df_norm_ilce['Açıklamalar'].notna())].shape[0]
53
  mazaretsiz_count = df_norm_ilce[(df_norm_ilce['Branşı'] == brans) & (df_norm_ilce['Açıklamalar'].isna())].shape[0]
@@ -60,10 +57,7 @@ def calculate_needs_and_norm(ilce_values, brans_values):
60
  'Norm Fazlası (Mazaretsiz)': mazaretsiz_count
61
  })
62
 
63
- # Sonuçları DataFrame olarak kaydet
64
  result_df = pd.DataFrame(results)
65
-
66
- # Toplamları hesapla
67
  total_needs_sum = result_df['Toplam İhtiyaç'].sum()
68
  total_mazaretli_sum = result_df['Norm Fazlası (Mazaretli)'].sum()
69
  total_mazaretsiz_sum = result_df['Norm Fazlası (Mazaretsiz)'].sum()
@@ -74,24 +68,45 @@ def calculate_needs_and_norm(ilce_values, brans_values):
74
 
75
  return result_df, summary_text
76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  # Define Gradio interface components
78
  with gr.Blocks() as demo:
79
  with gr.Tab("Antalya Norm Fazlası Öğretmenler"):
80
  ilce_choices = sorted(df_norm['İlçe Adı'].dropna().astype(str).unique().tolist())
81
- ilce_multiselect = gr.Dropdown(choices=["Tüm İlçeler"] + ilce_choices, label="İlçe Adı", multiselect=True)
82
- brans_multiselect = gr.Dropdown(choices=sorted(df_norm['Branşı'].dropna().unique().tolist()), label="Branş", multiselect=True)
83
  aciklama_choices = sorted(df_norm['Açıklamalar'].dropna().unique().tolist())
84
  aciklama_multiselect = gr.Dropdown(choices=aciklama_choices, label="Mazaretliler", multiselect=True)
85
- include_empty_aciklama = gr.Checkbox(label="Mazaretsizleri de listeye ekle")
86
 
87
- # Action button
88
  filter_button = gr.Button("Listele")
89
 
90
- # Output components
91
  record_count = gr.Textbox(label="Kişi Sayısı", interactive=False)
92
  output = gr.DataFrame()
93
-
94
- # Set up the interaction
95
  filter_button.click(fn=filter_dataframe, inputs=[ilce_multiselect, brans_multiselect, aciklama_multiselect, include_empty_aciklama], outputs=[output, record_count])
96
 
97
  with gr.Tab("İhtiyaç ve Norm Fazlası Analizi"):
@@ -99,15 +114,31 @@ with gr.Blocks() as demo:
99
  ilce_multiselect_ihtiyac = gr.Dropdown(choices=["Tüm İlçeler"] + ilce_choices_ihtiyac, label="Select İlçe Adı", multiselect=True)
100
  brans_multiselect_ihtiyac = gr.Dropdown(choices=sorted(df_ihtiyac['branş'].dropna().unique().tolist()), label="Select Branşı", multiselect=True)
101
 
102
- # Action button
103
  analyze_button = gr.Button("Analiz Et")
104
 
105
- # Output components
106
  analysis_record_count = gr.Textbox(label="Özet Bilgi", interactive=False)
107
  analysis_output = gr.DataFrame()
 
108
 
109
  # Set up the interaction
110
- analyze_button.click(fn=calculate_needs_and_norm, inputs=[ilce_multiselect_ihtiyac, brans_multiselect_ihtiyac], outputs=[analysis_output, analysis_record_count])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
 
112
  # Run the app
113
  demo.launch()
 
1
  import gradio as gr
2
  import pandas as pd
3
+ import matplotlib.pyplot as plt
4
+ import os
5
 
6
  # Load the Excel files
7
+ df_norm = pd.read_excel('norm_fazlasi.xlsx')
8
+ df_ihtiyac = pd.read_excel('ihtiyac_data.xlsx')
9
 
10
  # Filter the DataFrame based on user input
11
  def filter_dataframe(ilce_values, brans_values, aciklama_values, include_empty_aciklama):
 
25
 
26
  # Calculate needs and norm excess per district
27
  def calculate_needs_and_norm(ilce_values, brans_values):
 
28
  if ilce_values and "Tüm İlçeler" not in ilce_values:
29
  df_ihtiyac_filtered = df_ihtiyac[df_ihtiyac['ilçe'].isin(ilce_values)]
30
  df_norm_filtered = df_norm[df_norm['İlçe Adı'].isin(ilce_values)]
 
32
  df_ihtiyac_filtered = df_ihtiyac
33
  df_norm_filtered = df_norm
34
 
 
35
  if brans_values:
36
  df_ihtiyac_filtered = df_ihtiyac_filtered[df_ihtiyac_filtered['branş'].isin(brans_values)]
37
+ df_norm_filtered = df_norm_filtered[df_norm['Branşı'].isin(brans_values)]
38
 
 
39
  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()
40
  unique_brans_values = brans_values if brans_values else df_norm['Branşı'].unique().tolist()
41
 
 
42
  results = []
43
  for ilce in unique_ilce_values:
44
  df_ihtiyac_ilce = df_ihtiyac_filtered[df_ihtiyac_filtered['ilçe'] == ilce]
45
  df_norm_ilce = df_norm_filtered[df_norm_filtered['İlçe Adı'] == ilce]
46
 
47
  for brans in unique_brans_values:
 
48
  total_needs = df_ihtiyac_ilce[df_ihtiyac_ilce['branş'] == brans]['ihtiyac'].sum() if not df_ihtiyac_ilce.empty else 0
49
  mazaretli_count = df_norm_ilce[(df_norm_ilce['Branşı'] == brans) & (df_norm_ilce['Açıklamalar'].notna())].shape[0]
50
  mazaretsiz_count = df_norm_ilce[(df_norm_ilce['Branşı'] == brans) & (df_norm_ilce['Açıklamalar'].isna())].shape[0]
 
57
  'Norm Fazlası (Mazaretsiz)': mazaretsiz_count
58
  })
59
 
 
60
  result_df = pd.DataFrame(results)
 
 
61
  total_needs_sum = result_df['Toplam İhtiyaç'].sum()
62
  total_mazaretli_sum = result_df['Norm Fazlası (Mazaretli)'].sum()
63
  total_mazaretsiz_sum = result_df['Norm Fazlası (Mazaretsiz)'].sum()
 
68
 
69
  return result_df, summary_text
70
 
71
+ # Function to plot the results as a bar chart
72
+ def plot_results(df):
73
+ plt.figure(figsize=(14, 8)) # Grafik boyutunu artırıyoruz
74
+ df.groupby('İlçe')[['Toplam İhtiyaç', 'Norm Fazlası (Mazaretli)', 'Norm Fazlası (Mazaretsiz)']].sum().plot(kind='bar')
75
+ plt.title("İhtiyaç ve Norm Fazlası Dağılımı")
76
+ plt.xlabel("İlçe")
77
+ plt.ylabel("Sayı")
78
+ plt.xticks(rotation=45, ha="right") # Etiketleri biraz sağa yatırıyoruz
79
+ plt.tight_layout()
80
+ chart_path = 'bar_chart.png'
81
+ plt.savefig(chart_path)
82
+ return chart_path # Dosya yolunu döndür
83
+
84
+ # Function to filter "ihtiyac" data based on selected ilce and brans
85
+ def filter_ihtiyac_data(ilce_values, brans_values):
86
+ df_filtered = df_ihtiyac.copy()
87
+
88
+ if ilce_values and "Tüm İlçeler" not in ilce_values:
89
+ df_filtered = df_filtered[df_filtered['ilçe'].isin(ilce_values)]
90
+ if brans_values:
91
+ df_filtered = df_filtered[df_filtered['branş'].isin(brans_values)]
92
+
93
+ total_needs_sum = df_filtered['ihtiyac'].sum()
94
+ return df_filtered, f"Toplam İhtiyaç: {total_needs_sum}"
95
+
96
  # Define Gradio interface components
97
  with gr.Blocks() as demo:
98
  with gr.Tab("Antalya Norm Fazlası Öğretmenler"):
99
  ilce_choices = sorted(df_norm['İlçe Adı'].dropna().astype(str).unique().tolist())
100
+ ilce_multiselect = gr.Dropdown(choices=["Tüm İlçeler"] + ilce_choices, label="Select İlçe Adı", multiselect=True)
101
+ brans_multiselect = gr.Dropdown(choices=sorted(df_norm['Branşı'].dropna().unique().tolist()), label="Select Branşı", multiselect=True)
102
  aciklama_choices = sorted(df_norm['Açıklamalar'].dropna().unique().tolist())
103
  aciklama_multiselect = gr.Dropdown(choices=aciklama_choices, label="Mazaretliler", multiselect=True)
104
+ include_empty_aciklama = gr.Checkbox(label="Mazaretsizleri de ekle")
105
 
 
106
  filter_button = gr.Button("Listele")
107
 
 
108
  record_count = gr.Textbox(label="Kişi Sayısı", interactive=False)
109
  output = gr.DataFrame()
 
 
110
  filter_button.click(fn=filter_dataframe, inputs=[ilce_multiselect, brans_multiselect, aciklama_multiselect, include_empty_aciklama], outputs=[output, record_count])
111
 
112
  with gr.Tab("İhtiyaç ve Norm Fazlası Analizi"):
 
114
  ilce_multiselect_ihtiyac = gr.Dropdown(choices=["Tüm İlçeler"] + ilce_choices_ihtiyac, label="Select İlçe Adı", multiselect=True)
115
  brans_multiselect_ihtiyac = gr.Dropdown(choices=sorted(df_ihtiyac['branş'].dropna().unique().tolist()), label="Select Branşı", multiselect=True)
116
 
 
117
  analyze_button = gr.Button("Analiz Et")
118
 
 
119
  analysis_record_count = gr.Textbox(label="Özet Bilgi", interactive=False)
120
  analysis_output = gr.DataFrame()
121
+ analysis_chart = gr.Image() # Görselleştirme için resim bileşeni ekliyoruz
122
 
123
  # Set up the interaction
124
+ def analyze_and_plot(ilce_values, brans_values):
125
+ result_df, summary_text = calculate_needs_and_norm(ilce_values, brans_values)
126
+ chart_path = plot_results(result_df)
127
+ return result_df, summary_text, chart_path
128
+
129
+ analyze_button.click(fn=analyze_and_plot, inputs=[ilce_multiselect_ihtiyac, brans_multiselect_ihtiyac], outputs=[analysis_output, analysis_record_count, analysis_chart])
130
+
131
+ with gr.Tab("İhtiyaç Verisi Filtreleme"):
132
+ ilce_multiselect_ihtiyac_filter = gr.Dropdown(choices=["Tüm İlçeler"] + ilce_choices_ihtiyac, label="İlçe Adı", multiselect=True)
133
+ brans_multiselect_ihtiyac_filter = gr.Dropdown(choices=sorted(df_ihtiyac['branş'].dropna().unique().tolist()), label="Branş", multiselect=True)
134
+
135
+ filter_ihtiyac_button = gr.Button("Filtrele")
136
+
137
+ ihtiyac_total_count = gr.Textbox(label="Toplam İhtiyaç", interactive=False)
138
+ ihtiyac_output = gr.DataFrame()
139
+
140
+ # Set up the interaction for the third tab
141
+ filter_ihtiyac_button.click(fn=filter_ihtiyac_data, inputs=[ilce_multiselect_ihtiyac_filter, brans_multiselect_ihtiyac_filter], outputs=[ihtiyac_output, ihtiyac_total_count])
142
 
143
  # Run the app
144
  demo.launch()