File size: 5,706 Bytes
170615a
 
 
 
 
 
 
1c76a8a
170615a
 
 
235ea32
 
 
170615a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import streamlit as st
import pandas as pd
import numpy as np
from PIL import Image
import requests
import joblib
import os
import pickle
from date_features import getDateFeatures


# Define path for the model and encoder from the pickle file
model = pickle.load(open("model.pkl", "rb"))
encoder = pickle.load(open("encoder.pkl", "rb"))


# Set Page Configurations
st.set_page_config(page_title="ETA Prediction App", page_icon="fas fa-chart-line", layout="wide", initial_sidebar_state="auto")

# Loading GIF
gif_url = "https://raw.githubusercontent.com/Gilbert-B/Forecasting-Sales/main/app/salesgif.gif"

# Set up sidebar
st.sidebar.header('Navigation')
menu = ['Home', 'About']
choice = st.sidebar.selectbox("Select an option", menu)

def predict(sales_data):
    sales_data = getDateFeatures(sales_data).set_index('date')
    # print(sales_data.columns)

    # Make predictions for the next 8 weeks
    prediction_inputs = []  # Initialize the list for prediction inputs

    # Encode the prediction inputs
    # numeric_columns = sales_data.select_dtypes(include=['int64', 'float64']).columns.tolist()
    numeric_columns = ['onpromotion', 'year', 'month', 'dayofmonth', 'dayofweek', 'dayofyear', 'weekofyear', 'quarter', 'year_weekofyear', 'sin(dayofyear)', 'cos(dayofyear)']
    categoric_columns = ['store_id','category_id','city','store_type','cluster','holiday_type','is_holiday','is_month_start','is_month_end','is_quarter_start','is_quarter_end','is_year_start','is_year_end','is_weekend', 'season'] 
    print(categoric_columns)
    # encoder = BinaryEncoder(drop_invariant=False, return_df=True,)
    # encoder.fit(sales_data[categoric_columns]) 
    num = sales_data[numeric_columns]
    encoded_cat = encoder.transform(sales_data[categoric_columns])
    sales_data = pd.concat([num, encoded_cat], axis=1)
    
    # Make the prediction using the loaded machine learning model
    predicted_sales = model.predict(sales_data)

    return predicted_sales

# Home section
if choice == 'Home':
    st.image(gif_url, use_column_width=True)
    st.markdown("<h1 style='text-align: center;'>Welcome</h1>", unsafe_allow_html=True)
    st.markdown("<p style='text-align: center;'>This is a Sales Forecasting App.</p>", unsafe_allow_html=True)
    
    # Set Page Title
    st.title('SEER- A Sales Forecasting APP')
    st.markdown('Enter the required information to forecast sales:')

    
    # Input form
    col1, col2 = st.columns(2)

    Stores = ['Store_' + str(i) for i in range(1, 55)]
    Stores1 = ['Store_' + str(i) for i in range(0, 5)]
    cities = ['city_' + str(i) for i in range(22)]
    clusters = ['cluster_' + str(i) for i in range(17)]
    categories = ['Category_' + str(i) for i in range(33)]

    with col1:
        date = st.date_input("Date")
        # Convert the date to datetime format
        date = pd.to_datetime(date)
        onpromotion = st.number_input("How many products are on promotion?", min_value=0, step=1)
        selected_category = st.selectbox("Category", categories)


    with col2:
        selected_store = st.selectbox("Store_type", Stores)
        selected_store1 = st.selectbox("Store_id", Stores1)
        selected_city = st.selectbox("City", cities)
        selected_cluster = st.selectbox("Cluster", clusters)

    # Call getDateFeatures() function on sales_data (replace sales_data with your DataFrame)
    sales_data = pd.DataFrame({
        'date': [date],
        'store_id': [selected_store],
        'category_id': [selected_category],
        'onpromotion': [onpromotion],
        'city' :[selected_city],
        'store_type': [selected_store1],
        'cluster':[selected_cluster]
        })
    print(sales_data)
    print(sales_data.info())


    if st.button('Predict'):
        with st.spinner('Predicting sales...'):
            sales = predict(sales_data)
            formatted_sales = round(sales[0], 2)
            st.success(f"Total sales for this week is: #{formatted_sales}")

# About section
elif choice == 'About':
    # Load the banner image
    banner_image_url = "https://raw.githubusercontent.com/Gilbert-B/Forecasting-Sales/0d7b869515bdf5551672f71b6e1f62be9902e3dc/app/seer.png"
    banner_image = Image.open(requests.get(banner_image_url, stream=True).raw)
 
   # Display the banner image
    st.image(banner_image, use_column_width=True)
    st.markdown('''
            <p style='font-size: 20px; font-style: italic;font-style: bold;'>
            SEER is a powerful tool designed to assist businesses in making accurate 
            and data-driven sales predictions. By leveraging advanced algorithms and 
            machine learning techniques, our app provides businesses with valuable insights 
            into future sales trends. With just a few input parameters, such as distance and 
            average speed, our app generates reliable sales forecasts, enabling businesses
            to optimize their inventory management, production planning, and resource allocation. 
            The user-friendly interface and intuitive design make it easy for users to navigate 
            and obtain actionable predictions. With our Sales Forecasting App, 
            businesses can make informed decisions, mitigate risks, 
            and maximize their revenue potential in an ever-changing market landscape.
            </p>
            ''', unsafe_allow_html=True)
    st.markdown("<p style='text-align: center;'>This Sales Forecasting App is developed using Streamlit and Python.</p>", unsafe_allow_html=True)
    st.markdown("<p style='text-align: center;'>It demonstrates how machine learning can be used to predict sales for the next 8 weeks based on historical data.</p>", unsafe_allow_html=True)