|
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(" π 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}") |
|
|