Download app.py from Janmejay1198/TFReceiptLinearPredictor: direct link, hf CLI and curl.
- Browser
- Download file 3.53 kB
-
https://huggingface.co/spaces/Janmejay1198/TFReceiptLinearPredictor/resolve/main/app.py
- Command line
-
hf download hf://spaces/Janmejay1198/TFReceiptLinearPredictor/app.py
-
curl -L -o app.py https://huggingface.co/spaces/Janmejay1198/TFReceiptLinearPredictor/resolve/main/app.py
3.53 kB
| from flask import Flask, render_template, request | |
| from wtforms import Form, DateField | |
| from wtforms.validators import DataRequired | |
| import numpy as np | |
| import pandas as pd | |
| import tensorflow as tf | |
| import os | |
| import plotly.graph_objs as go | |
| from datetime import datetime | |
| app = Flask(__name__) | |
| save_directory = 'Generated Data/' | |
| if not os.path.exists(save_directory): | |
| os.makedirs(save_directory) | |
| # Define the Linear Regression Model | |
| class LinearRegression(tf.Module): | |
| def __init__(self, input_size, output_size): | |
| self.W = tf.Variable(tf.random.normal([input_size, output_size]), name='weights') | |
| self.b = tf.Variable(tf.zeros([output_size]), name='bias') | |
| def __call__(self, X): | |
| return tf.matmul(X, self.W) + self.b | |
| # Load the pre-trained model | |
| input_size = 1 | |
| output_size = 1 | |
| model = LinearRegression(input_size, output_size) | |
| loaded_model = tf.saved_model.load('Receipts_model') | |
| model.W.assign(loaded_model.W) | |
| model.b.assign(loaded_model.b) | |
| # Define the form | |
| class DateForm(Form): | |
| default_start_date = datetime.strptime('2022-01-01', '%Y-%m-%d').date() | |
| start_date = DateField('Start Date', format='%Y-%m-%d', default=default_start_date, validators=[DataRequired()]) | |
| end_date = DateField('End Date', format='%Y-%m-%d', validators=[DataRequired()]) | |
| # Define the inference route | |
| def index(): | |
| form = DateForm(request.form) | |
| if request.method == 'POST' and form.validate(): | |
| start_date = form.start_date.data | |
| end_date = form.end_date.data | |
| date_range = pd.date_range(start=start_date, end=end_date, freq='D') | |
| inference_data = pd.DataFrame({'Date': date_range}) | |
| data = pd.read_csv('data_daily.csv', parse_dates=['# Date'], index_col=None) # Load the dataset | |
| data.rename(columns={"# Date": "Date"}, inplace=True) # Rename Date Column | |
| initial_date = np.datetime64('2021-01-01') | |
| num_of_days = (inference_data['Date'] - initial_date).dt.days / 364 | |
| X = tf.convert_to_tensor(num_of_days, dtype=tf.float32)[:, tf.newaxis] | |
| y_predict = model(X) | |
| y_predict *= np.max(data['Receipt_Count'].to_numpy()) | |
| # Convert TensorFlow tensor to NumPy array | |
| y_predict_np = y_predict.numpy() | |
| # Assuming y_predict_tensor is your TensorFlow tensor | |
| df = pd.DataFrame({ | |
| 'Date': pd.date_range(start=start_date, end=end_date), | |
| 'Receipts': y_predict_np.squeeze() | |
| }).set_index('Date') | |
| # Resample by month and sum up the receipts | |
| df_monthly = df.resample('M').sum() | |
| # Create an interactive line chart using Plotly Express | |
| fig = go.Figure() | |
| fig.add_trace(go.Scatter(x=inference_data['Date'], y=y_predict_np.squeeze(), mode='lines', marker=dict(color='#FF5349'), name='Monthly Predicted Receipt Count')) | |
| fig.update_layout(title_text='Predicted Monthly Receipts Count Over Time') | |
| fig.update_xaxes(title_text='Time Period') | |
| fig.update_yaxes(title_text='Number of Receipts') | |
| # Adding scatter plot | |
| fig.add_trace(go.Scatter(x=data['Date'], y=data['Receipt_Count'], mode='markers', marker=dict(color='#93E9BE'), name='Actual Daily Receipt Count')) | |
| plot_div = fig.to_html(full_html=False) | |
| return render_template('index.html', form=form, data=df_monthly.to_html(), plot_div=plot_div) | |
| return render_template('index.html', form=form) | |
| if __name__ == '__main__': | |
| app.run(debug=True) | |