Spaces:
Sleeping
Sleeping
| import numpy as np | |
| import pandas as pd | |
| import pickle | |
| import datasets | |
| from datasets import load_dataset, Dataset, DatasetDict | |
| from torch.utils.data import DataLoader | |
| from six import BytesIO | |
| import gradio as gr | |
| from huggingface_hub import snapshot_download | |
| import os | |
| from matplotlib import pyplot as plt | |
| import seaborn as sns | |
| import torch | |
| from neuralforecast import NeuralForecast | |
| from neuralforecast.models import NBEATS | |
| REPO_ID = "magcheong/ITI110_Energy_Prediction" | |
| download_dir = snapshot_download(REPO_ID) | |
| test_file = pd.read_csv(download_dir +"/futr_df.csv") | |
| test = pd.DataFrame(test_file) | |
| test['ds'] = pd.to_datetime(test["ds"], format='%Y-%m-%d %H:%M:%S') | |
| def load_model(): | |
| download_dir = snapshot_download(REPO_ID) | |
| saved_model_dir = os.path.join(download_dir, "saved_model") | |
| prediction_model = NeuralForecast.load(saved_model_dir) | |
| return prediction_model | |
| prediction_model = load_model() | |
| def UserInputDays(number_of_days_ahead): | |
| row_count = int(number_of_days_ahead)*24 | |
| return row_count | |
| def UserInputTime(hour_of_the_day): | |
| if hour_of_the_day == '': | |
| hour_of_the_day = 0 | |
| return int(hour_of_the_day) | |
| # First day of test is 2014-02-21 01:00:00 | |
| def predict2(row): | |
| prediction = prediction_model.predict(futr_df=test).reset_index() | |
| # predict_dict = prediction[['ds', 'NBEATS']].to_dict() | |
| # predicted_value = prediction['NBEATS'][row] | |
| return round(prediction.iloc[row]['NBEATS'], 3) | |
| def predict(number_of_days_ahead, hour_of_the_day): | |
| row = UserInputDays(number_of_days_ahead) + UserInputTime(hour_of_the_day) | |
| return predict2(row) | |
| # def day_average(number_of_days_ahead): | |
| # n = UserInputDays(number_of_days_ahead) | |
| # if n == 0: | |
| # return round(prediction.iloc[:23]['NBEATS'].mean(), 3) | |
| # else: | |
| # start_n = 23 + 24*(n-1) | |
| # return round(prediction.iloc[start_n:start_n+24]['NBEATS'].mean(), 3) | |
| title = "ITI110 Energy Prediction" | |
| description = "This is an app to predict energy consumption in London over the next 7 days." | |
| css_code='div {margin-left: auto; margin-right: auto; width: 100%;\ | |
| background-image: url("https://drive.google.com/file/d/1MZmYop1st_lAuDbvKIuTbjxj-xjPtwX-/view?usp=sharing"); repeat 0 0;}' | |
| gr.Interface(predict, | |
| title = title, | |
| description = description, | |
| # css=css_code, | |
| inputs=[gr.Slider(0,6,1, step= 1, label='Select number of days ahead.'), gr.Slider(0,23,1, step= 1, label='Select hour of the day.')], | |
| outputs=gr.Textbox(label='Predicted energy consumption at selected hour:'), | |
| theme = 'finlaymacklon/smooth_slate' | |
| ).launch(share=True) | |
| # gr.Interface(predict, | |
| # title = title, | |
| # description = description, | |
| # css=css_code, | |
| # inputs=["textbox","textbox"], | |
| # outputs="textbox" | |
| # ).launch(share=True) |