From 3fee37e4fe3f96fbf75c0215eaf6a26011262ea4 Mon Sep 17 00:00:00 2001 From: SadhulaSaiKumar Date: Fri, 12 Jan 2024 04:53:56 +0000 Subject: [PATCH] Update 'Demand_forcasting/forcasting2.py' --- Demand_forcasting/forcasting2.py | 1134 +++++++++++++++--------------- 1 file changed, 564 insertions(+), 570 deletions(-) diff --git a/Demand_forcasting/forcasting2.py b/Demand_forcasting/forcasting2.py index 17e1d56..3570758 100644 --- a/Demand_forcasting/forcasting2.py +++ b/Demand_forcasting/forcasting2.py @@ -1,571 +1,565 @@ -from flask import Flask, render_template, send_file, request, redirect, Response -import os - - -import pandas as pd -import warnings -import json -import requests -from urllib.request import urlopen -warnings.filterwarnings("ignore") - -app = Flask(__name__) - -@app.route("/", methods=["GET"]) -def home(): - return 'forcasting app running' - -###################################################################################################################### -list_output=[] - -def day(Num,df): - - - #url='https://qa.bizgaze.app/apis/v4/bizgaze/integrations/demandforecast/getitemdata' - url= get_url - response = urlopen(url) - data_json = json.loads(response.read()) - headers = { - 'Authorization':get_url_token, - #'Authorization':'stat 873f2e6f70b3483e983972f96fbf5ea4',#qa - 'Content-Type': 'application/json' - } - response = requests.request("GET", url, headers=headers, data=data_json) - #print("##############################################################") - a=response.text - # print(response.text) - - import pandas as pd - - df2 = pd.read_json(response.text, orient ='index') - df2=df2.reset_index() - df2.columns = ['key','value'] - #print(df2) - a=df2['value'][0] - - j=json.loads(a) - userdata = pd.DataFrame(j) - #df1 - itemid=userdata[['itemname','itemid']] - itemid.columns = ['ItemName', 'ItemId'] - - #df1=pd.read_csv(r'./upload/' + name) - #df1=df1[df1['obdate']!='01/01/0001'] - userdata.columns = ['journaldate','sum','itemname','itemid'] - - - # import pandas as pd - # userdata = pd.read_csv(r'C:\Users\Bizga\Desktop\forcast\5yearsitems.csv') - # itemid = userdata[['itemname', 'itemid']] - #userdata['journaldate'] = pd.to_datetime(userdata['journaldate']) - userdata["journaldate"] = userdata["journaldate"].astype(str) - userdata[["year", "month", "day"]] = userdata["journaldate"].str.split("/", expand = True) - #userdata['Month-Year']=userdata['year'].astype(str)+'-'+userdata['month'].astype(str) - item_unique_name = userdata['itemname'].unique() - - #df=pd.read_csv("C:\\Users\\Bizgaze\\2021_2022.csv") - # Group the DataFrame by the 'item' column - grouped = userdata.groupby('itemname') - - # Print the unique items in the 'item' column - #print(grouped.groups.keys()) - - # Iterate over the unique items and print the group data - for item, userdata in grouped: - print("itemname: ", item) - - item_id = userdata.iloc[-1]['itemid'] - - print(item_id) - - userdata= userdata.groupby('journaldate').sum() - userdata= userdata.reset_index() - #print(userdata) - fulldata=userdata[['journaldate','sum']] - fulldata.columns = ["Dates","SALES"] - #************************************************************************************************************************ - - ## Use Techniques Differencing - import pandas as pd - from pandas import DataFrame - - # userdata=pd.read_csv(r"C:\Users\Bizgaze\ipynb files\TS forcasting\working\139470.csv") - - userdata.columns = ['Date', 'sales','sku'] - from statsmodels.tsa.stattools import adfuller - - DATE=[] - SALES=[] - - - def adf_test(series,userdata): - result=adfuller(series) - print('ADF Statistics: {}'.format(result[0])) - print('p- value: {}'.format(result[1])) - if result[1] <= 0.05: - print("strong evidence against the null hypothesis, reject the null hypothesis. Data has no unit root and is stationary") - else: - #print(userdata) - print(stationary_test(userdata)) - print("weak evidence against null hypothesis, time series has a unit root, indicating it is non-stationary ") - - #********************************************* stationary or non-stationary ********************************************************** - def stationary_test(userdata): - data=pd.DataFrame(userdata) - for i in range(1,13): - print(i) - sales_data=DataFrame() - data['sales']=data['sales'].shift(i) - data.dropna(inplace=True) - #print( userdata['sales']) - try: - X=adf_test(data["sales"],userdata="nothing") - if "non-stationary" in str(X): - print("non-stationary") - else: - print("stationary") - #print(userdata[["Date","sales"]]) - #df_sale=pd.DataFrame(userdata) - DATE.append(data["Date"]) - SALES.append(data["sales"]) - #df4 = pd.concat([data, sales_data], axis=1) - return "done" - break - except ValueError: - pass - - try: - adf_test(userdata["sales"],userdata) - except ValueError: - pass - sales=pd.DataFrame(SALES).T - dates=pd.DataFrame(DATE).T - try: - df4 = pd.concat([dates["Date"],sales["sales"]], axis=1) - df4=df4.dropna() - print(df4) - except KeyError: - df4=userdata[['Date','sales']] - df4=df4.dropna() - print(df4) - pass - - ##################################################################################################################### - userdata=df4 - a = userdata.iloc[-1]['Date'] - userdata['Date'] = pd.to_datetime(userdata['Date']) - userdata["Date"] = userdata["Date"].astype(str) - userdata[["year", "month", "day"]] = userdata["Date"].str.split("-", expand = True) - #userdata[["year", "month"]] = userdata["Month"].str.split("-", expand=True) - #userdata = userdata[["year","month",'sum']] - userdata["year"] = userdata["year"].astype(int) - userdata["month"] = userdata["month"].astype(int) - userdata["day"] = userdata["day"].astype(int) - ##################################################################################################################### - - - list_dates=[] - import datetime - - days=int(Num)+1 - import pandas as pd - base_date=pd.to_datetime(a) - for x in range(1,days): - dates=(base_date + datetime.timedelta(days=x)) - dates=str(dates).replace(" 00:00:00","") - #print(dates) - list_dates.append(dates) - fut_date = pd.DataFrame(list_dates) - fut_date.columns = ["Dates"] - - future_dates=pd.DataFrame(list_dates) - - future_dates.columns=["Dates"] - future_dates[["year", "month", "day"]] = future_dates["Dates"].str.split("-", expand=True) - future_dates.drop(['Dates'], axis=1, inplace=True) - future_dates["year"] = future_dates["year"].astype(int) - future_dates["month"] = future_dates["month"].astype(int) - future_dates["day"] = future_dates["day"].astype(int) - #print(future_dates) - - - - ############################################################################### - userdata['sales']=userdata["sales"].astype(float) - dependent = userdata[['year','month','day']] - independent = userdata['sales'] - - import numpy as np - import pandas as pd - - import xgboost - from sklearn.model_selection import train_test_split - from sklearn.model_selection import GridSearchCV - from sklearn.metrics import roc_auc_score - - import matplotlib.pyplot as plt - - #model = xgboost.XGBRegressor() - from sklearn.ensemble import RandomForestRegressor - model = RandomForestRegressor(random_state=1,n_jobs=-1) - #model.fit(dependent, independent) - model.fit(dependent, independent) - #future=pd.read_csv('future_dates.csv') - - - future_prediction = model.predict(future_dates) - #print(future_prediction) - df=pd.DataFrame(future_prediction) - df.columns = ["SALES"] - frames = [fut_date, df] - - - result = pd.concat(frames,axis=1) - result['itemname'] = item - result['itemid'] =item_id - result.columns = ['Date','Predict','ItemName','ItemId'] - #result['Predict']=result["Predict"].astype(int) - result['UpperLimit']=result["Predict"].mean()+result['Predict'].std()*3 - result['LowerLimit']=result['Predict'].mean()-result['Predict'].std()*3 - print(result) - result.to_json('forcast.json', orient="records") - - with open('forcast.json', 'r') as json_file: - json_load = json.load(json_file) - #url = "https://demo.bizgaze.app/apis/v4/bizgaze/integrations/demandforecast/saveforecast/List" - url=post_url - - payload = json.dumps(json_load)#.replace("]", "").replace("[", "") - print(payload) - headers = { - #'Authorization': 'stat 263162e61f084d3392f162eb7ec39b2c',#demo - 'Authorization': post_url_token,#test - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print("##############################################################") - print(response.text) - - - - - - return 'done' - - - -############################################################################################################################################################# - - -def month(Num,df): - #url='https://qa.bizgaze.app/apis/v4/bizgaze/integrations/demandforecast/getitemdata' - url= get_url - response = urlopen(url) - data_json = json.loads(response.read()) - headers = { - 'Authorization':get_url_token, - #'Authorization':'stat 873f2e6f70b3483e983972f96fbf5ea4',#qa - 'Content-Type': 'application/json' - } - response = requests.request("GET", url, headers=headers, data=data_json) - #print("##############################################################") - a=response.text - # print(response.text) - - import pandas as pd - - df2 = pd.read_json(response.text, orient ='index') - df2=df2.reset_index() - df2.columns = ['key','value'] - #print(df2) - a=df2['value'][0] - - j=json.loads(a) - userdata = pd.DataFrame(j) - - #filePath='path.csv' - # if os.path.exists(filePath): - # print('file exist') - # os.remove('path.csv') - # else: - # print("file doesn't exists") - # pass - #userdata=df - itemid=userdata[['itemname','itemid']] - itemid.columns = ['ItemName', 'ItemId'] - - #df1=pd.read_csv(r'./upload/' + name) - #df1=df1[df1['obdate']!='01/01/0001'] - userdata.columns = ['journaldate','sum','itemname','itemid'] - # import pandas as pd - # userdata = pd.read_csv(r'C:\Users\Bizga\Desktop\forcast\5yearsitems.csv') - # itemid = userdata[['itemname', 'itemid']] - #userdata['journaldate'] = pd.to_datetime(userdata['journaldate']) - userdata["journaldate"] = userdata["journaldate"].astype(str) - userdata[["year", "month", "day"]] = userdata["journaldate"].str.split("-", expand = True) - userdata['Month-Year']=userdata['year'].astype(str)+'-'+userdata['month'].astype(str) - item_unique_name = userdata['itemname'].unique() - - #df=pd.read_csv("C:\\Users\\Bizgaze\\2021_2022.csv") - # Group the DataFrame by the 'item' column - grouped = userdata.groupby('itemname') - - # Print the unique items in the 'item' column - #print(grouped.groups.keys()) - - # Iterate over the unique items and print the group data - for item, userdata in grouped: - print("itemname: ", item) - - item_id = userdata.iloc[-1]['itemid'] - - print(item_id) - - userdata= userdata.groupby('Month-Year').sum() - userdata= userdata.reset_index() - - fulldata=userdata[['Month-Year','sum']] - fulldata.columns = ["Dates","SALES"] - #************************************************************************************************************************ - - ## Use Techniques Differencing - import pandas as pd - from pandas import DataFrame - - # userdata=pd.read_csv(r"C:\Users\Bizgaze\ipynb files\TS forcasting\working\139470.csv") - userdata=userdata[['Month-Year','sum','itemid']] - userdata.columns = ['Month', 'sales','sku'] - from statsmodels.tsa.stattools import adfuller - - DATE=[] - SALES=[] - - - def adf_test(series,userdata): - result=adfuller(series) - print('ADF Statistics: {}'.format(result[0])) - print('p- value: {}'.format(result[1])) - if result[1] <= 0.05: - print("strong evidence against the null hypothesis, reject the null hypothesis. Data has no unit root and is stationary") - else: - #print(userdata) - print(stationary_test(userdata)) - print("weak evidence against null hypothesis, time series has a unit root, indicating it is non-stationary ") - - - #********************************************* stationary or non-stationary ********************************************************** - def stationary_test(userdata): - data=pd.DataFrame(userdata) - for i in range(1,13): - print(i) - sales_data=DataFrame() - data['sales']=data['sales'].shift(i) - data.dropna(inplace=True) - #print( userdata['sales']) - try: - X=adf_test(data["sales"],userdata="nothing") - if "non-stationary" in str(X): - print("non-stationary") - else: - print("stationary") - #print(userdata[["Month","sales"]]) - #df_sale=pd.DataFrame(userdata) - DATE.append(data["Month"]) - SALES.append(data["sales"]) - #df4 = pd.concat([data, sales_data], axis=1) - return "done" - break - except ValueError: - pass - - try: - adf_test(userdata["sales"],userdata) - except ValueError: - pass - sales=pd.DataFrame(SALES).T - dates=pd.DataFrame(DATE).T - try: - df4 = pd.concat([dates["Month"],sales["sales"]], axis=1) - df4=df4.dropna() - print(df4) - except KeyError: - df4=userdata[['Month','sales']] - df4=df4.dropna() - print(df4) - pass - - ##################################################################################################################### - userdata=df4 - a = userdata.iloc[-1]['Month'] - userdata[["year", "month"]] = userdata["Month"].str.split("-", expand=True) - #userdata = userdata[["year","month",'sum']] - userdata["year"] = userdata["year"].astype(int) - userdata["month"] = userdata["month"].astype(int) - ##################################################################################################################### - - #a = userdata.iloc[-1]['Month-Year'] - from datetime import datetime - from dateutil.relativedelta import relativedelta - import pandas as pd - months_value = int(Num)+1 - base_month = pd.to_datetime(a) - list_months = [] - - def months(MD): - date_after_month = ((base_month + relativedelta(months=MD)).strftime('%Y-%m')) - # print - list_months.append(date_after_month) - - for i in range(1, months_value): - months(i) - - future_dates = pd.DataFrame(list_months) - - future_dates.columns = ["Dates"] - - fut_date = pd.DataFrame(list_months) - fut_date.columns = ["Dates"] - - future_dates[["year", "month"]] = future_dates["Dates"].str.split("-", expand=True) - future_dates.drop(['Dates'], axis=1, inplace=True) - future_dates["year"] = future_dates["year"].astype(int) - future_dates["month"] = future_dates["month"].astype(int) - - - - - ############################################################################### - userdata['sales']=userdata["sales"].astype(float) - dependent = userdata[['year','month']] - independent = userdata['sales'] - - import numpy as np - import pandas as pd - - import xgboost - from sklearn.model_selection import train_test_split - from sklearn.model_selection import GridSearchCV - from sklearn.metrics import roc_auc_score - - import matplotlib.pyplot as plt - - #model = xgboost.XGBRegressor() - from sklearn.ensemble import RandomForestRegressor - model = RandomForestRegressor(random_state=1,n_jobs=-1) - model.fit(dependent, independent) - #future=pd.read_csv('future_dates.csv') - - - future_prediction = model.predict(future_dates) - #print(future_prediction) - df=pd.DataFrame(future_prediction) - df.columns = ["SALES"] - frames = [fut_date, df] - - - result = pd.concat(frames,axis=1) - result['itemname'] = item - result['itemid'] =item_id - result.columns = ['Date','Predict','ItemName','ItemId'] - #result['Predict']=result["Predict"].astype(int) - result['UpperLimit']=result["Predict"].mean()+result['Predict'].std()*3 - result['LowerLimit']=result['Predict'].mean()-result['Predict'].std()*3 - result["LowerLimit"][result["LowerLimit"] < 0] = 0 - print(result) - result.to_json('forcast.json', orient="records") - - with open('forcast.json', 'r') as json_file: - json_load = json.load(json_file) - #url = "https://demo.bizgaze.app/apis/v4/bizgaze/integrations/demandforecast/saveforecast/List" - url=post_url - - payload = json.dumps(json_load)#.replace("]", "").replace("[", "") - print(payload) - headers = { - #'Authorization': 'stat 263162e61f084d3392f162eb7ec39b2c',#demo - 'Authorization': post_url_token,#test - 'Content-Type': 'application/json' - } - response = requests.request("POST", url, headers=headers, data=payload) - print("##############################################################") - print(response.text) - - # filePath='path.csv' - - - # if os.path.exists(filePath): - # print('file exist') - # #userdata = pd.DataFrame(data) - # result.to_csv('path.csv', mode='a',index=False, header=False) - - # else: - # print("file as it doesn't exists") - # #result = pd.DataFrame(data) - # result.to_csv('path.csv', index=False) - - - - # result=pd.read_csv('path.csv') - # result.to_json('forcast.json', orient="records") - # import json - - # # open the JSON file and read its contents - # with open(r'forcast.json', 'r') as f: - # json_data = json.load(f) - - # print the JSON data - #print(json_data) - - #output={"response":"success","result":json_data} - #print(output) - return 'done' - - - -############################################################################################################################################################### - -##################################################################################################################### - -@app.route("/sales_forcast", methods=["GET", "POST"]) -def sales_forcast(): - #wise= request.args.get('wise').replace('{','').replace('}','') - #Num= request.args.get('value').replace('{','').replace('}','') - #print(wise) - #print(Num) - Dataset = request.get_json() - a = url_list - wise = a['wise'] - # print(x) - Num = a['future_dates'] - get_url = a['get_url'] - get_url_token = a['get_url_token'] - post_url = a['post_url'] - post_url_token = a['post_url_token'] - - #print(Dataset) - import pandas as pd - df=pd.DataFrame(Dataset) - print(df) - # a = Dataset - #x = a['wise'] - # cmd = "python C:\\Users\\Bizga\\Desktop\\forcast\\XGdaywise.py" - # os.system(cmd) - - #split=wise - # wise='month' - # Num=5 - if wise=='days': - print('daywise groupby') - output=day(Num) - # cmd = "python C:\\Users\\Bizga\\Desktop\\forcast\\XGdaywise.py"+" "+ Num - # os.system(cmd) - else: - print('monthwise groupby') - output=month(Num) - # payload = json.dumps(output) - # payload_list="["+payload+"]" - - return output - -if __name__ == "__main__": +from flask import Flask, render_template, send_file, request, redirect, Response +import os +import pandas as pd +import warnings +import json +import requests +from urllib.request import urlopen +warnings.filterwarnings("ignore") + +app = Flask(__name__) + +@app.route("/", methods=["GET"]) +def home(): + return 'forcasting app running' + +###################################################################################################################### +list_output=[] + +def day(Num,get_url,get_url_token,post_url,post_url_token): + + + #url='https://qa.bizgaze.app/apis/v4/bizgaze/integrations/demandforecast/getitemdata' + url= get_url + response = urlopen(url) + data_json = json.loads(response.read()) + headers = { + 'Authorization':get_url_token, + #'Authorization':'stat 873f2e6f70b3483e983972f96fbf5ea4',#qa + 'Content-Type': 'application/json' + } + response = requests.request("GET", url, headers=headers, data=data_json) + #print("##############################################################") + a=response.text + # print(response.text) + + import pandas as pd + + df2 = pd.read_json(response.text, orient ='index') + df2=df2.reset_index() + df2.columns = ['key','value'] + #print(df2) + a=df2['value'][0] + + j=json.loads(a) + userdata = pd.DataFrame(j) + #df1 + itemid=userdata[['itemname','itemid']] + itemid.columns = ['ItemName', 'ItemId'] + + #df1=pd.read_csv(r'./upload/' + name) + #df1=df1[df1['obdate']!='01/01/0001'] + userdata.columns = ['journaldate','sum','itemname','itemid'] + + + # import pandas as pd + # userdata = pd.read_csv(r'C:\Users\Bizga\Desktop\forcast\5yearsitems.csv') + # itemid = userdata[['itemname', 'itemid']] + #userdata['journaldate'] = pd.to_datetime(userdata['journaldate']) + userdata["journaldate"] = userdata["journaldate"].astype(str) + userdata[["year", "month", "day"]] = userdata["journaldate"].str.split("/", expand = True) + #userdata['Month-Year']=userdata['year'].astype(str)+'-'+userdata['month'].astype(str) + item_unique_name = userdata['itemname'].unique() + + #df=pd.read_csv("C:\\Users\\Bizgaze\\2021_2022.csv") + # Group the DataFrame by the 'item' column + grouped = userdata.groupby('itemname') + + # Print the unique items in the 'item' column + #print(grouped.groups.keys()) + + # Iterate over the unique items and print the group data + for item, userdata in grouped: + print("itemname: ", item) + + item_id = userdata.iloc[-1]['itemid'] + + print(item_id) + + userdata= userdata.groupby('journaldate').sum() + userdata= userdata.reset_index() + #print(userdata) + fulldata=userdata[['journaldate','sum']] + fulldata.columns = ["Dates","SALES"] + #************************************************************************************************************************ + + ## Use Techniques Differencing + import pandas as pd + from pandas import DataFrame + + # userdata=pd.read_csv(r"C:\Users\Bizgaze\ipynb files\TS forcasting\working\139470.csv") + + userdata.columns = ['Date', 'sales','sku'] + from statsmodels.tsa.stattools import adfuller + + DATE=[] + SALES=[] + + + def adf_test(series,userdata): + result=adfuller(series) + print('ADF Statistics: {}'.format(result[0])) + print('p- value: {}'.format(result[1])) + if result[1] <= 0.05: + print("strong evidence against the null hypothesis, reject the null hypothesis. Data has no unit root and is stationary") + else: + #print(userdata) + print(stationary_test(userdata)) + print("weak evidence against null hypothesis, time series has a unit root, indicating it is non-stationary ") + + #********************************************* stationary or non-stationary ********************************************************** + def stationary_test(userdata): + data=pd.DataFrame(userdata) + for i in range(1,13): + print(i) + sales_data=DataFrame() + data['sales']=data['sales'].shift(i) + data.dropna(inplace=True) + #print( userdata['sales']) + try: + X=adf_test(data["sales"],userdata="nothing") + if "non-stationary" in str(X): + print("non-stationary") + else: + print("stationary") + #print(userdata[["Date","sales"]]) + #df_sale=pd.DataFrame(userdata) + DATE.append(data["Date"]) + SALES.append(data["sales"]) + #df4 = pd.concat([data, sales_data], axis=1) + return "done" + break + except ValueError: + pass + + try: + adf_test(userdata["sales"],userdata) + except ValueError: + pass + sales=pd.DataFrame(SALES).T + dates=pd.DataFrame(DATE).T + try: + df4 = pd.concat([dates["Date"],sales["sales"]], axis=1) + df4=df4.dropna() + print(df4) + except KeyError: + df4=userdata[['Date','sales']] + df4=df4.dropna() + print(df4) + pass + + ##################################################################################################################### + userdata=df4 + a = userdata.iloc[-1]['Date'] + userdata['Date'] = pd.to_datetime(userdata['Date']) + userdata["Date"] = userdata["Date"].astype(str) + userdata[["year", "month", "day"]] = userdata["Date"].str.split("-", expand = True) + #userdata[["year", "month"]] = userdata["Month"].str.split("-", expand=True) + #userdata = userdata[["year","month",'sum']] + userdata["year"] = userdata["year"].astype(int) + userdata["month"] = userdata["month"].astype(int) + userdata["day"] = userdata["day"].astype(int) + ##################################################################################################################### + + + list_dates=[] + import datetime + + days=int(Num)+1 + import pandas as pd + base_date=pd.to_datetime(a) + for x in range(1,days): + dates=(base_date + datetime.timedelta(days=x)) + dates=str(dates).replace(" 00:00:00","") + #print(dates) + list_dates.append(dates) + fut_date = pd.DataFrame(list_dates) + fut_date.columns = ["Dates"] + + future_dates=pd.DataFrame(list_dates) + + future_dates.columns=["Dates"] + future_dates[["year", "month", "day"]] = future_dates["Dates"].str.split("-", expand=True) + future_dates.drop(['Dates'], axis=1, inplace=True) + future_dates["year"] = future_dates["year"].astype(int) + future_dates["month"] = future_dates["month"].astype(int) + future_dates["day"] = future_dates["day"].astype(int) + #print(future_dates) + + + + ############################################################################### + userdata['sales']=userdata["sales"].astype(float) + dependent = userdata[['year','month','day']] + independent = userdata['sales'] + + import numpy as np + import pandas as pd + + import xgboost + from sklearn.model_selection import train_test_split + from sklearn.model_selection import GridSearchCV + from sklearn.metrics import roc_auc_score + + import matplotlib.pyplot as plt + + #model = xgboost.XGBRegressor() + from sklearn.ensemble import RandomForestRegressor + model = RandomForestRegressor(random_state=1,n_jobs=-1) + #model.fit(dependent, independent) + model.fit(dependent, independent) + #future=pd.read_csv('future_dates.csv') + + + future_prediction = model.predict(future_dates) + #print(future_prediction) + df=pd.DataFrame(future_prediction) + df.columns = ["SALES"] + frames = [fut_date, df] + + + result = pd.concat(frames,axis=1) + result['itemname'] = item + result['itemid'] =item_id + result.columns = ['Date','Predict','ItemName','ItemId'] + #result['Predict']=result["Predict"].astype(int) + result['UpperLimit']=result["Predict"].mean()+result['Predict'].std()*3 + result['LowerLimit']=result['Predict'].mean()-result['Predict'].std()*3 + print(result) + result.to_json('forcast.json', orient="records") + + with open('forcast.json', 'r') as json_file: + json_load = json.load(json_file) + #url = "https://demo.bizgaze.app/apis/v4/bizgaze/integrations/demandforecast/saveforecast/List" + url=post_url + + payload = json.dumps(json_load)#.replace("]", "").replace("[", "") + print(payload) + headers = { + #'Authorization': 'stat 263162e61f084d3392f162eb7ec39b2c',#demo + 'Authorization': post_url_token,#test + 'Content-Type': 'application/json' + } + response = requests.request("POST", url, headers=headers, data=payload) + print("##############################################################") + print(response.text) + + return 'done' + + + +############################################################################################################################################################# + + +def month(Num,get_url,get_url_token,post_url,post_url_token): + #url='https://qa.bizgaze.app/apis/v4/bizgaze/integrations/demandforecast/getitemdata' + url= get_url + response = urlopen(url) + data_json = json.loads(response.read()) + headers = { + 'Authorization':get_url_token, + #'Authorization':'stat 873f2e6f70b3483e983972f96fbf5ea4',#qa + 'Content-Type': 'application/json' + } + response = requests.request("GET", url, headers=headers, data=data_json) + #print("##############################################################") + a=response.text + # print(response.text) + + import pandas as pd + + df2 = pd.read_json(response.text, orient ='index') + df2=df2.reset_index() + df2.columns = ['key','value'] + #print(df2) + a=df2['value'][0] + + j=json.loads(a) + userdata = pd.DataFrame(j) + + #filePath='path.csv' + # if os.path.exists(filePath): + # print('file exist') + # os.remove('path.csv') + # else: + # print("file doesn't exists") + # pass + #userdata=df + itemid=userdata[['itemname','itemid']] + itemid.columns = ['ItemName', 'ItemId'] + + #df1=pd.read_csv(r'./upload/' + name) + #df1=df1[df1['obdate']!='01/01/0001'] + userdata.columns = ['journaldate','sum','itemname','itemid'] + # import pandas as pd + # userdata = pd.read_csv(r'C:\Users\Bizga\Desktop\forcast\5yearsitems.csv') + # itemid = userdata[['itemname', 'itemid']] + #userdata['journaldate'] = pd.to_datetime(userdata['journaldate']) + userdata["journaldate"] = userdata["journaldate"].astype(str) + userdata[["year", "month", "day"]] = userdata["journaldate"].str.split("-", expand = True) + userdata['Month-Year']=userdata['year'].astype(str)+'-'+userdata['month'].astype(str) + item_unique_name = userdata['itemname'].unique() + + #df=pd.read_csv("C:\\Users\\Bizgaze\\2021_2022.csv") + # Group the DataFrame by the 'item' column + grouped = userdata.groupby('itemname') + + # Print the unique items in the 'item' column + #print(grouped.groups.keys()) + + # Iterate over the unique items and print the group data + for item, userdata in grouped: + print("itemname: ", item) + + item_id = userdata.iloc[-1]['itemid'] + + print(item_id) + + userdata= userdata.groupby('Month-Year').sum() + userdata= userdata.reset_index() + + fulldata=userdata[['Month-Year','sum']] + fulldata.columns = ["Dates","SALES"] + #************************************************************************************************************************ + + ## Use Techniques Differencing + import pandas as pd + from pandas import DataFrame + + # userdata=pd.read_csv(r"C:\Users\Bizgaze\ipynb files\TS forcasting\working\139470.csv") + userdata=userdata[['Month-Year','sum','itemid']] + userdata.columns = ['Month', 'sales','sku'] + from statsmodels.tsa.stattools import adfuller + + DATE=[] + SALES=[] + + + def adf_test(series,userdata): + result=adfuller(series) + print('ADF Statistics: {}'.format(result[0])) + print('p- value: {}'.format(result[1])) + if result[1] <= 0.05: + print("strong evidence against the null hypothesis, reject the null hypothesis. Data has no unit root and is stationary") + else: + #print(userdata) + print(stationary_test(userdata)) + print("weak evidence against null hypothesis, time series has a unit root, indicating it is non-stationary ") + + + #********************************************* stationary or non-stationary ********************************************************** + def stationary_test(userdata): + data=pd.DataFrame(userdata) + for i in range(1,13): + print(i) + sales_data=DataFrame() + data['sales']=data['sales'].shift(i) + data.dropna(inplace=True) + #print( userdata['sales']) + try: + X=adf_test(data["sales"],userdata="nothing") + if "non-stationary" in str(X): + print("non-stationary") + else: + print("stationary") + #print(userdata[["Month","sales"]]) + #df_sale=pd.DataFrame(userdata) + DATE.append(data["Month"]) + SALES.append(data["sales"]) + #df4 = pd.concat([data, sales_data], axis=1) + return "done" + break + except ValueError: + pass + + try: + adf_test(userdata["sales"],userdata) + except ValueError: + pass + sales=pd.DataFrame(SALES).T + dates=pd.DataFrame(DATE).T + try: + df4 = pd.concat([dates["Month"],sales["sales"]], axis=1) + df4=df4.dropna() + print(df4) + except KeyError: + df4=userdata[['Month','sales']] + df4=df4.dropna() + print(df4) + pass + + ##################################################################################################################### + userdata=df4 + a = userdata.iloc[-1]['Month'] + userdata[["year", "month"]] = userdata["Month"].str.split("-", expand=True) + #userdata = userdata[["year","month",'sum']] + userdata["year"] = userdata["year"].astype(int) + userdata["month"] = userdata["month"].astype(int) + ##################################################################################################################### + + #a = userdata.iloc[-1]['Month-Year'] + from datetime import datetime + from dateutil.relativedelta import relativedelta + import pandas as pd + months_value = int(Num)+1 + base_month = pd.to_datetime(a) + list_months = [] + + def months(MD): + date_after_month = ((base_month + relativedelta(months=MD)).strftime('%Y-%m')) + # print + list_months.append(date_after_month) + + for i in range(1, months_value): + months(i) + + future_dates = pd.DataFrame(list_months) + + future_dates.columns = ["Dates"] + + fut_date = pd.DataFrame(list_months) + fut_date.columns = ["Dates"] + + future_dates[["year", "month"]] = future_dates["Dates"].str.split("-", expand=True) + future_dates.drop(['Dates'], axis=1, inplace=True) + future_dates["year"] = future_dates["year"].astype(int) + future_dates["month"] = future_dates["month"].astype(int) + + + + + ############################################################################### + userdata['sales']=userdata["sales"].astype(float) + dependent = userdata[['year','month']] + independent = userdata['sales'] + + import numpy as np + import pandas as pd + + import xgboost + from sklearn.model_selection import train_test_split + from sklearn.model_selection import GridSearchCV + from sklearn.metrics import roc_auc_score + + import matplotlib.pyplot as plt + + #model = xgboost.XGBRegressor() + from sklearn.ensemble import RandomForestRegressor + model = RandomForestRegressor(random_state=1,n_jobs=-1) + model.fit(dependent, independent) + #future=pd.read_csv('future_dates.csv') + + + future_prediction = model.predict(future_dates) + #print(future_prediction) + df=pd.DataFrame(future_prediction) + df.columns = ["SALES"] + frames = [fut_date, df] + + + result = pd.concat(frames,axis=1) + result['itemname'] = item + result['itemid'] =item_id + result.columns = ['Date','Predict','ItemName','ItemId'] + #result['Predict']=result["Predict"].astype(int) + result['UpperLimit']=result["Predict"].mean()+result['Predict'].std()*3 + result['LowerLimit']=result['Predict'].mean()-result['Predict'].std()*3 + result["LowerLimit"][result["LowerLimit"] < 0] = 0 + print(result) + result.to_json('forcast.json', orient="records") + + with open('forcast.json', 'r') as json_file: + json_load = json.load(json_file) + #url = "https://demo.bizgaze.app/apis/v4/bizgaze/integrations/demandforecast/saveforecast/List" + url=post_url + + payload = json.dumps(json_load)#.replace("]", "").replace("[", "") + print(payload) + headers = { + #'Authorization': 'stat 263162e61f084d3392f162eb7ec39b2c',#demo + 'Authorization': post_url_token,#test + 'Content-Type': 'application/json' + } + response = requests.request("POST", url, headers=headers, data=payload) + print("##############################################################") + print(response.text) + + # filePath='path.csv' + + + # if os.path.exists(filePath): + # print('file exist') + # #userdata = pd.DataFrame(data) + # result.to_csv('path.csv', mode='a',index=False, header=False) + + # else: + # print("file as it doesn't exists") + # #result = pd.DataFrame(data) + # result.to_csv('path.csv', index=False) + + + + # result=pd.read_csv('path.csv') + # result.to_json('forcast.json', orient="records") + # import json + + # # open the JSON file and read its contents + # with open(r'forcast.json', 'r') as f: + # json_data = json.load(f) + + # print the JSON data + #print(json_data) + + #output={"response":"success","result":json_data} + #print(output) + return 'done' + + + +############################################################################################################################################################### + +##################################################################################################################### + +@app.route("/sales_forcast", methods=["GET", "POST"]) +def sales_forcast(): + #wise= request.args.get('wise').replace('{','').replace('}','') + #Num= request.args.get('value').replace('{','').replace('}','') + #print(wise) + #print(Num) + Dataset = request.get_json() + a = url_list + wise = a['wise'] + # print(x) + Num = a['future_dates'] + get_url = a['get_url'] + get_url_token = a['get_url_token'] + post_url = a['post_url'] + post_url_token = a['post_url_token'] + + #print(Dataset) + import pandas as pd + df=pd.DataFrame(Dataset) + print(df) + # a = Dataset + #x = a['wise'] + # cmd = "python C:\\Users\\Bizga\\Desktop\\forcast\\XGdaywise.py" + # os.system(cmd) + + #split=wise + # wise='month' + # Num=5 + if wise=='days': + print('daywise groupby') + output=day(Num,get_url,get_url_token,post_url,post_url_token) + # cmd = "python C:\\Users\\Bizga\\Desktop\\forcast\\XGdaywise.py"+" "+ Num + # os.system(cmd) + else: + print('monthwise groupby') + output=month(Num,get_url,get_url_token,post_url,post_url_token) + # payload = json.dumps(output) + # payload_list="["+payload+"]" + + return output + +if __name__ == "__main__": app.run(host='0.0.0.0', port=8082) \ No newline at end of file