Upload files to 'Demand_forcasting'
Dieser Commit ist enthalten in:
@@ -0,0 +1,571 @@
|
||||
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__":
|
||||
app.run(host='0.0.0.0', port=8082)
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren