muffintown / app.py
abdurr29's picture
Update app.py
dff591c verified
import gradio as gr
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pathlib import Path
def search_data(sku, group_name, date):
if(sku == '' and group_name == '' and date != ''):
filtered_df = initial_df[initial_df['Date'] == date]
elif(sku == '' and group_name != '' and date == ''):
filtered_df = initial_df[initial_df['Group Name'] == group_name]
elif(sku != '' and group_name == '' and date == ''):
filtered_df = initial_df[initial_df['Current Job'] == sku]
elif(sku == '' and group_name != '' and date != ''):
filtered_df = initial_df[(initial_df['Group Name'] == group_name) & (initial_df['Date'] == date)]
elif(sku != '' and group_name == '' and date != ''):
filtered_df = initial_df[(initial_df['Current Job'] == sku) & (initial_df['Date'] == date)]
elif(sku != '' and group_name != '' and date == ''):
filtered_df = initial_df[(initial_df['Current Job'] == sku) & (initial_df['Group Name'] == group_name)]
else:
filtered_df = initial_df[(initial_df['Current Job'] == sku) & (initial_df['Group Name'] == group_name) & (initial_df['Date'] == date)]
records = len(filtered_df)
compliant_records = len(filtered_df[(filtered_df['Units Per Hour'] >= filtered_df['Lower Target']) & (filtered_df['Units Per Hour'] <= filtered_df['Upper Target'])])
compliance_percentage = round((compliant_records / records),2) * 100 if records != 0 else 0
avg_units_per_hour = round(filtered_df['Units Per Hour'].mean(),2)
stdev_units_per_hour = round(filtered_df['Units Per Hour'].std(),2)
most_common_value = filtered_df['Description'].value_counts().idxmax()
fig1 = plt.figure()
plt.hist(filtered_df['Units Per Hour'], bins=20, color='skyblue', edgecolor='black')
plt.xlabel('Units Per Hour')
plt.ylabel('Frequency')
plt.grid(True)
return most_common_value, records, compliance_percentage, avg_units_per_hour, stdev_units_per_hour, fig1
def upload_file(filepath):
global initial_df
name = Path(filepath).name
initial_df = prepare_df(filepath)
initial_analysis_output = initial_analysis(initial_df)
return initial_analysis_output
def initial_analysis(df):
compliant_df = df[(df['Units Per Hour'] >= df['Lower Target']) & (df['Units Per Hour'] <= df['Upper Target'])]
non_compliant_df = df[(df['Units Per Hour'] < df['Lower Target']) | (df['Units Per Hour'] > df['Upper Target'])]
total_observations = len(df)
pct_compliant = 100 * round(len(compliant_df)/total_observations,2)
pct_non_compliant = 100 * round(len(non_compliant_df)/total_observations,2)
return total_observations, pct_compliant, pct_non_compliant
def prepare_df(file_path):
df = pd.read_excel(file_path)
df['Current Job'] = df['Current Job'].astype(str)
df['Start of Batch Date/Time'] = pd.to_datetime(df['Start of Batch Date/Time'])
df['End of Batch Date/Time'] = pd.to_datetime(df['End of Batch Date/Time'])
df['Batch Length (Hours)'] = (df['End of Batch Date/Time'] - df['Start of Batch Date/Time']).dt.total_seconds() / 3600
df['Units Per Hour'] = df['Batch Count'] / df['Batch Length (Hours)']
df.dropna(subset=['Optimal Cases Per Hour'], inplace=True)
return df
with gr.Blocks() as tab_search_by_sku:
with gr.Row():
sku = gr.Textbox(label="SKU")
group_name = gr.Textbox(label="Group Name")
date = gr.Textbox(label="Date(yyyy-mm-dd)")
with gr.Row():
description = gr.Textbox(label="Description")
with gr.Row():
records = gr.Textbox(label="Records")
compliance = gr.Textbox(label="Compliance %")
avgunits = gr.Textbox(label="Avg Units/Hr")
stddev = gr.Textbox(label="Std Dev Units/Hr")
with gr.Row():
graph = gr.Plot(label="Units Per Hour Distribution")
with gr.Row():
submit_btn = gr.Button('Submit')
submit_btn.click(
fn=search_data,
inputs=[sku, group_name, date],
outputs=[description, records, compliance, avgunits, stddev, graph]
)
# clear_btn = gr.Button('Clear')
# clear_btn.click(
# fn=lambda: ("", "", "", "", "", plt.figure()),
# inputs=[],
# outputs=[description, records, compliance, avgunits, stddev, graph]
# )
tab_files = gr.Interface(
fn = upload_file,
inputs = [
gr.File(label="Upload Template File", file_types=[".xlsx"], file_count="single")
],
outputs = [
gr.Textbox(label="Total Observations", interactive=False),
gr.Textbox(label="Compliant Observations %", interactive=False),
gr.Textbox(label="Non-Compliant Observations %", interactive=False)
],
allow_flagging = "never"
)
demo = gr.TabbedInterface([tab_files, tab_search_by_sku], ["Upload Sheet", "Search"])
demo.launch(auth=("BrianA", "Brian@Muffintown1"))