muffintown / app.py
abdurr29's picture
Update app.py
dff591c verified
raw history blame
No virus
5.11 kB
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"))