drmurataltun commited on
Commit
6cf2768
·
verified ·
1 Parent(s): 088b7ad

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +113 -104
app.py CHANGED
@@ -1,104 +1,113 @@
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):
10
- df = df_norm.copy()
11
-
12
- # Apply filters if values are provided
13
- if ilce_values and "Tüm İlçeler" not in ilce_values:
14
- df = df[df['İlçe Adı'].isin(ilce_values)]
15
- if brans_values:
16
- df = df[df['Branşı'].isin(brans_values)]
17
- if aciklama_values:
18
- df = df[df['Açıklamalar'].isin(aciklama_values)]
19
- if include_empty_aciklama:
20
- df = pd.concat([df, df[df['Açıklamalar'].isna()]]).drop_duplicates()
21
-
22
- return df, f"Kayıt Sayısı: {len(df)}"
23
-
24
- # Calculate needs and norm excess per district
25
- def calculate_needs_and_norm(ilce_values, brans_values):
26
- if ilce_values and "Tüm İlçeler" not in ilce_values:
27
- df_ihtiyac_filtered = df_ihtiyac[df_ihtiyac['ilçe'].isin(ilce_values)]
28
- df_norm_filtered = df_norm[df_norm['İlçe Adı'].isin(ilce_values)]
29
- else:
30
- df_ihtiyac_filtered = df_ihtiyac
31
- df_norm_filtered = df_norm
32
-
33
- if brans_values:
34
- df_ihtiyac_filtered = df_ihtiyac_filtered[df_ihtiyac_filtered['branş'].isin(brans_values)]
35
- df_norm_filtered = df_norm_filtered[df_norm_filtered['Branşı'].isin(brans_values)]
36
-
37
- results = []
38
- if ilce_values and "Tüm İlçeler" not in ilce_values:
39
- unique_ilce_values = ilce_values
40
- else:
41
- unique_ilce_values = df_ihtiyac_filtered['ilçe'].unique().tolist()
42
-
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
- if brans_values:
48
- unique_brans_values = brans_values
49
- else:
50
- unique_brans_values = df_ihtiyac_ilce['branş'].unique().tolist()
51
-
52
- for brans in unique_brans_values:
53
- total_needs = df_ihtiyac_ilce[df_ihtiyac_ilce['branş'] == brans]['ihtiyac'].sum()
54
- mazaretli_count = df_norm_ilce[(df_norm_ilce['Branşı'] == brans) & (df_norm_ilce['Açıklamalar'].notna())].shape[0]
55
- mazaretsiz_count = df_norm_ilce[(df_norm_ilce['Branşı'] == brans) & (df_norm_ilce['Açıklamalar'].isna())].shape[0]
56
-
57
- results.append({
58
- 'İlçe': ilce,
59
- 'Branş': brans,
60
- 'Toplam İhtiyaç': total_needs,
61
- 'Norm Fazlası (Mazaretli)': mazaretli_count,
62
- 'Norm Fazlası (Mazaretsiz)': mazaretsiz_count
63
- })
64
-
65
- result_df = pd.DataFrame(results)
66
- return result_df, f"Kayıt Sayısı: {len(result_df)}"
67
-
68
- # Define Gradio interface components
69
- with gr.Blocks() as demo:
70
- with gr.Tab("Antalya Norm Fazlası Öğretmenler"):
71
- ilce_choices = sorted(df_norm['İlçe Adı'].dropna().astype(str).unique().tolist())
72
- ilce_multiselect = gr.Dropdown(choices=["Tüm İlçeler"] + ilce_choices, label="Select İlçe Adı", multiselect=True)
73
- brans_multiselect = gr.Dropdown(choices=sorted(df_norm['Branşı'].dropna().unique().tolist()), label="Select Branşı", multiselect=True)
74
- aciklama_choices = sorted(df_norm['Açıklamalar'].dropna().unique().tolist())
75
- aciklama_multiselect = gr.Dropdown(choices=aciklama_choices, label="Mazaretliler", multiselect=True)
76
- include_empty_aciklama = gr.Checkbox(label="Mazaretsizleri de ekle")
77
-
78
- # Action button
79
- filter_button = gr.Button("Listele")
80
-
81
- # Output components
82
- record_count = gr.Textbox(label="Kişi Sayısı", interactive=False)
83
- output = gr.DataFrame()
84
-
85
- # Set up the interaction
86
- filter_button.click(fn=filter_dataframe, inputs=[ilce_multiselect, brans_multiselect, aciklama_multiselect, include_empty_aciklama], outputs=[output, record_count])
87
-
88
- with gr.Tab("İhtiyaç ve Norm Fazlası Analizi"):
89
- ilce_choices_ihtiyac = sorted(df_ihtiyac['ilçe'].dropna().astype(str).unique().tolist())
90
- ilce_multiselect_ihtiyac = gr.Dropdown(choices=["Tüm İlçeler"] + ilce_choices_ihtiyac, label="Select İlçe Adı", multiselect=True)
91
- brans_multiselect_ihtiyac = gr.Dropdown(choices=sorted(df_ihtiyac['branş'].dropna().unique().tolist()), label="Select Branşı", multiselect=True)
92
-
93
- # Action button
94
- analyze_button = gr.Button("Analiz Et")
95
-
96
- # Output components
97
- analysis_record_count = gr.Textbox(label="Kayıt Sayısı", interactive=False)
98
- analysis_output = gr.DataFrame()
99
-
100
- # Set up the interaction
101
- analyze_button.click(fn=calculate_needs_and_norm, inputs=[ilce_multiselect_ihtiyac, brans_multiselect_ihtiyac], outputs=[analysis_output, analysis_record_count])
102
-
103
- # Run the app
104
- demo.launch()
 
 
 
 
 
 
 
 
 
 
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):
10
+ df = df_norm.copy()
11
+
12
+ # Apply filters if values are provided
13
+ if ilce_values and "Tüm İlçeler" not in ilce_values:
14
+ df = df[df['İlçe Adı'].isin(ilce_values)]
15
+ if brans_values:
16
+ df = df[df['Branşı'].isin(brans_values)]
17
+ if aciklama_values:
18
+ df = df[df['Açıklamalar'].isin(aciklama_values)]
19
+ if include_empty_aciklama:
20
+ df = pd.concat([df, df[df['Açıklamalar'].isna()]]).drop_duplicates()
21
+
22
+ return df, f"Kayıt Sayısı: {len(df)}"
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)]
30
+ else:
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]
54
+
55
+ results.append({
56
+ 'İlçe': ilce,
57
+ 'Branş': brans,
58
+ 'Toplam İhtiyaç': total_needs,
59
+ 'Norm Fazlası (Mazaretli)': mazaretli_count,
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()
70
+
71
+ summary_text = (f"Toplam İhtiyaç: {total_needs_sum} | "
72
+ f"Toplam Norm Fazlası (Mazaretli): {total_mazaretli_sum} | "
73
+ f"Toplam Norm Fazlası (Mazaretsiz): {total_mazaretsiz_sum}")
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="Select İlçe Adı", multiselect=True)
82
+ brans_multiselect = gr.Dropdown(choices=sorted(df_norm['Branşı'].dropna().unique().tolist()), label="Select 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 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"):
98
+ ilce_choices_ihtiyac = sorted(df_ihtiyac['ilçe'].dropna().astype(str).unique().tolist())
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()