| import pandas as pd |
| import plotly.express as px |
| import streamlit as st |
|
|
| from process_kpi.process_wbts_capacity import WbtsCapacity, load_data |
| from utils.convert_to_excel import convert_dfs |
|
|
| |
|
|
| st.title(":material/developer_board: WBTS Capacity Analysis") |
| doc_col, image_col = st.columns(2) |
|
|
| with doc_col: |
| st.write( |
| """This app allows you to analyze the capacity of WBTSs in a network. |
| It provides insights into the utilization of BB and CE resources, |
| helping you identify potential capacity issues and plan for upgrades. |
| |
| The report should be run with a minimum of 3 days of data. |
| - Daily Aggregated |
| - WBTS level |
| - Exported in CSV format. |
| """ |
| ) |
|
|
| with image_col: |
| st.image("./assets/wbts_capacity.png", width=400) |
|
|
| uploaded_file = st.file_uploader( |
| "Upload WBTS capacity report in CSV format", type="csv" |
| ) |
|
|
| col1, col2, col3 = st.columns(3) |
|
|
| if uploaded_file is not None: |
| WbtsCapacity.final_results = None |
| with col1: |
| num_days = st.number_input( |
| "Number of days for analysis", |
| min_value=3, |
| max_value=30, |
| value=7, |
| ) |
| with col2: |
| number_of_threshold_days = st.number_input( |
| "Number of days for threshold", |
| min_value=1, |
| max_value=30, |
| value=3, |
| ) |
| with col3: |
| threshold = st.number_input("Threshold", min_value=1, max_value=100, value=80) |
|
|
| if st.button("Analyze Data", type="primary"): |
| try: |
| df = load_data(uploaded_file, num_days, threshold, number_of_threshold_days) |
| WbtsCapacity.final_results = convert_dfs([df], ["WBTS_Analysis"]) |
|
|
| if WbtsCapacity.final_results is not None: |
| st.download_button( |
| on_click="ignore", |
| type="primary", |
| label="Download the Analysis Report", |
| data=WbtsCapacity.final_results, |
| file_name="WBTS_Analysis_Report.xlsx", |
| mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", |
| ) |
| st.write(df) |
| |
| bb_comments_df = df["bb_comments"].value_counts().reset_index() |
| bb_comments_df.columns = ["bb_comments", "count"] |
|
|
| bb_col1, bb_col2 = st.columns(2) |
| with bb_col1: |
| st.write(bb_comments_df) |
|
|
| |
| fig = px.bar( |
| bb_comments_df, |
| x="bb_comments", |
| y="count", |
| title="BB Comments Distribution", |
| ) |
| fig.update_traces(texttemplate="%{value}", textposition="outside") |
| with bb_col2: |
| st.plotly_chart(fig) |
|
|
| |
| ce_comments_df = df["ce_comments"].value_counts().reset_index() |
| ce_comments_df.columns = ["ce_comments", "count"] |
|
|
| ce_col1, ce_col2 = st.columns(2) |
| with ce_col1: |
| st.write(ce_comments_df) |
|
|
| |
| fig = px.bar( |
| ce_comments_df, |
| x="ce_comments", |
| y="count", |
| title="CE Comments Distribution", |
| ) |
| fig.update_traces(texttemplate="%{value}", textposition="outside") |
| with ce_col2: |
| st.plotly_chart(fig) |
| except Exception as e: |
| st.error(f"An error occurred. Error: {e}") |
|
|