Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| import plotly.express as px | |
| st.title("๐ DASHBOARD KPI MONITORING DAILY") | |
| # Upload CSV | |
| uploaded = st.file_uploader("Upload KPI CSV", type=["csv"]) | |
| if uploaded: | |
| df = pd.read_csv(uploaded) | |
| df["DATE_ID"] = pd.to_datetime(df["DATE_ID"]) | |
| # ======================== | |
| # FILTER SECTION | |
| # ======================== | |
| st.subheader("Filter") | |
| site_filter = st.multiselect( | |
| "Site ID", | |
| df["SITE_ID"].unique(), | |
| default=df["SITE_ID"].unique() | |
| ) | |
| band_filter = st.multiselect( | |
| "Band", | |
| df["BAND"].unique(), | |
| default=df["BAND"].unique() | |
| ) | |
| start_date = st.date_input("Start Date", df["DATE_ID"].min()) | |
| end_date = st.date_input("End Date", df["DATE_ID"].max()) | |
| # Apply filter | |
| df_filtered = df[ | |
| (df["SITE_ID"].isin(site_filter)) & | |
| (df["BAND"].isin(band_filter)) & | |
| (df["DATE_ID"].between(pd.to_datetime(start_date), pd.to_datetime(end_date))) | |
| ] | |
| # ======================== | |
| # KPI CHART PER SECTOR | |
| # ======================== | |
| sectors = df_filtered["SECTOR"].unique() | |
| st.subheader("Availability") | |
| cols = st.columns(len(sectors)) | |
| for i, sector in enumerate(sectors): | |
| sector_data = df_filtered[df_filtered["SECTOR"] == sector] | |
| fig = px.line( | |
| sector_data, | |
| x="DATE_ID", | |
| y="Availability", | |
| title=f"Availability - {sector}" | |
| ) | |
| cols[i].plotly_chart(fig, use_container_width=True) | |
| # ======================== | |
| # SESSION ABNORMAL | |
| # ======================== | |
| st.subheader("Session Abnormal Release") | |
| cols2 = st.columns(len(sectors)) | |
| for i, sector in enumerate(sectors): | |
| sector_data = df_filtered[df_filtered["SECTOR"] == sector] | |
| fig = px.line( | |
| sector_data, | |
| x="DATE_ID", | |
| y="Session_Abnormal", | |
| title=f"Session Abnormal - {sector}" | |
| ) | |
| cols2[i].plotly_chart(fig, use_container_width=True) |