Spaces:
Sleeping
Sleeping
import gradio as gr | |
import pandas as pd | |
# Load the Excel files | |
df_norm = pd.read_excel(r'norm_fazlasi.xlsx') | |
df_ihtiyac = pd.read_excel(r'ihtiyac_data.xlsx') | |
# Filter the DataFrame based on user input | |
def filter_dataframe(ilce_values, brans_values, aciklama_values, include_empty_aciklama): | |
df = df_norm.copy() | |
# Apply filters if values are provided | |
if ilce_values and "Tüm İlçeler" not in ilce_values: | |
df = df[df['İlçe Adı'].isin(ilce_values)] | |
if brans_values: | |
df = df[df['Branşı'].isin(brans_values)] | |
if aciklama_values: | |
df = df[df['Açıklamalar'].isin(aciklama_values)] | |
if include_empty_aciklama: | |
df = pd.concat([df, df[df['Açıklamalar'].isna()]]).drop_duplicates() | |
return df, f"Kayıt Sayısı: {len(df)}" | |
# Calculate needs and norm excess per district | |
def calculate_needs_and_norm(ilce_values, brans_values): | |
if ilce_values and "Tüm İlçeler" not in ilce_values: | |
df_ihtiyac_filtered = df_ihtiyac[df_ihtiyac['ilçe'].isin(ilce_values)] | |
df_norm_filtered = df_norm[df_norm['İlçe Adı'].isin(ilce_values)] | |
else: | |
df_ihtiyac_filtered = df_ihtiyac | |
df_norm_filtered = df_norm | |
if brans_values: | |
df_ihtiyac_filtered = df_ihtiyac_filtered[df_ihtiyac_filtered['branş'].isin(brans_values)] | |
df_norm_filtered = df_norm_filtered[df_norm_filtered['Branşı'].isin(brans_values)] | |
results = [] | |
if ilce_values and "Tüm İlçeler" not in ilce_values: | |
unique_ilce_values = ilce_values | |
else: | |
unique_ilce_values = df_ihtiyac_filtered['ilçe'].unique().tolist() | |
for ilce in unique_ilce_values: | |
df_ihtiyac_ilce = df_ihtiyac_filtered[df_ihtiyac_filtered['ilçe'] == ilce] | |
df_norm_ilce = df_norm_filtered[df_norm_filtered['İlçe Adı'] == ilce] | |
if brans_values: | |
unique_brans_values = brans_values | |
else: | |
unique_brans_values = df_ihtiyac_ilce['branş'].unique().tolist() | |
for brans in unique_brans_values: | |
total_needs = df_ihtiyac_ilce[df_ihtiyac_ilce['branş'] == brans]['ihtiyac'].sum() | |
mazaretli_count = df_norm_ilce[(df_norm_ilce['Branşı'] == brans) & (df_norm_ilce['Açıklamalar'].notna())].shape[0] | |
mazaretsiz_count = df_norm_ilce[(df_norm_ilce['Branşı'] == brans) & (df_norm_ilce['Açıklamalar'].isna())].shape[0] | |
results.append({ | |
'İlçe': ilce, | |
'Branş': brans, | |
'Toplam İhtiyaç': total_needs, | |
'Norm Fazlası (Mazaretli)': mazaretli_count, | |
'Norm Fazlası (Mazaretsiz)': mazaretsiz_count | |
}) | |
result_df = pd.DataFrame(results) | |
return result_df, f"Kayıt Sayısı: {len(result_df)}" | |
# Define Gradio interface components | |
with gr.Blocks() as demo: | |
with gr.Tab("Antalya Norm Fazlası Öğretmenler"): | |
ilce_choices = sorted(df_norm['İlçe Adı'].dropna().astype(str).unique().tolist()) | |
ilce_multiselect = gr.Dropdown(choices=["Tüm İlçeler"] + ilce_choices, label="Select İlçe Adı", multiselect=True) | |
brans_multiselect = gr.Dropdown(choices=sorted(df_norm['Branşı'].dropna().unique().tolist()), label="Select Branşı", multiselect=True) | |
aciklama_choices = sorted(df_norm['Açıklamalar'].dropna().unique().tolist()) | |
aciklama_multiselect = gr.Dropdown(choices=aciklama_choices, label="Mazaretliler", multiselect=True) | |
include_empty_aciklama = gr.Checkbox(label="Mazaretsizleri de ekle") | |
# Action button | |
filter_button = gr.Button("Listele") | |
# Output components | |
record_count = gr.Textbox(label="Kişi Sayısı", interactive=False) | |
output = gr.DataFrame() | |
# Set up the interaction | |
filter_button.click(fn=filter_dataframe, inputs=[ilce_multiselect, brans_multiselect, aciklama_multiselect, include_empty_aciklama], outputs=[output, record_count]) | |
with gr.Tab("İhtiyaç ve Norm Fazlası Analizi"): | |
ilce_choices_ihtiyac = sorted(df_ihtiyac['ilçe'].dropna().astype(str).unique().tolist()) | |
ilce_multiselect_ihtiyac = gr.Dropdown(choices=["Tüm İlçeler"] + ilce_choices_ihtiyac, label="Select İlçe Adı", multiselect=True) | |
brans_multiselect_ihtiyac = gr.Dropdown(choices=sorted(df_ihtiyac['branş'].dropna().unique().tolist()), label="Select Branşı", multiselect=True) | |
# Action button | |
analyze_button = gr.Button("Analiz Et") | |
# Output components | |
analysis_record_count = gr.Textbox(label="Kayıt Sayısı", interactive=False) | |
analysis_output = gr.DataFrame() | |
# Set up the interaction | |
analyze_button.click(fn=calculate_needs_and_norm, inputs=[ilce_multiselect_ihtiyac, brans_multiselect_ihtiyac], outputs=[analysis_output, analysis_record_count]) | |
# Run the app | |
demo.launch() | |