Spaces:
Sleeping
Sleeping
# app.py | |
import streamlit as st | |
import pandas as pd | |
import numpy as np | |
import joblib | |
from eda import (average_sales_by_region, average_sales_and_profit_over_time, | |
segment_vs_region_distribution, sales_vs_profit_across_segments, | |
category_composition_for_profit_and_sales) | |
from prediction import make_prediction | |
# Load the dataset for EDA | |
def load_data(): | |
return pd.read_csv('superstore_clean.csv') | |
df = load_data() | |
# Load the pipeline and model for predictions | |
pipeline = joblib.load('full_pipeline_with_unit_price.pkl') | |
model = joblib.load('best_model.pkl') | |
# Sidebar for navigation | |
st.sidebar.title("Navigation") | |
selection = st.sidebar.radio("Go to", ["Home", "EDA", "Make a Prediction"]) | |
if selection == "Home": | |
st.title("Welcome to the Superstore Sales Dashboard") | |
elif selection == "EDA": | |
st.title("Exploratory Data Analysis (EDA)") | |
# Average Sales by Region | |
st.header("Average Sales by Region") | |
fig1 = average_sales_by_region(df) | |
st.pyplot(fig1) | |
# Average Sales and Profit Over Time | |
st.header("Average Sales and Profit Over Time") | |
fig2 = average_sales_and_profit_over_time(df) | |
st.pyplot(fig2) | |
# Segment vs. Region Distribution | |
st.header("Segment vs. Region Distribution") | |
fig3 = segment_vs_region_distribution(df) | |
st.pyplot(fig3) | |
# Sales vs. Profit Across Different Customer Segments | |
st.header("Sales vs. Profit Across Different Customer Segments") | |
fig4 = sales_vs_profit_across_segments(df) | |
st.pyplot(fig4) | |
# Category Composition for Profit and Sales | |
st.header("Category Composition for Profit and Sales") | |
fig5 = category_composition_for_profit_and_sales(df) | |
st.pyplot(fig5) | |
elif selection == "Make a Prediction": | |
st.title("Make a Sales Prediction") | |
# Input form | |
with st.form("input_form"): | |
row_id = st.number_input('Row ID', min_value=1, value=1, step=1) | |
order_id = st.text_input('Order ID') | |
order_date = st.date_input('Order Date') | |
ship_date = st.date_input('Ship Date') | |
ship_mode = st.selectbox('Ship Mode', ['First Class', 'Second Class', 'Standard Class', 'Same Day']) | |
customer_id = st.text_input('Customer ID') | |
customer_name = st.text_input('Customer Name') | |
segment = st.selectbox('Segment', ['Consumer', 'Corporate', 'Home Office']) | |
country = st.text_input('Country', value='United States') | |
city = st.text_input('City') | |
state = st.text_input('State') | |
postal_code = st.text_input('Postal Code') | |
region = st.selectbox('Region', ['South', 'West', 'Central', 'East']) | |
product_id = st.text_input('Product ID') | |
category = st.selectbox('Category', ['Furniture', 'Office Supplies', 'Technology']) | |
sub_category = st.selectbox('Sub-Category', ['Bookcases', 'Chairs', 'Labels', 'Tables', 'Storage', 'Furnishings', 'Art', 'Phones', 'Binders', 'Appliances', 'Paper', 'Accessories', 'Envelopes', 'Fasteners', 'Supplies', 'Machines', 'Copiers']) | |
product_name = st.text_input('Product Name') | |
sales = st.number_input('Sales', value=0.0, format="%.2f") | |
quantity = st.number_input('Quantity', value=1, format="%d") | |
discount = st.number_input('Discount', value=0.0, format="%.2f") | |
profit = st.number_input('Profit', value=0.0, format="%.2f") | |
submit_button = st.form_submit_button("Predict") | |
if submit_button: | |
# Construct the input DataFrame. Modify as necessary to fit the model's expected input | |
input_data = pd.DataFrame([[sales, quantity, discount, sub_category]], | |
columns=['sales', 'quantity', 'discount', 'sub_category']) | |
# Call prediction function | |
predicted_profit = make_prediction(input_data) | |
st.write(f'Predicted Profit: {predicted_profit:.2f}') |