db_query / apps /kpi_analysis /wbts_capacty.py
DavMelchi's picture
adding image width
e577a2e
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
# Streamlit UI
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 analysis and visualization
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)
# BB comments chart
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 analysis and visualization
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)
# CE comments chart
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}")