Singtel_Bill_Prototype / visualisation.py
cosmoruler
Add new components and update app.py
ec8033f
# app/visualisation.py
import streamlit as st
import pandas as pd
import json
import altair as alt
def show_comparison_chart(bill_file, recommended_plans):
"""
Visualises current vs recommended plans in a bar chart.
"""
# Simulate current usage
try:
if bill_file.name.endswith(".json"):
bill_data = json.load(bill_file)
else:
bill_data = {"lines": 10, "data_usage_gb": 50, "current_cost": 500}
except:
bill_data = {"lines": 10, "data_usage_gb": 50, "current_cost": 500}
current_cost = bill_data["current_cost"]
current_lines = bill_data["lines"]
data = {
"Plan": ["Current Bill"] + list(recommended_plans["plan_name"]),
"Cost (Est)": [current_cost] + list(recommended_plans["price_per_line"] * current_lines)
}
df = pd.DataFrame(data)
chart = alt.Chart(df).mark_bar().encode(
x=alt.X('Plan', sort=None),
y='Cost (Est)',
color=alt.condition(
alt.datum.Plan == "Current Bill",
alt.value('red'),
alt.value('green')
)
).properties(
width=600,
height=400,
title="Cost Comparison: Current vs Recommended Plans"
)
st.altair_chart(chart, use_container_width=True)