|
from joblib import dump, load
|
|
import pandas as pd
|
|
from sklearn import metrics
|
|
from flask import flash
|
|
import numpy as np
|
|
import pandas as pd
|
|
from sklearn.preprocessing import LabelEncoder
|
|
from sklearn.metrics.pairwise import cosine_similarity
|
|
from sklearn import metrics
|
|
|
|
|
|
def data_similarity(df,pt,index,column,value):
|
|
|
|
index = np.where(pt.index==index)[0][0]
|
|
similarity_scores = cosine_similarity(pt)
|
|
similar_items = sorted(list(enumerate(similarity_scores[index])),key=lambda x:x[1],reverse=True)[1:2]
|
|
|
|
data = []
|
|
for i in similar_items:
|
|
item = []
|
|
temp_df = df[df['index'] == pt.index[i[0]]]
|
|
item.extend(list(temp_df.drop_duplicates(index)[value].values))
|
|
|
|
|
|
|
|
data.append(item)
|
|
list = [item.item() if isinstance(item, np.generic) else item for sublist in data for item in sublist]
|
|
|
|
original_values = [list['Change_cts_value'].inverse_transform([val]) for val in list]
|
|
|
|
return original_values
|
|
|
|
def recommendation_generator(df):
|
|
try:
|
|
pivot_cts = df.pivot_table(index='EngCts', columns='MkblCts', values='Change_cts_value')
|
|
pivot_shp = df.pivot_table(index='EngShp', columns='MkblShp', values='change_shape_value')
|
|
pivot_qua = df.pivot_table(index='EngQua', columns='MkblQua', values='Change_quality_value')
|
|
pivot_col = df.pivot_table(index='EngCol', columns='MkblCol', values='Change_color_value')
|
|
pivot_cut = df.pivot_table(index='EngCut', columns='MkblCut', values='Change_cut_value')
|
|
|
|
|
|
|
|
|
|
cts_data = data_similarity(df,pivot_cts,'EngCts','MkblCts','Change_cts_value')
|
|
shp_data = data_similarity(df,pivot_shp,'EngShp','MkblShp','Change_shape_value')
|
|
qua_data = data_similarity(df,pivot_qua,'EngQua','MkblQua','Change_quality_value')
|
|
col_data = data_similarity(df,pivot_col,'EngCol','MkblCol','Change_color_value')
|
|
cut_data = data_similarity(df,pivot_cut,'EngCut','MkblCut','Change_cut_value')
|
|
|
|
return cts_data,shp_data,qua_data,col_data,cut_data
|
|
|
|
except Exception as e:
|
|
flash(f'Error generating recommendation: {e}', 'error')
|
|
return None
|
|
|
|
def classification_report(df):
|
|
try:
|
|
classifcation_data = df[["EngGraphCts","EngCts","EngShp","EngQua","EngCol","EngCut","EngPol","EngSym","EngFlo","EngNts","EngMikly","EngLab","EngAmt",
|
|
"MkblCts","MkblShp","MkblQua","MkblCol","MkblCut","MkblPol","MkblSym","MkblFlo","MkblNts","MkblMikly","MkblLab","MkblAmt"]]
|
|
|
|
|
|
|
|
|
|
|
|
classifcation_data["Cts_diff_eng_mkbl"] = round(classifcation_data["EngCts"] - classifcation_data["MkblCts"],2)
|
|
|
|
|
|
classifcation_data['Change_cts_value'] = classifcation_data['Cts_diff_eng_mkbl'].apply(
|
|
lambda x: str(x)+' negative change' if x < 0 else (str(x)+' positive change' if x > 0 else 'no change')
|
|
)
|
|
|
|
|
|
classifcation_data['Change_shape_value'] = classifcation_data.apply(
|
|
lambda row: str(row['EngShp'])+' to '+str(row['MkblShp'])+' shape change' if row['EngShp'] != row['MkblShp'] else 'shape not change', axis=1
|
|
)
|
|
|
|
|
|
classifcation_data['Change_quality_value'] = classifcation_data.apply(
|
|
lambda row: str(row['EngQua'])+' to '+str(row['MkblQua'])+' quality change' if row['EngQua'] != row['MkblQua'] else 'quality not change', axis=1
|
|
)
|
|
|
|
|
|
classifcation_data['Change_color_value'] = classifcation_data.apply(
|
|
lambda row: str(row['EngCol'])+' to '+str(row['MkblCol'])+' color change' if row['EngCol'] != row['MkblCol'] else 'color not change', axis=1
|
|
)
|
|
|
|
|
|
classifcation_data['Change_cut_value'] = classifcation_data.apply(
|
|
lambda row: str(row['EngCut'])+' to '+str(row['MkblCut'])+' cut change' if row['EngCut'] != row['MkblCut'] else 'cut not change', axis=1
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
s = (classifcation_data.dtypes =="object")
|
|
object_cols = list(s[s].index)
|
|
print("Categorical variables:")
|
|
print(object_cols)
|
|
|
|
|
|
label_data = classifcation_data.copy()
|
|
|
|
|
|
label_encoder = LabelEncoder()
|
|
for col in object_cols:
|
|
label_data[col] = label_encoder.fit_transform(label_data[col])
|
|
dump(label_encoder, f"./AI_In_Diamond_Industry/Label_encoders/label_encoder_{col}.joblib")
|
|
|
|
label_data.head()
|
|
|
|
|
|
|
|
|
|
df=classifcation_data.copy()
|
|
|
|
=recommendation_generator(df)
|
|
|
|
|
|
|
|
|
|
return label_data
|
|
except Exception as e:
|
|
flash(f'Error generating classification report: {e}', 'error')
|
|
return None
|
|
|
|
|
|
|
|
|
|
|