Spaces:
Sleeping
Sleeping
| # 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) | |