import streamlit as st
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
st.set_page_config(page_title='ComercioYA Dashboard', layout='wide')
st.title('ComercioYA Sales Analytics Dashboard')
# Load data
@st.cache_data
def load_data():
df = pd.read_csv('ecommerce_sales_data-2.csv')
df['order_date'] = pd.to_datetime(df['order_date'])
return df
df = load_data()
# Sidebar filters
st.sidebar.header('Filters')
date_range = st.sidebar.date_input(
'Date Range',
value=(df['order_date'].min(), df['order_date'].max())
)
categories = st.sidebar.multiselect(
'Categories',
options=df['category'].unique(),
default=df['category'].unique()
)
# Filter data
filtered_df = df[
(df['order_date'] >= pd.to_datetime(date_range[0])) &
(df['order_date'] <= pd.to_datetime(date_range[1])) &
(df['category'].isin(categories))
]
# KPIs
col1, col2, col3, col4 = st.columns(4)
with col1:
st.metric('Total Sales', f"${filtered_df['sales'].sum():,.2f}")
with col2:
st.metric('Total Profit', f"${filtered_df['profit'].sum():,.2f}")
with col3:
st.metric('Avg Order Value', f"${filtered_df['sales'].mean():,.2f}")
with col4:
st.metric('Total Orders', f"{len(filtered_df):,}")
# Charts
col1, col2 = st.columns(2)
with col1:
st.subheader('Sales by Category')
fig = px.pie(filtered_df, values='sales', names='category')
st.plotly_chart(fig, use_container_width=True)
with col2:
st.subheader('Sales by Segment')
segment_data = filtered_df.groupby('segment')['sales'].sum().reset_index()
fig = px.bar(segment_data, x='segment', y='sales')
st.plotly_chart(fig, use_container_width=True)
# Time series
st.subheader('Sales Trend Over Time')
time_data = filtered_df.groupby(filtered_df['order_date'].dt.to_period('M'))['sales'].sum()
time_data.index = time_data.index.to_timestamp()
fig = px.line(time_data, title='Monthly Sales')
st.plotly_chart(fig, use_container_width=True)
# Data table
st.subheader('Detailed Data')
st.dataframe(filtered_df)