# AUTOGENERATED! DO NOT EDIT! File to edit: ../../nbs/book/LabellingTracker/11_Andon.ipynb. # %% auto 0 __all__ = ['df', 'get_data', 'get_df_extra', 'kpi', 'get_floating_count', 'get_model_count'] # %% ../../nbs/book/LabellingTracker/11_Andon.ipynb 2 import streamlit as st import pandas as pd import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import plotly.express as px # %% ../../nbs/book/LabellingTracker/11_Andon.ipynb 6 st.set_page_config( page_title="Andon", layout='wide' ) # %% ../../nbs/book/LabellingTracker/11_Andon.ipynb 9 def get_data(fname="Labelling_Tracking_v28.06.24.xlsx", sheet_name='MASTER', date_cols=['Recording_Date', 'Assignment_Date', 'Video_Reception_Date','Target_Date', 'Labelling_Received_Date', 'Verification_Date', 'Completion/Rejection_Date']): df = pd.read_excel(fname, sheet_name=sheet_name, parse_dates=date_cols) df['Assigned']=df['Assigned'].str.split(".").str.join(" ").str.upper() return df # colors # %% ../../nbs/book/LabellingTracker/11_Andon.ipynb 10 def get_df_extra(fname): df = get_data(fname=fname, sheet_name='MASTER', date_cols=['Recording_Date', 'Assignment_Date', 'Video_Reception_Date','Target_Date', 'Labelling_Received_Date', 'Verification_Date', 'Completion/Rejection_Date']) col_order= pd.read_excel(fname, sheet_name='STATUS') col_order = col_order['STATUS STATES'].tolist() colors = dict(zip(col_order, sns.color_palette("Set2", len(col_order)))) # col_order colors2 = dict(zip(col_order, ['blue', 'red', 'green', 'yellow', 'cyan', 'violet', 'pink', 'magenta'])) return df, col_order, colors, colors2 # %% ../../nbs/book/LabellingTracker/11_Andon.ipynb 13 def kpi(df): cattle_days = df.loc[df['TAG']=='FLOATING', ['CattleFolder/Frame', 'SubFolder']].groupby('CattleFolder/Frame').count().sum().values[0] model_days = df.loc[df['TAG']=='MODEL', ['CattleFolder/Frame', 'SubFolder']].groupby('CattleFolder/Frame').count().sum().values[0] cattle_floating = df.loc[df['TAG']=='FLOATING', ['CattleFolder/Frame']].nunique().values[0] accounts_floating = df.loc[df['TAG']=='FLOATING', 'AccountNumber'].nunique() frames_model = df.loc[df['TAG']=='MODEL', ['AccountNumber', 'CattleFolder/Frame']].groupby('AccountNumber').nunique().sum().values[0] accounts_model = df.loc[df['TAG']=='MODEL', 'AccountNumber'].nunique() count_user_floating = len(set(df.loc[df['TAG']=='FLOATING', 'Assigned'].dropna().str.split('/').sum())) count_model_floating = len(set(df.loc[df['TAG']=='MODEL', 'Assigned'].dropna().str.split('/').sum())) col1, col2, col3, col4 = st.columns(4) col1.metric('Floating Days/Cattle', f'{cattle_days}/{cattle_floating}[{accounts_floating}]') col2.metric('Labellers Floating', count_user_floating) col3.metric('Model Days/Frame',f'{model_days}/{frames_model}[{accounts_model}]') col4.metric('Labellers Model', count_model_floating) # %% ../../nbs/book/LabellingTracker/11_Andon.ipynb 14 def get_floating_count(df, col_order, colors): fig, ax = plt.subplots() # df.loc[df['TAG']=='FLOATING', ['AccountNumber', 'AccountName','CattleFolder/Frame']].groupby(['AccountNumber', 'AccountName']).nunique().rename(columns={'CattleFolder/Frame':'Count'}).sort_values(by='Count').plot(kind='barh', ax=ax) data = df.loc[df['TAG']=='FLOATING', ['AccountNumber', 'AccountName', 'Status', 'CattleFolder/Frame']].drop_duplicates() o = data.groupby(['AccountNumber','AccountName', 'Status'])['CattleFolder/Frame'].count().unstack('Status').fillna(0).sort_values(by='AccountName') sel_cols = [x for x in col_order if x in o.columns] sel_colors = {k:colors[k] for k in sel_cols} o[sel_cols].plot(kind='barh', stacked=True, ax=ax, color=sel_colors) # ax.bar_label(ax.containers[-1]) return fig # %% ../../nbs/book/LabellingTracker/11_Andon.ipynb 16 def get_model_count(df,col_order, colors): fig, ax = plt.subplots() # df.loc[df['TAG']=='MODEL', ['AccountNumber', 'AccountName','CattleFolder/Frame']].groupby(['AccountNumber', 'AccountName']).count().rename(columns={'CattleFolder/Frame':'Count'}).sort_values(by='Count').plot(kind='barh', ax=ax) data = df.loc[df['TAG']=='MODEL', ['AccountNumber', 'AccountName', 'Status', 'CattleFolder/Frame', 'SubFolder']].drop_duplicates() o = data.groupby(['AccountNumber','AccountName', 'Status'])['CattleFolder/Frame'].count().unstack('Status').fillna(0).sort_values(by='AccountName') sel_cols = [x for x in col_order if x in o.columns] sel_colors = {k:colors[k] for k in sel_cols} o[sel_cols].plot(kind='barh', stacked=True, ax=ax, color=colors) # ax.bar_label(ax.containers[0]) return fig # %% ../../nbs/book/LabellingTracker/11_Andon.ipynb 18 df = None st.write("# Labelling Andon Board") if 'processed_df' not in st.session_state: uploaded_file = st.file_uploader("Choose a file", type = 'xlsx') if uploaded_file is not None: df, col_order, colors, colors2=get_df_extra(uploaded_file) st.session_state['processed_df'] = df st.session_state['col_order'] = col_order st.session_state['colors'] = colors st.session_state['colors2'] = colors2 else: df = st.session_state['processed_df'] col_order = st.session_state['col_order'] colors = st.session_state['colors'] colors2= st.session_state['colors2'] if df is not None: kpi(df) st.write("## Total Available") col1, col2 = st.columns(2) with col1: st.markdown("Number of Cattles per Floating Account") fig = get_floating_count(df, col_order, colors) st.pyplot(fig) with col2: st.markdown("Frame-Dates per Model Account") fig2 = get_model_count(df, col_order, colors) st.pyplot(fig2)