Streamlit Trading Dashboard
Build an interactive trading dashboard with Streamlit — live P&L charts, position tables, and key metric widgets.
Streamlit Trading Dashboard
Overview
This notebook documents the architecture and full source code of a Streamlit trading dashboard — a lightweight real-time web UI for monitoring strategy performance, open positions, and execution statistics.
Features
- Live equity curve and PnL chart.
- Open position table with colour-coded PnL.
- Per-strategy execution summary.
- Auto-refresh every N seconds.
- Deployable as a standalone web app with
streamlit run app.py.
Architecture
streamlit_dashboard.py
├── Data Layer — Load from PostgreSQL / CSV
├── Layout — Sidebar config, page sections
├── Charts — Plotly charts embedded in Streamlit
└── Auto-refresh — st_autorefresh or st.rerun loop
1. Installation
import sys
# Install required packages
%pip install streamlit plotly pandas sqlalchemy psycopg2-binary streamlit-autorefresh
print("Dependencies installed and listed.")Collecting streamlit Downloading streamlit-1.57.0-py3-none-any.whl.metadata (9.6 kB) Requirement already satisfied: plotly in /usr/local/lib/python3.12/dist-packages (5.24.1) Requirement already satisfied: pandas in /usr/local/lib/python3.12/dist-packages (2.2.2) Requirement already satisfied: sqlalchemy in /usr/local/lib/python3.12/dist-packages (2.0.49) Collecting psycopg2-binary Downloading psycopg2_binary-2.9.12-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (4.9 kB) Collecting streamlit-autorefresh Downloading streamlit_autorefresh-1.0.1-py3-none-any.whl.metadata (436 bytes) Requirement already satisfied: altair!=5.4.0,!=5.4.1,<7,>=4.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (5.5.0) Requirement already satisfied: blinker<2,>=1.5.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (1.9.0) Requirement already satisfied: cachetools<8,>=5.5 in /usr/local/lib/python3.12/dist-packages (from streamlit) (6.2.6) Requirement already satisfied: click<9,>=7.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (8.3.3) Requirement already satisfied: gitpython!=3.1.19,<4,>=3.0.7 in /usr/local/lib/python3.12/dist-packages (from streamlit) (3.1.47) Requirement already satisfied: numpy<3,>=1.23 in /usr/local/lib/python3.12/dist-packages (from streamlit) (2.0.2) Requirement already satisfied: packaging>=20 in /usr/local/lib/python3.12/dist-packages (from streamlit) (26.1) Requirement already satisfied: pillow<13,>=7.1.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (11.3.0) Collecting pydeck<1,>=0.8.0b4 (from streamlit) Downloading pydeck-0.9.2-py2.py3-none-any.whl.metadata (4.2 kB) Requirement already satisfied: protobuf<8,>=3.20 in /usr/local/lib/python3.12/dist-packages (from streamlit) (5.29.6) Requirement already satisfied: pyarrow>=7.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (18.1.0) Requirement already satisfied: requests<3,>=2.27 in /usr/local/lib/python3.12/dist-packages (from streamlit) (2.32.4) Requirement already satisfied: tenacity<10,>=8.1.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (9.1.4) Requirement already satisfied: toml<2,>=0.10.1 in /usr/local/lib/python3.12/dist-packages (from streamlit) (0.10.2) Requirement already satisfied: typing-extensions<5,>=4.10.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (4.15.0) Requirement already satisfied: starlette>=0.40.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (0.52.1) Requirement already satisfied: uvicorn>=0.30.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (0.46.0) Requirement already satisfied: httptools>=0.6.3 in /usr/local/lib/python3.12/dist-packages (from streamlit) (0.7.1) Requirement already satisfied: anyio>=4.0.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (4.13.0) Requirement already satisfied: python-multipart>=0.0.10 in /usr/local/lib/python3.12/dist-packages (from streamlit) (0.0.26) Requirement already satisfied: websockets>=12.0.0 in /usr/local/lib/python3.12/dist-packages (from streamlit) (15.0.1) Requirement already satisfied: itsdangerous>=2.1.2 in /usr/local/lib/python3.12/dist-packages (from streamlit) (2.2.0) Requirement already satisfied: watchdog<7,>=2.1.5 in /usr/local/lib/python3.12/dist-packages (from streamlit) (6.0.0) Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.12/dist-packages (from pandas) (2.9.0.post0) Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.12/dist-packages (from pandas) (2025.2) Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.12/dist-packages (from pandas) (2026.1) Requirement already satisfied: greenlet>=1 in /usr/local/lib/python3.12/dist-packages (from sqlalchemy) (3.4.0) Requirement already satisfied: jinja2 in /usr/local/lib/python3.12/dist-packages (from altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit) (3.1.6) Requirement already satisfied: jsonschema>=3.0 in /usr/local/lib/python3.12/dist-packages (from altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit) (4.26.0) Requirement already satisfied: narwhals>=1.14.2 in /usr/local/lib/python3.12/dist-packages (from altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit) (2.20.0) Requirement already satisfied: idna>=2.8 in /usr/local/lib/python3.12/dist-packages (from anyio>=4.0.0->streamlit) (3.13) Requirement already satisfied: gitdb<5,>=4.0.1 in /usr/local/lib/python3.12/dist-packages (from gitpython!=3.1.19,<4,>=3.0.7->streamlit) (4.0.12) Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.12/dist-packages (from python-dateutil>=2.8.2->pandas) (1.17.0) Requirement already satisfied: charset_normalizer<4,>=2 in /usr/local/lib/python3.12/dist-packages (from requests<3,>=2.27->streamlit) (3.4.7) Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.12/dist-packages (from requests<3,>=2.27->streamlit) (2.5.0) Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.12/dist-packages (from requests<3,>=2.27->streamlit) (2026.4.22) Requirement already satisfied: h11>=0.8 in /usr/local/lib/python3.12/dist-packages (from uvicorn>=0.30.0->streamlit) (0.16.0) Requirement already satisfied: smmap<6,>=3.0.1 in /usr/local/lib/python3.12/dist-packages (from gitdb<5,>=4.0.1->gitpython!=3.1.19,<4,>=3.0.7->streamlit) (5.0.3) Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.12/dist-packages (from jinja2->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit) (3.0.3) Requirement already satisfied: attrs>=22.2.0 in /usr/local/lib/python3.12/dist-packages (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit) (26.1.0) Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.12/dist-packages (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit) (2025.9.1) Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.12/dist-packages (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit) (0.37.0) Requirement already satisfied: rpds-py>=0.25.0 in /usr/local/lib/python3.12/dist-packages (from jsonschema>=3.0->altair!=5.4.0,!=5.4.1,<7,>=4.0->streamlit) (0.30.0) Downloading streamlit-1.57.0-py3-none-any.whl (9.2 MB) [2K [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m9.2/9.2 MB[0m [31m63.1 MB/s[0m eta [36m0:00:00[0m [?25hDownloading psycopg2_binary-2.9.12-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (4.3 MB) [2K [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m4.3/4.3 MB[0m [31m105.5 MB/s[0m eta [36m0:00:00[0m [?25hDownloading streamlit_autorefresh-1.0.1-py3-none-any.whl (700 kB) [2K [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m700.8/700.8 kB[0m [31m42.4 MB/s[0m eta [36m0:00:00[0m [?25hDownloading pydeck-0.9.2-py2.py3-none-any.whl (11.3 MB) [2K [90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m [32m11.3/11.3 MB[0m [31m105.6 MB/s[0m eta [36m0:00:00[0m [?25hInstalling collected packages: psycopg2-binary, pydeck, streamlit, streamlit-autorefresh Successfully installed psycopg2-binary-2.9.12 pydeck-0.9.2 streamlit-1.57.0 streamlit-autorefresh-1.0.1 Dependencies installed and listed.
2. Streamlit Dashboard Application Source Code — streamlit_dashboard.py
This section presents the complete source code for the Streamlit trading dashboard application. It includes all necessary imports, page configuration, data loading functions, UI layout components, and data visualization logic.
2.1. Data Layer Functions
This section defines the data loading functions utilized by the Streamlit dashboard. These functions are responsible for retrieving various datasets, such as equity curves, open positions, and execution summaries. For demonstration purposes, they currently generate synthetic data. In a production environment, these functions would interface with a database (e.g., PostgreSQL) or external APIs.
Each function employs st.cache_data(ttl=10) to cache the data for 10 seconds, preventing excessive data reloading and improving dashboard performance. This caching mechanism is crucial for dashboards with frequent refresh intervals.
2.1.1. load_equity_curve Function
This function simulates the historical equity curve for a given strategy, generating account balance data over time. The data is cached for performance optimization.
@st.cache_data(ttl=10)
def load_equity_curve(strategy: str) -> pd.DataFrame:
"""Load equity curve data for the selected strategy (simulated)."""
# Production: Replace with actual database query, e.g.,
# engine = sa.create_engine(os.getenv("DATABASE_URL"))
# return pd.read_sql(f"SELECT datetime, balance FROM ledger_{strategy} ORDER BY datetime ASC", engine)
n = 100 # Number of data points for the simulated curve.
# Generate random returns to simulate balance fluctuations.
returns = np.random.normal(0.003, 0.012, n)
equity = [10_000.0] # Starting balance.
# Calculate cumulative equity based on simulated returns.
for r in returns:
equity.append(equity[-1] * (1 + r))
# Generate corresponding datetime stamps.
dates = pd.date_range(end=datetime.utcnow(), periods=n+1, freq="1h")
# Return DataFrame with datetime and balance.
return pd.DataFrame({"datetime": dates, "balance": equity})2026-05-20 08:06:15.696 No runtime found, using MemoryCacheStorageManager
2.1.2. load_open_positions Function
This function simulates the retrieval of all active trading positions. It returns a DataFrame with details such as exchange, symbol, trade direction, and profit/loss. This data is also cached for efficiency.
@st.cache_data(ttl=10)
def load_open_positions() -> pd.DataFrame:
"""Load open positions across all exchanges (simulated)."""
# Production: Replace with actual database query, e.g.,
# return pd.read_sql("SELECT * FROM execution_live", engine)
# Return a DataFrame with sample open position data.
return pd.DataFrame([
{"Exchange": "Binance", "Symbol": "BTCUSDT", "Direction": "LONG",
"Entry": 68_000, "Current": 69_200, "PnL%": 1.76, "Qty": 0.15},
{"Exchange": "Bybit", "Symbol": "ETHUSDT", "Direction": "SHORT",
"Entry": 3_500, "Current": 3_460, "PnL%": 1.14, "Qty": 2.0},
{"Exchange": "Kraken", "Symbol": "PF_XBTUSD","Direction": "SHORT",
"Entry": 69_100, "Current": 69_400, "PnL%": -0.43, "Qty": 0.05},
])2026-05-20 08:06:16.271 No runtime found, using MemoryCacheStorageManager
2.1.3. load_execution_summary Function
This function simulates summary statistics for each trading strategy, including trades, win rate, PnL percentage, and status. The data is cached to reduce load times.
@st.cache_data(ttl=10)
def load_execution_summary() -> pd.DataFrame:
"""Load execution summary statistics per strategy (simulated)."""
# Production: Replace with actual database query, e.g.,
# return pd.read_sql("SELECT * FROM execution_summary", engine)
# Return a DataFrame with sample execution summary data.
return pd.DataFrame([
{"Strategy": "btc_1h", "Trades": 42, "Win Rate": 61.9, "PnL%": 8.3, "Status": "Running"},
{"Strategy": "eth_4h", "Trades": 18, "Win Rate": 55.6, "PnL%": 3.1, "Status": "Running"},
{"Strategy": "sol_1d", "Trades": 9, "Win Rate": 44.4, "PnL%": -1.2, "Status": "Paused"},
{"Strategy": "btc_4h", "Trades": 31, "Win Rate": 67.7, "PnL%": 12.4, "Status": "Running"},
])2026-05-20 08:06:16.884 No runtime found, using MemoryCacheStorageManager
import streamlit as st
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px
from datetime import datetime, timedelta
import time
import random
import numpy as np
# ─────────────────────────────────────────────────────────────────────────────
# Streamlit Page Configuration
# This section configures the basic properties of the Streamlit application page.
# ─────────────────────────────────────────────────────────────────────────────
st.set_page_config(
page_title = "Trading Dashboard", # Sets the title displayed in the browser tab.
page_icon = "📈", # Sets the favicon for the page.
layout = "wide", # Uses the full width of the browser window.
initial_sidebar_state = "expanded", # Sets the initial state of the sidebar.
)
# ─────────────────────────────────────────────────────────────────────────────
# Sidebar Configuration and User Inputs
# This section defines the content and interactive elements within the Streamlit
# sidebar, allowing users to control dashboard parameters.
# ─────────────────────────────────────────────────────────────────────────────
with st.sidebar:
st.title("⚙️ Dashboard Configuration")
st.divider()
# Strategy selection dropdown
selected_strategy = st.selectbox(
"Select Strategy",
["btc_1h", "eth_4h", "sol_1d", "btc_4h"],
index=0,
help="Choose the trading strategy to display data for."
)
# Refresh interval slider
refresh_interval = st.slider("Data Refresh Interval (seconds)", 5, 60, 15,
help="Set how frequently the dashboard data refreshes.")
# Checkbox to show closed positions (currently not implemented in data loading)
show_closed = st.checkbox("Display Closed Positions", value=False,
help="Toggle to show historical closed positions. (Feature not yet implemented)")
st.divider()
# Display last update timestamp
st.caption(f"Last Data Update: {datetime.utcnow().strftime('%H:%M:%S')} UTC")
# Manual refresh button
if st.button("Force Data Refresh", help="Click to immediately refresh all dashboard data."):
st.cache_data.clear() # Clears all cached data to force reload from sources.
st.rerun() # Reruns the entire Streamlit application script.
# ─────────────────────────────────────────────────────────────────────────────
# Main Dashboard Header
# This section defines the main title and introductory information for the dashboard.
# ─────────────────────────────────────────────────────────────────────────────
st.title("📈 Algorithmic Trading Dashboard")
st.caption(f"Currently displaying data for Strategy: **{selected_strategy}** | Automatic refresh every: {refresh_interval} seconds")
st.divider()
# ─────────────────────────────────────────────────────────────────────────────
# Key Performance Indicator (KPI) Metrics Display
# This section retrieves and displays key performance indicators for the selected strategy.
# ─────────────────────────────────────────────────────────────────────────────
summary_df = st.session_state.get('execution_summary_df', load_execution_summary()) # Load from cache or function
row = summary_df[summary_df["Strategy"] == selected_strategy]
# Create four columns for KPI metrics
col1, col2, col3, col4 = st.columns(4)
if not row.empty:
r = row.iloc[0]
# Display total trades with a metric widget
col1.metric("Total Trades", int(r["Trades"]))
# Display win rate with a delta indicating performance against 50%
col2.metric("Win Rate", f"{r['Win Rate']:.1f}%",
delta=f"{r['Win Rate']-50:.1f}pp vs 50%",
help="Percentage of winning trades against total trades.")
# Display cumulative PnL with its value as delta
col3.metric("Cumulative PnL",f"{r['PnL%']:.2f}%",
delta=f"{r['PnL%']:.2f}%",
help="Total profit or loss as a percentage of initial capital.")
# Display strategy status
col4.metric("Status", r["Status"],
help="Current operational status of the strategy.")
# ─────────────────────────────────────────────────────────────────────────────
# Equity Curve Visualization
# This section plots the historical equity curve for the selected trading strategy.
# ─────────────────────────────────────────────────────────────────────────────
st.subheader("Strategy Equity Curve")
equity_df = st.session_state.get('equity_curve_df', load_equity_curve(selected_strategy)) # Load from cache or function
# Create a Plotly figure for the equity curve
fig_equity = go.Figure()
fig_equity.add_trace(go.Scatter(
x=equity_df["datetime"], y=equity_df["balance"],
mode="lines", name="Account Balance",
line=dict(color="#2ecc71", width=2), # Green line for equity
fill="tozeroy", fillcolor="rgba(46, 204, 113, 0.1)", # Area under the curve
))
# Add a horizontal dashed line indicating the initial balance
fig_equity.add_hline(y=equity_df["balance"].iloc[0], line_dash="dash",
line_color="#bdc3c7", annotation_text="Initial Balance",
annotation_position="top left")
fig_equity.update_layout(
height=350, # Set plot height
margin=dict(l=0, r=0, t=20, b=0), # Adjust plot margins
xaxis_title="Time", yaxis_title="Account Balance (USDT)", # Axis titles
plot_bgcolor="rgba(0,0,0,0)", paper_bgcolor="rgba(0,0,0,0)", # Transparent background
hovermode="x unified" # Improves hover interaction
)
st.plotly_chart(fig_equity, use_container_width=True)
# ─────────────────────────────────────────────────────────────────────────────
# Open Positions Table Display
# This section presents a table of currently open trading positions.
# ─────────────────────────────────────────────────────────────────────────────
st.subheader("Live Open Positions")
positions_df = st.session_state.get('open_positions_df', load_open_positions()) # Load from cache or function
# Function to apply conditional coloring to PnL column
def colour_pnl(val):
colour = "#2ecc71" if val > 0 else "#e74c3c" # Green for positive, red for negative PnL
return f"color: {colour}; font-weight: bold"
# Display the DataFrame with styled PnL column
st.dataframe(
positions_df.style.applymap(colour_pnl, subset=["PnL%"]),
use_container_width=True, # Makes the table expand to the container width
hide_index=True, # Hides the DataFrame index column
)
# ─────────────────────────────────────────────────────────────────────────────
# All Strategies Execution Summary Table
# This section provides a summary of execution statistics across all defined strategies.
# ─────────────────────────────────────────────────────────────────────────────
st.subheader("All Strategies — Execution Summary")
st.dataframe(
summary_df.style.applymap(colour_pnl, subset=["PnL%"]),
use_container_width=True, hide_index=True,
)
# ─────────────────────────────────────────────────────────────────────────────
# Automatic Refresh Mechanism
# This section implements the auto-refresh functionality using `st.rerun()`.
# The `streamlit-autorefresh` library could be used for more advanced scenarios
# but `st.rerun()` is sufficient for this simple example.
# ─────────────────────────────────────────────────────────────────────────────
# Wait for the specified refresh interval before rerunning the app.
time.sleep(refresh_interval)
st.rerun() # Forces the Streamlit application to rerun from the top.2026-05-20 08:06:44.733 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.736 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.738 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.738 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.739 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.740 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.742 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.742 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.743 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.744 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.746 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.750 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.751 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.751 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.752 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.752 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.753 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.754 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.755 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.755 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.756 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.759 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.759 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.760 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.761 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.763 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.765 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.765 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.767 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. /tmp/ipykernel_4899/4194231335.py:46: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). 2026-05-20 08:06:44.768 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.768 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.769 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.770 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.773 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.775 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.775 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.776 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.776 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.779 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.780 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.780 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.781 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.782 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.784 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.785 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.789 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.789 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.790 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.793 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.795 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.796 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.797 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.797 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.799 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.800 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.801 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.801 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.802 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.803 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.803 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.804 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.805 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.806 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.807 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.808 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.808 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.810 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.811 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.811 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.813 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. /tmp/ipykernel_4899/3821477326.py:18: DeprecationWarning: datetime.datetime.utcnow() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.now(datetime.UTC). 2026-05-20 08:06:44.816 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.841 Please replace `use_container_width` with `width`. `use_container_width` will be removed after 2025-12-31. For `use_container_width=True`, use `width='stretch'`. For `use_container_width=False`, use `width='content'`. 2026-05-20 08:06:44.846 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.848 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.849 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.850 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.850 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.851 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.853 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.853 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.854 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.858 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. /tmp/ipykernel_4899/4194231335.py:131: FutureWarning: Styler.applymap has been deprecated. Use Styler.map instead. 2026-05-20 08:06:44.859 Please replace `use_container_width` with `width`. `use_container_width` will be removed after 2025-12-31. For `use_container_width=True`, use `width='stretch'`. For `use_container_width=False`, use `width='content'`. 2026-05-20 08:06:44.861 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.876 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.877 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.878 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.879 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.880 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.881 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. /tmp/ipykernel_4899/4194231335.py:143: FutureWarning: Styler.applymap has been deprecated. Use Styler.map instead. 2026-05-20 08:06:44.883 Please replace `use_container_width` with `width`. `use_container_width` will be removed after 2025-12-31. For `use_container_width=True`, use `width='stretch'`. For `use_container_width=False`, use `width='content'`. 2026-05-20 08:06:44.884 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.894 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.895 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:44.897 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode. 2026-05-20 08:06:59.898 Thread 'MainThread': missing ScriptRunContext! This warning can be ignored when running in bare mode.
3. Running the Dashboard
Steps to Run the Streamlit Dashboard:
-
Save this notebook as a Python file:
- Go to
File>Download>Download .py. - Save the file (e.g.,
streamlit_dashboard.py).
- Go to
-
Open your local terminal or command prompt.
-
Navigate to the directory where you saved
streamlit_dashboard.py. -
Execute the Streamlit application using the command:
streamlit run streamlit_dashboard.pyThe app will typically open in your web browser at:
http://localhost:8501