irshadtech10's picture
Update app.py
7dbf796
import streamlit as st
import plotly.express as px
import pandas as pd
import plotly.graph_objects as go
from plotly.subplots import make_subplots
from metrics_calculations import (
users, monthly_budget, monthly_expenses, savings_rate, debt_overview,
cash_flow, portfolio_value, asset_allocation, dividend_income,
performance_chart, proj_retirement_savings
)
monthly_budget = monthly_budget()
monthly_expenses = monthly_expenses()
savings_rate = savings_rate()
debt_overview = debt_overview()
cash_flow = cash_flow()
portfolio_value = portfolio_value()
asset_allocation = asset_allocation()
dividend_income = dividend_income()
performance_chart = performance_chart()
proj_retirement_savings = proj_retirement_savings()
st.set_page_config(
page_title="Finetech Dashboard",
layout="wide"
)
st.title("Finetech Dashboard")
selected_user = st.selectbox("Select User", users)
with st.container():
fig1, fig2 = st.columns(2)
with fig1:
st.header("Budget Breakdown")
selected_user_budget = monthly_budget[selected_user]
fig1 = px.bar(
selected_user_budget, x=selected_user_budget.index, y=selected_user_budget.values,
labels={'x': 'Categories', 'y': 'Spendings'},
title=f'User {selected_user}'
)
fig1.update_xaxes(title='Categories', tickangle=45)
fig1.update_layout(
height=500,
width=500
)
st.plotly_chart(fig1)
with fig2:
st.header("Monthly Expenses Over Time")
user_data = monthly_expenses
user_data = user_data[user_data['UserId'] == selected_user]
user_data['Month'] = user_data['Month'].astype(str)
fig2 = px.line(
user_data, x='Month', y='MonthlyExpenses', markers=True, line_shape='linear',
title=f'User {selected_user}',
labels={'MonthlyExpenses': 'Total Monthly Expenses (USD)'}
)
fig2.update_xaxes(title='Date', tickangle=45)
fig2.update_yaxes(title='Total Monthly Expenses (USD)')
fig2.update_layout(
height=500,
width=500
)
st.plotly_chart(fig2)
with st.container():
fig1, fig2 = st.columns(2)
with fig1:
st.header("Savings Rate Over Time")
user_data = savings_rate
user_data = user_data[user_data['UserId'] == selected_user]
user_data['date'] = user_data['date'].dt.strftime('%Y-%m')
fig1 = px.line(
user_data, x='date', y='SavingsRate', markers=True, line_shape='linear',
title=f'User {selected_user}',
labels={'SavingsRate': 'Savings Rate (%)'}
)
fig1.update_xaxes(title='Date', tickangle=45)
fig1.update_yaxes(title='Savings Rate (%)')
fig1.update_layout(
height=500,
width=500
)
st.plotly_chart(fig1)
with fig2:
st.header("Debt Overview")
user_data = debt_overview
user_data = user_data[selected_user]
fig2 = px.bar(
user_data, x='debtType', y='amount',
title=f'User {selected_user}',
labels={'amount': 'Debt Amount (USD)'}
)
fig2.update_xaxes(title='Debt Type', tickangle=45)
fig2.update_yaxes(title='Debt Amount (USD)')
fig2.update_layout(
height=500,
width=500
)
st.plotly_chart(fig2)
with st.container():
fig1, fig2 = st.columns(2)
with fig1:
st.header("Cash Flow Over Time")
user_data = cash_flow
user_data = user_data[user_data['UserId'] == selected_user]
fig1 = px.line(
user_data, x='date', y='CashFlow', markers=True, line_shape='linear',
title=f'User {selected_user}',
labels={'CashFlow': 'Cash Flow (USD)'}
)
fig1.update_xaxes(title='Date', tickangle=45)
fig1.update_yaxes(title='Cash Flow (USD)')
fig1.update_layout(
height=500,
width=500
)
st.plotly_chart(fig1)
with fig2:
st.header("Portfolio Value Over Time")
user_data = portfolio_value
user_data = user_data[user_data['UserId'] == selected_user]
fig2 = px.line(
user_data, x='date', y='balance', markers=True, line_shape='linear',
title=f'User {selected_user}',
labels={'balance': 'Total Portfolio Value (USD)'}
)
fig2.update_xaxes(title='Date', tickangle=45)
fig2.update_yaxes(title='Total Portfolio Value (USD)')
fig2.update_layout(
height=500,
width=500
)
st.plotly_chart(fig2)
with st.container():
fig1, fig2 = st.columns(2)
with fig1:
st.header("Asset Allocation")
user_data = asset_allocation
user_data = user_data[user_data['UserId'] == selected_user]
fig1 = px.pie(
user_data, values='Allocation', names='Asset',
title=f'User {selected_user}',
labels={'Allocation': 'Allocation (USD)'}
)
fig1.update_layout(
height=500,
width=500
)
st.plotly_chart(fig1)
with fig2:
st.header("Dividend Income Over Time")
user_data = dividend_income
user_data = user_data[user_data.index.get_level_values('UserId') == selected_user]
user_data.index = pd.to_datetime([str(idx[1]) for idx in user_data.index])
fig2 = px.line(
user_data, x=user_data.index, y='dividends', markers=True, line_shape='linear',
title=f'User {selected_user}'
)
fig2.update_xaxes(title='Date', tickangle=45)
fig2.update_yaxes(title='Dividend Income (USD)')
fig2.update_layout(showlegend=False)
fig2.update_layout(
height=500,
width=500
)
st.plotly_chart(fig2)
with st.container():
st.header("Performance Chart")
user_data = performance_chart
user_data = user_data[user_data['UserId'] == selected_user]
fig1, fig2 = st.columns(2)
with fig1:
fig1 = go.Figure()
fig1.add_trace(go.Scatter(x=user_data['date'], y=user_data['daily_balance'], mode='lines', name='Daily Balance'))
fig1.update_xaxes(title_text='Date')
fig1.update_yaxes(title_text='Daily Balance')
fig1.update_layout(
height=500,
width=500
)
st.plotly_chart(fig1)
with fig2:
one_month_return = user_data['daily_balance'].pct_change(periods=4) # Assuming 20 trading days in a month
one_year_return = user_data['daily_balance'].pct_change(periods=252) # Assuming 252 trading days in a year
five_year_return = user_data['daily_balance'].pct_change(periods=252 * 5) # Assuming 252 trading days in a year for 5 years
# Create a DataFrame for the returns
returns_df = pd.DataFrame({
'Return Period': ['1-Month', '1-Year', '5-Year'],
'Return Value': [one_month_return.iloc[-1], one_year_return.iloc[-1], five_year_return.iloc[-1]]
})
# Create a bar plot for returns
fig2 = px.bar(returns_df, x='Return Period', y='Return Value', text='Return Value', labels={'Return Value': 'Return'})
fig2.update_traces(texttemplate='%{text:.2%}', textposition='outside')
fig2.update_xaxes(title_text='Return Period')
fig2.update_yaxes(title_text='Return')
fig2.update_layout(
height=500,
width=500
)
# Display both charts
st.plotly_chart(fig2)
with st.container():
st.header("Projected Retirement Savings")
user_data = proj_retirement_savings
user_data = user_data[user_data["UserId"] == selected_user]
fig = px.bar(user_data, x='UserId', y='ProjectedSavings',
labels={'UserId': 'User ID', 'ProjectedSavings': 'Total Projected Retirement Savings'},
title='Total Projected Retirement Savings by User')
fig.update_xaxes(tickmode='linear', dtick=1)
fig.update_yaxes(tickformat=',f')
fig.update_yaxes(tickformat=',.2f')
fig.update_layout(
height=600,
width=400
)
st.plotly_chart(fig)