I am trying to predict a self generated data using some pickled xgboost model. I am getting the below attribute error:
AttributeError: 'super' object has no attribute 'get_params'.
The main task is I have 8 xgboost pickle files and I am going to predict 8 different target variables respectively.
I am attaching the code and the traceback error of the code. Please help me resolve this.
# importing the libraries
import pandas as pd
from itertools import combinations_with_replacement, permutations, product, chain
import numpy as np
import os
import pickle
import xlwings as xw
import xgboost as xgb
from xgboost.sklearn import XGBRegressor
import warnings
from sqlalchemy import create_engine
warnings.filterwarnings('ignore')
import time
# renamer function
class renamer():
def __init__(self):
self.d = dict()
def __call__(self, x):
if x not in self.d:
self.d[x] = 0
return x
else:
self.d[x] += 1
return "%s_%d" % (x, self.d[x])
# reading input files
df_input=pd.read_excel(r'D:\tata_metaliks\coal_blend_optimization\automation\input\input_data.xlsx',sheet_name='input_coal',header=0)
input_file=pd.read_excel(r'D:\tata_metaliks\coal_blend_optimization\automation\input\input_data.xlsx',sheet_name='input_coal')
# del df_input["Unnamed: 3"]
df_master=pd.read_excel(r'D:\tata_metaliks\coal_blend_optimization\automation\input\input_data.xlsx',sheet_name='grade_list')
df_input.columns=['Coal','Coal_Name','Coal_Cost','Coal_Grade']
coal=list(df_input['Coal'].values)
mydict={}
for grade in df_input.Coal_Grade.dropna().unique():
mydict[grade]={'min':df_master[df_master['GRADE']==grade].MIN[df_master[df_master['GRADE']==grade].MIN.index[0]],
'max':df_master[df_master['GRADE']==grade].MAX[df_master[df_master['GRADE']==grade].MAX.index[0]]}
# function for grade combinations with min and max
def get_combinations(dict_input):
all_list=[]
result=[]
if len(dict_input)==2:
for a in range(dict_input[list(dict_input.keys())[0]]['min'],dict_input[list(dict_input.keys())[0]]['max']+1):
for b in range(dict_input[list(dict_input.keys())[1]]['min'],dict_input[list(dict_input.keys())[1]]['max']+1):
all_list.append([a,b])
elif len(dict_input)==3:
for a in range(dict_input[list(dict_input.keys())[0]]['min'],dict_input[list(dict_input.keys())[0]]['max']+1):
for b in range(dict_input[list(dict_input.keys())[1]]['min'],dict_input[list(dict_input.keys())[1]]['max']+1):
for c in range(dict_input[list(dict_input.keys())[2]]['min'],dict_input[list(dict_input.keys())[2]]['max']+1):
all_list.append([a,b,c])
elif len(dict_input)==4:
for a in range(dict_input[list(dict_input.keys())[0]]['min'],dict_input[list(dict_input.keys())[0]]['max']+1):
for b in range(dict_input[list(dict_input.keys())[1]]['min'],dict_input[list(dict_input.keys())[1]]['max']+1):
for c in range(dict_input[list(dict_input.keys())[2]]['min'],dict_input[list(dict_input.keys())[2]]['max']+1):
for d in range(dict_input[list(dict_input.keys())[3]]['min'],dict_input[list(dict_input.keys())[3]]['max']+1):
all_list.append([a,b,c,d])
elif len(dict_input)==5:
for a in range(dict_input[list(dict_input.keys())[0]]['min'],dict_input[list(dict_input.keys())[0]]['max']+1):
for b in range(dict_input[list(dict_input.keys())[1]]['min'],dict_input[list(dict_input.keys())[1]]['max']+1):
for c in range(dict_input[list(dict_input.keys())[2]]['min'],dict_input[list(dict_input.keys())[2]]['max']+1):
for d in range(dict_input[list(dict_input.keys())[3]]['min'],dict_input[list(dict_input.keys())[3]]['max']+1):
for e in range(dict_input[list(dict_input.keys())[4]]['min'],dict_input[list(dict_input.keys())[4]]['max']+1):
all_list.append([a,b,c,d,e])
for i in all_list:
if sum(i)==100:
result.append(i)
mydf=pd.DataFrame(result)
mydf.columns=df_input.Coal_Grade.dropna().unique()
mydf=mydf.assign(**dict((el,0) for el in (set(df_master.GRADE)-set(df_input.Coal_Grade.unique()))))
df_input[df_input['Coal_Grade']==mydf.columns[0]]['Coal'][0]
return(mydf)
l1=get_combinations(mydict).to_dict('records')
grade_count=df_input.Coal_Grade.value_counts().to_dict()
grade=set(df_master.GRADE)-set(df_input.Coal_Grade.unique())
name = dict.fromkeys(grade, 0)
grade_count.update(name)
grade_count= {key : grade_count[key] for key in list(l1[0].keys())}
comb_list=[]
for row in l1:
grd_list=[]
for grd in grade_count.keys():
comb_coal=list(combinations_with_replacement(range(0,row[grd]+1),grade_count[grd]))
result_coal=[]
for i in list(comb_coal):
if sum(i)==row[grd]:
result_coal.append(i)
# Permutations
per_coal=[]
for i in result_coal:
per_coal.append(list(set(permutations(list(i)))))
# Creating Flat List
total_per_coal=[]
for x in per_coal:
for y in x:
total_per_coal.append(y)
grd_list.append(total_per_coal)
final_comb=pd.DataFrame([tuple(chain.from_iterable(prod)) for prod in product(*grd_list)])
final_comb=final_comb.assign(**row)
comb_list.append(final_comb)
final_combination=pd.concat(comb_list,sort=False)
final_combination=final_combination.reset_index(drop=True)
final_combination=final_combination.rename(dict(zip(list(final_combination.columns[:-6]),
df_input.loc[df_input.Coal_Name.notnull()]['Coal'].to_list())),axis=1)
value=dict(zip(list(set(coal)-set(list(final_combination.columns[:-6]))),
[0]*len(list(set(coal)-set(list(final_combination.columns[:-6]))))))
final_combination=final_combination.assign(**value)
final_combination=final_combination[['Coal 1','Coal 2','Coal 3','Coal 4','Coal 5',
'phcc','shcc','ss','hcc','non coking','weak coking']]
df_input["Coal_Name"][df_input["Coal_Name"].isnull()]="None"
coal_name=list(df_input["Coal_Name"])
final_combination=final_combination.rename({"Coal 1":coal_name[0],"Coal 2":coal_name[1],"Coal 3":coal_name[2],
"Coal 4":coal_name[3],"Coal 5":coal_name[4]},axis=1)
# reading the master data
master_data=pd.read_excel(r'D:\tata_metaliks\coal_blend_optimization\automation\input\input_data.xlsx',sheet_name='master_data')
# check if all coals are present
input_=list(df_input['Coal_Name'])
master_=list(master_data["Coal_Name"])
check = any(item in master_ for item in input_)
if check is True:
print ("All coals found")
final_input=pd.merge(df_input,master_data,on=['Coal_Name','Coal_Grade'],how='left')
else:
print ("All coals not found")
# adding the COA properties
data__1=pd.DataFrame()
coal1=final_combination.columns[0]
data__1["Coal_Name"] = np.where(final_combination.columns[0]==final_input["Coal_Name"].values,coal1 ,"None")
data__1=final_input[final_input["Coal_Name"]==coal1]
data__1=data__1.loc[[0]]
data__1=data__1.rename({'ash_%_coal':'c1_ash_%_coal', 'vm_%_coal':'c1_vm_%_coal', 'csn_index':'c1_csn_index',
'vitrinite distribution':'c1_vitrinite distribution', 'vitrinite':'c1_vitrinite', 'fluidity':'c1_fluidity',
'dilatation':'c1_dilatation', 'mmr':'c1_mmr'},axis=1)
data_1 = pd.DataFrame(np.repeat(data__1.values,len(final_combination),axis=0))
data_1.columns=data__1.columns
data_1.drop(columns=['Coal', 'Coal_Name','Coal_Cost', 'Coal_Grade'],inplace=True)
data__2=pd.DataFrame()
coal2=final_combination.columns[1]
data__2["Coal_Name"] = np.where(final_combination.columns[1]==final_input["Coal_Name"].values,coal2 ,"None")
data__2=final_input[final_input["Coal_Name"]==coal2]
data__2=data__2.loc[[1]]
data__2=data__2.rename({'ash_%_coal':'c2_ash_%_coal', 'vm_%_coal':'c2_vm_%_coal', 'csn_index':'c2_csn_index',
'vitrinite distribution':'c2_vitrinite distribution', 'vitrinite':'c2_vitrinite', 'fluidity':'c2_fluidity',
'dilatation':'c2_dilatation', 'mmr':'c2_mmr'},axis=1)
data_2 = pd.DataFrame(np.repeat(data__2.values,len(final_combination),axis=0))
data_2.columns=data__2.columns
data_2=data_2.drop(['Coal', 'Coal_Name','Coal_Cost', 'Coal_Grade'],axis=1)
data__3=pd.DataFrame()
coal3=final_combination.columns[2]
data__3["Coal_Name"] = np.where(final_combination.columns[2]==final_input["Coal_Name"].values,coal3,"None")
data__3=final_input[final_input["Coal_Name"]==coal3]
data__3=data__3.loc[[2]]
data__3=data__3.rename({'ash_%_coal':'c3_ash_%_coal', 'vm_%_coal':'c3_vm_%_coal', 'csn_index':'c3_csn_index',
'vitrinite distribution':'c3_vitrinite distribution', 'vitrinite':'c3_vitrinite', 'fluidity':'c3_fluidity',
'dilatation':'c3_dilatation', 'mmr':'c3_mmr'},axis=1)
data_3 = pd.DataFrame(np.repeat(data__3.values,len(final_combination),axis=0))
data_3.columns=data__3.columns
data_3=data_3.drop(['Coal', 'Coal_Name','Coal_Cost','Coal_Grade'],axis=1)
data__4=pd.DataFrame()
coal4=final_combination.columns[3]
data__4["Coal_Name"] = np.where(final_combination.columns[3]==final_input["Coal_Name"].values,coal4,"None")
data__4=final_input[final_input["Coal_Name"]==coal4]
data__4=data__4.loc[[3]]
data__4=data__4.rename({'ash_%_coal':'c4_ash_%_coal', 'vm_%_coal':'c4_vm_%_coal', 'csn_index':'c4_csn_index',
'vitrinite distribution':'c4_vitrinite distribution', 'vitrinite':'c4_vitrinite', 'fluidity':'c4_fluidity',
'dilatation':'c4_dilatation', 'mmr':'c4_mmr'},axis=1)
data_4 = pd.DataFrame(np.repeat(data__4.values,len(final_combination),axis=0))
data_4.columns=data__4.columns
data_4=data_4.drop(['Coal', 'Coal_Name','Coal_Cost', 'Coal_Grade'],axis=1)
data__5=pd.DataFrame()
coal5=final_combination.columns[4]
data__5["Coal_Name"] = np.where(final_combination.columns[4]==final_input["Coal_Name"].values,coal5,"None")
data__5=final_input[final_input["Coal_Name"]==coal5]
data__5=data__5.loc[[4]]
data__5=data__5.rename({'ash_%_coal':'c5_ash_%_coal', 'vm_%_coal':'c5_vm_%_coal', 'csn_index':'c5_csn_index',
'vitrinite distribution':'c5_vitrinite distribution', 'vitrinite':'c5_vitrinite', 'fluidity':'c5_fluidity',
'dilatation':'c5_dilatation', 'mmr':'c5_mmr'},axis=1)
data_5 = pd.DataFrame(np.repeat(data__5.values,len(final_combination),axis=0))
data_5.columns=data__5.columns
data_5=data_5.drop(['Coal', 'Coal_Name','Coal_Cost','Coal_Grade'],axis=1)
join1=data_1.join(data_2)
join2=join1.join(data_3)
join3=join2.join(data_4)
data=join3.join(data_5)
# dataframe with all the COA properties
final_combination=final_combination.join(data)
final_combination=final_combination.reset_index(drop=True)
final_combination=final_combination.rename(columns=renamer())
# renaming the columns
final_combination.rename(columns={final_combination.columns[0]: 'c1%',final_combination.columns[1]: 'c2%',
final_combination.columns[2]: 'c3%',final_combination.columns[3]: 'c4%',
final_combination.columns[4]: 'c5%'},inplace=True)
final_combination=final_combination[['c1%','c2%','c3%','c4%','c5%','phcc', 'shcc', 'ss', 'hcc', 'non coking', 'weak coking',
'c1_ash_%_coal', 'c2_ash_%_coal', 'c3_ash_%_coal', 'c4_ash_%_coal', 'c5_ash_%_coal', 'c1_vm_%_coal', 'c2_vm_%_coal',
'c3_vm_%_coal', 'c4_vm_%_coal', 'c5_vm_%_coal', 'c1_csn_index', 'c2_csn_index', 'c3_csn_index', 'c4_csn_index', 'c5_csn_index',
'c1_fluidity', 'c2_fluidity', 'c3_fluidity', 'c4_fluidity', 'c5_fluidity',
'c1_mmr', 'c2_mmr', 'c3_mmr', 'c4_mmr', 'c5_mmr',
'c1_vitrinite distribution', 'c2_vitrinite distribution',
'c3_vitrinite distribution', 'c4_vitrinite distribution', 'c5_vitrinite distribution',
'c1_vitrinite', 'c2_vitrinite', 'c3_vitrinite', 'c4_vitrinite', 'c5_vitrinite',
'c1_dilatation', 'c2_dilatation', 'c3_dilatation', 'c4_dilatation', 'c5_dilatation']]
# data pre processing
c1_prop=['c1_ash_%_coal','c1_vm_%_coal','c1_csn_index','c1_fluidity','c1_mmr',
'c1_vitrinite distribution','c1_vitrinite','c1_dilatation']
c2_prop=['c2_ash_%_coal', 'c2_vm_%_coal', 'c2_csn_index','c2_fluidity','c2_mmr',
'c2_vitrinite distribution', 'c2_vitrinite','c2_dilatation']
c3_prop=['c3_ash_%_coal','c3_vm_%_coal', 'c3_csn_index','c3_fluidity', 'c3_mmr',
'c3_vitrinite distribution','c3_vitrinite','c3_dilatation']
c4_prop=['c4_ash_%_coal','c4_vm_%_coal', 'c4_csn_index', 'c4_fluidity','c4_mmr',
'c4_vitrinite distribution', 'c4_vitrinite','c4_dilatation']
c5_prop=['c5_ash_%_coal', 'c5_vm_%_coal','c5_csn_index', 'c5_fluidity', 'c5_mmr',
'c5_vitrinite distribution', 'c5_vitrinite','c5_dilatation']
final_combination.loc[final_combination['c1%']==0,c1_prop]=0
final_combination.loc[final_combination['c2%']==0,c2_prop]=0
final_combination.loc[final_combination['c3%']==0,c3_prop]=0
final_combination.loc[final_combination['c4%']==0,c4_prop]=0
final_combination.loc[final_combination['c5%']==0,c5_prop]=0
final_combination=final_combination.reset_index(drop=True)
final_combination=final_combination.fillna(0)
# calculating blend properties
final_combination['ash_%_blend']=(final_combination['c1%']*final_combination['c1_ash_%_coal']+final_combination['c2%']*final_combination['c2_ash_%_coal']+final_combination['c3%']*final_combination['c3_ash_%_coal']+final_combination['c4%']*final_combination['c4_ash_%_coal']+final_combination['c5%']*final_combination['c5_ash_%_coal'])/100
final_combination['vm_%_blend']=(final_combination['c1%']*final_combination['c1_vm_%_coal']+final_combination['c2%']*final_combination['c2_vm_%_coal']+final_combination['c3%']*final_combination['c3_vm_%_coal']+final_combination['c4%']*final_combination['c4_vm_%_coal']+final_combination['c5%']*final_combination['c5_vm_%_coal'])/100
final_combination['csn_index_blend']=(final_combination['c1%']*final_combination['c1_csn_index']+final_combination['c2%']*final_combination['c2_csn_index']+final_combination['c3%']*final_combination['c3_csn_index']+final_combination['c4%']*final_combination['c4_csn_index']+final_combination['c5%']*final_combination['c5_csn_index'])/100
final_combination['fluidity_blend']=(final_combination['c1%']*final_combination['c1_fluidity']+final_combination['c2%']*final_combination['c2_fluidity']+final_combination['c3%']*final_combination['c3_fluidity']+final_combination['c4%']*final_combination['c4_fluidity']+final_combination['c5%']*final_combination['c5_fluidity'])/100
final_combination['mmr_blend']=(final_combination['c1%']*final_combination['c1_mmr']+final_combination['c2%']*final_combination['c2_mmr']+final_combination['c3%']*final_combination['c3_mmr']+final_combination['c4%']*final_combination['c4_mmr']+final_combination['c5%']*final_combination['c5_mmr'])/100
final_combination['vitrinite_distribution_blend']=(final_combination['c1%']*final_combination['c1_vitrinite distribution']+final_combination['c2%']*final_combination['c2_vitrinite distribution']+final_combination['c3%']*final_combination['c3_vitrinite distribution']+final_combination['c4%']*final_combination['c4_vitrinite distribution']+final_combination['c5%']*final_combination['c5_vitrinite distribution'])/100
final_combination['vitrinite_blend']=(final_combination['c1%']*final_combination['c1_vitrinite']+final_combination['c2%']*final_combination['c2_vitrinite']+final_combination['c3%']*final_combination['c3_vitrinite']+final_combination['c4%']*final_combination['c4_vitrinite']+final_combination['c5%']*final_combination['c5_vitrinite'])/100
final_combination['dilatation_blend']=(final_combination['c1%']*final_combination['c1_dilatation']+final_combination['c2%']*final_combination['c2_dilatation']+final_combination['c3%']*final_combination['c3_dilatation']+final_combination['c4%']*final_combination['c4_dilatation']+final_combination['c5%']*final_combination['c5_dilatation'])/100
final_combination.iloc[:,11:]=final_combination.iloc[:,11:].astype(float)
# loading the model
model_dict={}
for model in os.listdir(r'D:\tata_metaliks\coal_blend_optimization\automation\model_dump'):
model_dict[model.split('.')[0]]=pickle.load(open(r"D:\tata_metaliks\coal_blend_optimization\automation\model_dump\{}".format(model), "rb"))
# prediction & output Generation
prediction_dict={}
for key in model_dict.keys():
prediction_dict[key.split('_')[0]]=list(model_dict[key].predict(final_combination))
prediction_dict['vm']=0.8
# Concatenating predictions with input
df_output=pd.concat([final_combination,pd.DataFrame(prediction_dict)],axis=1)
final_input["Coal_Cost"]=final_input["Coal_Cost"].fillna(0)
# Calculating blend cost, yield and coke cost
df_output['coal_blend_cost']=(final_combination['c1%']*final_input['Coal_Cost'][0]+final_combination['c2%']*final_input['Coal_Cost'][1]+
final_combination['c3%']*final_input['Coal_Cost'][2]+final_combination['c4%']*final_input['Coal_Cost'][3]+
final_combination['c5%']*final_input['Coal_Cost'][4])/100
df_output['net_yield']=0.95*(100-final_combination['vm_%_blend']+prediction_dict['vm']-3)
df_output['coke_cost']=(df_output['coal_blend_cost']/df_output['net_yield'])*100
df_output.rename(columns={df_output.columns[0]: 'Coal 1',df_output.columns[1]: 'Coal 2',
df_output.columns[2]: 'Coal 3',df_output.columns[3]: 'Coal 4',
df_output.columns[4]: 'Coal 5'},inplace=True)
# df_input=pd.read_excel(r'D:\tata_metaliks\coal_blend_optimization\automation\input\input_data.xlsx',sheet_name='input_coal')
# del df_input["Unnamed: 3"]
# df_output=df_output.loc[((df_output['ash_%_blend']>=8) & (df_output['ash_%_blend']<=10)) &
# ((df_output['vm_%_blend']>=22.5) & (df_output['vm_%_blend']<=24)) &
# (df_output['csn_index_blend']>=6)]
df_output.to_csv(r'D:\tata_metaliks\coal_blend_optimization\automation\output\model_projections.csv',index=False)
engine=create_engine('mssql+pymssql://sa:orion@6789@PROTIVITIUAT:49915/TML')
try:
frame = df_output.to_sql('coal_blend_optimization', engine, index = False, if_exists='replace')
frame_ip= input_file.to_sql('cbo_input', engine, index = False, if_exists='replace')
except ValueError as vx:
print(vx)
except Exception as ex:
print(ex)
else:
print("Table created successfully.")
time.sleep(20)
# print ("Output Generated Successfully!!!")
#input ("Press Enter to Exit..")
The Traceback Error is below:
Traceback (most recent call last):
File "D:\tata_metaliks\coal_blend_optimization\automation\code\run_model.py", line 272, in <module>
prediction_dict[key.split('_')[0]]=list(model_dict[key].predict(final_combination))
File "C:\ProgramData\Anaconda3\lib\site-packages\xgboost\sklearn.py", line 818, in predict
if self._can_use_inplace_predict():
File "C:\ProgramData\Anaconda3\lib\site-packages\xgboost\sklearn.py", line 758, in _can_use_inplace_predict
params = self.get_params()
File "C:\ProgramData\Anaconda3\lib\site-packages\xgboost\sklearn.py", line 438, in get_params
params = super().get_params(deep)
AttributeError: 'super' object has no attribute 'get_params'