Rehman1603 commited on
Commit
8c47c78
·
verified ·
1 Parent(s): f9683aa

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +88 -0
app.py ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ from prophet import Prophet
3
+ import gradio as gr
4
+ import plotly.graph_objs as go
5
+
6
+ # Function to train the model and generate forecast
7
+ def predict_sales(time_frame):
8
+ all_sales_data = pd.read_csv('/content/All sales - House of Pizza.csv')
9
+
10
+ # Clean up the 'Total paid' column
11
+ amount = all_sales_data['Total paid'].str.replace('₨', '', regex=False)
12
+ amount = amount.str.replace(',', '', regex=False)
13
+ amount = amount.str.strip()
14
+ amount = amount.astype(float)
15
+
16
+ # Convert the 'Date' column to datetime, coercing errors
17
+ all_sales_data['Date'] = pd.to_datetime(all_sales_data['Date'], format='%m/%d/%Y %H:%M', errors='coerce')
18
+
19
+ # Drop rows with invalid dates
20
+ all_sales_data = all_sales_data.dropna(subset=['Date'])
21
+
22
+ # Prepare the DataFrame
23
+ df = pd.DataFrame({
24
+ 'Date': all_sales_data['Date'],
25
+ 'Total paid': amount
26
+ })
27
+
28
+ # Prepare Prophet model
29
+ model = Prophet()
30
+ df['ds'] = df['Date']
31
+ df['y'] = df['Total paid']
32
+ model.fit(df[['ds', 'y']])
33
+
34
+ # Future forecast based on the time frame
35
+ future_periods = {
36
+ '24 hours': 1 * 24 * 60,
37
+ '7 days': 7 * 24 * 60,
38
+ '10 days': 10 * 24 * 60,
39
+ '15 days': 15 * 24 * 60,
40
+ '1 month': 30 * 24 * 60
41
+ }
42
+
43
+ # Get the future time based on the selected time frame
44
+ future_time = model.make_future_dataframe(periods=future_periods[time_frame], freq='T')
45
+ forecast = model.predict(future_time)
46
+
47
+ # Display the forecasted data
48
+ forecast_table = forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail(future_periods[time_frame])
49
+
50
+ # Create a Plotly graph
51
+ fig = go.Figure()
52
+ fig.add_trace(go.Scatter(
53
+ x=forecast['ds'], y=forecast['yhat'],
54
+ mode='lines+markers',
55
+ name='Forecasted Sales',
56
+ line=dict(color='orange'),
57
+ marker=dict(size=6),
58
+ hovertemplate='Date: %{x}<br>Forecasted Sales: %{y}<extra></extra>'
59
+ ))
60
+
61
+ fig.update_layout(
62
+ title='Sales Forecast using Prophet',
63
+ xaxis_title='Date and Time',
64
+ yaxis_title='Sales Price',
65
+ xaxis=dict(tickformat="%Y-%m-%d %H:%M"),
66
+ yaxis=dict(autorange=True)
67
+ )
68
+
69
+ return forecast_table, fig
70
+
71
+ # Gradio interface
72
+ def run_gradio():
73
+ # Create the Gradio Interface
74
+ time_options = ['24 hours', '7 days', '10 days', '15 days', '1 month']
75
+ gr.Interface(
76
+ fn=predict_sales, # Function to be called
77
+ inputs=gr.components.Dropdown(time_options, label="Select Forecast Time Range"), # User input
78
+ outputs=[
79
+ gr.components.Dataframe(label="Forecasted Sales Table"), # Forecasted data in tabular form
80
+ gr.components.Plot(label="Sales Forecast Plot") # Plotly graph output
81
+ ],
82
+ title="Sales Forecasting with Prophet",
83
+ description="Select a time range for the forecast and click on the button to train the model and see the results."
84
+ ).launch(debug=True)
85
+
86
+ # Run the Gradio interface
87
+ if __name__ == '__main__':
88
+ run_gradio()