Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -38,9 +38,7 @@ from sklearn.model_selection import train_test_split, cross_val_score, Randomize
|
|
| 38 |
import lightgbm as lgb
|
| 39 |
from catboost import CatBoostRegressor
|
| 40 |
from sklearn.ensemble import StackingRegressor
|
| 41 |
-
|
| 42 |
-
import pandas as pd
|
| 43 |
-
import json # ✅ Add this line
|
| 44 |
|
| 45 |
app = Flask(__name__)
|
| 46 |
|
|
@@ -82,45 +80,34 @@ os.makedirs(app.config['MODEL_FOLDER'], exist_ok=True)
|
|
| 82 |
# ------------------------------
|
| 83 |
|
| 84 |
# Prediction analysis models loaded from Hugging Face.
|
| 85 |
-
src_path = hf_hub_download(
|
| 86 |
-
repo_id="WebashalarForML/Diamond_model_",
|
| 87 |
-
filename="models_list/mkble/DecisionTree_best_pipeline_mkble_1_to_1.49.pkl",
|
| 88 |
-
cache_dir=MODEL_FOLDER
|
| 89 |
-
)
|
| 90 |
-
dst_path = os.path.join(MODEL_FOLDER, "DecisionTree_best_pipeline_mkble_1_to_1.49.pkl")
|
| 91 |
-
shutil.copy(src_path, dst_path)
|
| 92 |
-
makable_model = load(dst_path)
|
| 93 |
|
| 94 |
-
'''
|
| 95 |
src_path = hf_hub_download(
|
| 96 |
repo_id="WebashalarForML/Diamond_model_",
|
| 97 |
-
filename="models_list/
|
| 98 |
cache_dir=MODEL_FOLDER
|
| 99 |
)
|
| 100 |
-
dst_path = os.path.join(MODEL_FOLDER, "
|
| 101 |
shutil.copy(src_path, dst_path)
|
| 102 |
-
|
| 103 |
-
|
| 104 |
|
| 105 |
src_path = hf_hub_download(
|
| 106 |
repo_id="WebashalarForML/Diamond_model_",
|
| 107 |
-
filename="models_list/
|
| 108 |
cache_dir=MODEL_FOLDER
|
| 109 |
)
|
| 110 |
-
dst_path = os.path.join(MODEL_FOLDER, "
|
| 111 |
shutil.copy(src_path, dst_path)
|
| 112 |
-
|
| 113 |
-
|
| 114 |
|
|
|
|
| 115 |
src_path = hf_hub_download(
|
| 116 |
repo_id="WebashalarForML/Diamond_model_",
|
| 117 |
-
filename="models_list/
|
| 118 |
cache_dir=MODEL_FOLDER
|
| 119 |
)
|
| 120 |
-
dst_path = os.path.join(MODEL_FOLDER, "
|
| 121 |
shutil.copy(src_path, dst_path)
|
| 122 |
-
|
| 123 |
-
'''
|
| 124 |
|
| 125 |
#classsification model on the task
|
| 126 |
src_path = hf_hub_download(
|
|
@@ -132,49 +119,13 @@ dst_path = os.path.join(MODEL_FOLDER, "3_pipeline.pkl")
|
|
| 132 |
shutil.copy(src_path, dst_path)
|
| 133 |
mkble_amt_class_model = load(dst_path)
|
| 134 |
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
print("makable_model type:", type(makable_model))
|
| 139 |
#print("grade_model type:", type(grade_model))
|
| 140 |
#print("bygrade_model type:", type(bygrade_model))
|
| 141 |
#print("gia_model type:", type(gia_model))
|
| 142 |
print("================================")
|
| 143 |
print("mkble_amt_class_model type:", type(mkble_amt_class_model))
|
| 144 |
|
| 145 |
-
#gia_model = load("models/StackingRegressor_best_pipeline_mkble_0_to_1.01.pkl")
|
| 146 |
-
#grade_model = load("models/StackingRegressor_best_pipeline_grd_0_to_1.01.pkl")
|
| 147 |
-
#bygrade_model = load("models/StackingRegressor_best_pipeline_bygrad_0_to_1.01.pkl")
|
| 148 |
-
#makable_model = load("models/StackingRegressor_best_pipeline_gia_0_to_1.01.pkl")
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
# Classification models loaded using joblib.
|
| 152 |
-
'''
|
| 153 |
-
col_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_col.joblib'))
|
| 154 |
-
cts_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_cts.joblib'))
|
| 155 |
-
cut_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_cut.joblib'))
|
| 156 |
-
qua_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_qua.joblib'))
|
| 157 |
-
shp_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_shp.joblib'))
|
| 158 |
-
|
| 159 |
-
blk_eng_to_mkbl_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_mkbl_blk.joblib'))
|
| 160 |
-
wht_eng_to_mkbl_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_mkbl_wht.joblib'))
|
| 161 |
-
open_eng_to_mkbl_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_mkbl_open.joblib'))
|
| 162 |
-
pav_eng_to_mkbl_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_mkbl_pav.joblib'))
|
| 163 |
-
blk_eng_to_grade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_grade_blk.joblib'))
|
| 164 |
-
wht_eng_to_grade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_grade_wht.joblib'))
|
| 165 |
-
open_eng_to_grade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_grade_open.joblib'))
|
| 166 |
-
pav_eng_to_grade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_grade_pav.joblib'))
|
| 167 |
-
blk_eng_to_bygrade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_bygrade_blk.joblib'))
|
| 168 |
-
wht_eng_to_bygrade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_bygrade_wht.joblib'))
|
| 169 |
-
open_eng_to_bygrade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_bygrade_open.joblib'))
|
| 170 |
-
pav_eng_to_bygrade_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_bygrade_pav.joblib'))
|
| 171 |
-
blk_eng_to_gia_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_gia_blk.joblib'))
|
| 172 |
-
wht_eng_to_gia_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_gia_wht.joblib'))
|
| 173 |
-
open_eng_to_gia_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_gia_open.joblib'))
|
| 174 |
-
pav_eng_to_gia_model = load(os.path.join(MODEL_DIR, 'classification_LogisticRegression_gia_pav.joblib'))
|
| 175 |
-
'''
|
| 176 |
-
|
| 177 |
-
|
| 178 |
# List of label encoder names.
|
| 179 |
encoder_list = [
|
| 180 |
'Tag', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol', 'EngSym', 'EngFlo',
|
|
@@ -230,7 +181,6 @@ def predict():
|
|
| 230 |
df = pd.read_csv(filepath)
|
| 231 |
else:
|
| 232 |
df = pd.read_excel(filepath)
|
| 233 |
-
|
| 234 |
except Exception as e:
|
| 235 |
print(f'Error reading file: {e}', 'error')
|
| 236 |
return redirect(url_for('index'))
|
|
@@ -256,9 +206,11 @@ def predict():
|
|
| 256 |
print('Invalid file type. Only CSV and Excel files are allowed.', 'error')
|
| 257 |
return redirect(url_for('index'))
|
| 258 |
|
|
|
|
|
|
|
| 259 |
def process_dataframe(df):
|
| 260 |
try:
|
| 261 |
-
df = df[df["MkblAmt"].notna()]
|
| 262 |
|
| 263 |
# Define the columns needed for two parts.
|
| 264 |
required_columns = ['Tag', 'EngCts', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol',
|
|
@@ -269,8 +221,8 @@ def process_dataframe(df):
|
|
| 269 |
|
| 270 |
# Create two DataFrames: one for prediction and one for classification.
|
| 271 |
df_pred = df[required_columns].copy()
|
| 272 |
-
df_pred = df_pred[(df_pred[['EngCts']] > 0.99).all(axis=1) & (df_pred[['EngCts']] < 1.50).all(axis=1)]
|
| 273 |
-
df_pred[['EngBlk', 'EngWht', 'EngOpen', 'EngPav']]=df_pred[['EngBlk', 'EngWht', 'EngOpen', 'EngPav']].fillna("
|
| 274 |
df_class = df[required_columns_2].fillna("NA").copy()
|
| 275 |
|
| 276 |
# Transform categorical columns for prediction DataFrame using the label encoders.
|
|
@@ -301,98 +253,65 @@ def process_dataframe(df):
|
|
| 301 |
# Prediction Report Section
|
| 302 |
# -------------------------
|
| 303 |
try:
|
| 304 |
-
|
| 305 |
-
#
|
| 306 |
-
|
| 307 |
-
|
| 308 |
-
|
| 309 |
-
|
| 310 |
-
df_pred = df_pred[['Tag', 'EngCts', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol',
|
| 311 |
'EngSym', 'EngFlo', 'EngNts', 'EngMikly', 'EngBlk', 'EngWht', 'EngOpen',
|
| 312 |
'EngPav', 'EngAmt',
|
| 313 |
'change_in_amt_mkble'
|
| 314 |
]]
|
| 315 |
-
|
| 316 |
-
print(
|
| 317 |
-
|
| 318 |
-
#
|
| 319 |
-
|
| 320 |
-
df_pred['
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 321 |
|
| 322 |
for col in ['Tag', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol', 'EngSym', 'EngFlo', 'EngNts', 'EngMikly','EngBlk', 'EngWht', 'EngOpen', 'EngPav']:
|
| 323 |
try:
|
| 324 |
-
|
| 325 |
except ValueError as e:
|
| 326 |
print(f'inverse transform fails value in column {col}: {e}', 'error')
|
| 327 |
|
| 328 |
except ValueError as e:
|
| 329 |
print(f'pred model error----->: {e}', 'error')
|
| 330 |
-
|
| 331 |
-
# -------------------------
|
| 332 |
-
# Classification Report Section
|
| 333 |
-
# -------------------------
|
| 334 |
-
'''
|
| 335 |
-
try:
|
| 336 |
-
x2 = df_class.copy()
|
| 337 |
-
dx = df_pred.copy() # Start with the prediction data.
|
| 338 |
-
dx['col_change'] = col_model.predict(x2)
|
| 339 |
-
dx['cts_change'] = cts_model.predict(x2)
|
| 340 |
-
dx['cut_change'] = cut_model.predict(x2)
|
| 341 |
-
dx['qua_change'] = qua_model.predict(x2)
|
| 342 |
-
dx['shp_change'] = shp_model.predict(x2)
|
| 343 |
-
except ValueError as e:
|
| 344 |
-
print(f'class model error----->: {e}', 'error')
|
| 345 |
-
|
| 346 |
-
try:
|
| 347 |
-
dx['Change_Blk_Eng_to_Mkbl_value'] = blk_eng_to_mkbl_model.predict(x)
|
| 348 |
-
dx['Change_Wht_Eng_to_Mkbl_value'] = wht_eng_to_mkbl_model.predict(x)
|
| 349 |
-
dx['Change_Open_Eng_to_Mkbl_value'] = open_eng_to_mkbl_model.predict(x)
|
| 350 |
-
dx['Change_Pav_Eng_to_Mkbl_value'] = pav_eng_to_mkbl_model.predict(x)
|
| 351 |
-
dx['Change_Blk_Eng_to_Grd_value'] = blk_eng_to_grade_model.predict(x)
|
| 352 |
-
dx['Change_Wht_Eng_to_Grd_value'] = wht_eng_to_grade_model.predict(x)
|
| 353 |
-
dx['Change_Open_Eng_to_Grd_value'] = open_eng_to_grade_model.predict(x)
|
| 354 |
-
dx['Change_Pav_Eng_to_Grd_value'] = pav_eng_to_grade_model.predict(x)
|
| 355 |
-
dx['Change_Blk_Eng_to_ByGrd_value'] = blk_eng_to_bygrade_model.predict(x)
|
| 356 |
-
dx['Change_Wht_Eng_to_ByGrd_value'] = wht_eng_to_bygrade_model.predict(x)
|
| 357 |
-
dx['Change_Open_Eng_to_ByGrd_value'] = open_eng_to_bygrade_model.predict(x)
|
| 358 |
-
dx['Change_Pav_Eng_to_ByGrd_value'] = pav_eng_to_bygrade_model.predict(x)
|
| 359 |
-
dx['Change_Blk_Eng_to_Gia_value'] = blk_eng_to_gia_model.predict(x)
|
| 360 |
-
dx['Change_Wht_Eng_to_Gia_value'] = wht_eng_to_gia_model.predict(x)
|
| 361 |
-
dx['Change_Open_Eng_to_Gia_value'] = open_eng_to_gia_model.predict(x)
|
| 362 |
-
dx['Change_Pav_Eng_to_Gia_value'] = pav_eng_to_gia_model.predict(x)
|
| 363 |
-
except ValueError as e:
|
| 364 |
-
print(f'grade_code model error----->: {e}', 'error')
|
| 365 |
-
|
| 366 |
-
# Inverse transform classification predictions.
|
| 367 |
-
dx['col_change'] = loaded_label_encoder['Change_color_value'].inverse_transform(dx['col_change'])
|
| 368 |
-
dx['cts_change'] = loaded_label_encoder['Change_cts_value'].inverse_transform(dx['cts_change'])
|
| 369 |
-
dx['cut_change'] = loaded_label_encoder['Change_cut_value'].inverse_transform(dx['cut_change'])
|
| 370 |
-
dx['qua_change'] = loaded_label_encoder['Change_quality_value'].inverse_transform(dx['qua_change'])
|
| 371 |
-
dx['shp_change'] = loaded_label_encoder['Change_shape_value'].inverse_transform(dx['shp_change'])
|
| 372 |
-
dx['Change_Blk_Eng_to_Mkbl_value'] = loaded_label_encoder['Change_Blk_Eng_to_Mkbl_value'].inverse_transform(dx['Change_Blk_Eng_to_Mkbl_value'])
|
| 373 |
-
dx['Change_Wht_Eng_to_Mkbl_value'] = loaded_label_encoder['Change_Wht_Eng_to_Mkbl_value'].inverse_transform(dx['Change_Wht_Eng_to_Mkbl_value'])
|
| 374 |
-
dx['Change_Open_Eng_to_Mkbl_value'] = loaded_label_encoder['Change_Open_Eng_to_Mkbl_value'].inverse_transform(dx['Change_Open_Eng_to_Mkbl_value'])
|
| 375 |
-
dx['Change_Pav_Eng_to_Mkbl_value'] = loaded_label_encoder['Change_Pav_Eng_to_Mkbl_value'].inverse_transform(dx['Change_Pav_Eng_to_Mkbl_value'])
|
| 376 |
-
dx['Change_Blk_Eng_to_Grd_value'] = loaded_label_encoder['Change_Blk_Eng_to_Grd_value'].inverse_transform(dx['Change_Blk_Eng_to_Grd_value'])
|
| 377 |
-
dx['Change_Wht_Eng_to_Grd_value'] = loaded_label_encoder['Change_Wht_Eng_to_Grd_value'].inverse_transform(dx['Change_Wht_Eng_to_Grd_value'])
|
| 378 |
-
dx['Change_Open_Eng_to_Grd_value'] = loaded_label_encoder['Change_Open_Eng_to_Grd_value'].inverse_transform(dx['Change_Open_Eng_to_Grd_value'])
|
| 379 |
-
dx['Change_Pav_Eng_to_Grd_value'] = loaded_label_encoder['Change_Pav_Eng_to_Grd_value'].inverse_transform(dx['Change_Pav_Eng_to_Grd_value'])
|
| 380 |
-
dx['Change_Blk_Eng_to_ByGrd_value'] = loaded_label_encoder['Change_Blk_Eng_to_ByGrd_value'].inverse_transform(dx['Change_Blk_Eng_to_ByGrd_value'])
|
| 381 |
-
dx['Change_Wht_Eng_to_ByGrd_value'] = loaded_label_encoder['Change_Wht_Eng_to_ByGrd_value'].inverse_transform(dx['Change_Wht_Eng_to_ByGrd_value'])
|
| 382 |
-
dx['Change_Open_Eng_to_ByGrd_value'] = loaded_label_encoder['Change_Open_Eng_to_ByGrd_value'].inverse_transform(dx['Change_Open_Eng_to_ByGrd_value'])
|
| 383 |
-
dx['Change_Pav_Eng_to_ByGrd_value'] = loaded_label_encoder['Change_Pav_Eng_to_ByGrd_value'].inverse_transform(dx['Change_Pav_Eng_to_ByGrd_value'])
|
| 384 |
-
dx['Change_Blk_Eng_to_Gia_value'] = loaded_label_encoder['Change_Blk_Eng_to_Gia_value'].inverse_transform(dx['Change_Blk_Eng_to_Gia_value'])
|
| 385 |
-
dx['Change_Wht_Eng_to_Gia_value'] = loaded_label_encoder['Change_Wht_Eng_to_Gia_value'].inverse_transform(dx['Change_Wht_Eng_to_Gia_value'])
|
| 386 |
-
dx['Change_Open_Eng_to_Gia_value'] = loaded_label_encoder['Change_Open_Eng_to_Gia_value'].inverse_transform(dx['Change_Open_Eng_to_Gia_value'])
|
| 387 |
-
dx['Change_Pav_Eng_to_Gia_value'] = loaded_label_encoder['Change_Pav_Eng_to_Gia_value'].inverse_transform(dx['Change_Pav_Eng_to_Gia_value'])
|
| 388 |
-
|
| 389 |
-
'''
|
| 390 |
|
| 391 |
# Final return with full data for pagination.
|
| 392 |
-
# Final step to replace NaN or empty values with "-"
|
| 393 |
-
|
| 394 |
-
|
| 395 |
-
return
|
| 396 |
except Exception as e:
|
| 397 |
print(f'Error processing file: {e}', 'error')
|
| 398 |
return pd.DataFrame(), pd.DataFrame()
|
|
@@ -456,4 +375,4 @@ def download_class():
|
|
| 456 |
return send_file(CLASS_OUTPUT_FILE, as_attachment=True)
|
| 457 |
|
| 458 |
if __name__ == "__main__":
|
| 459 |
-
app.run(debug=True)
|
|
|
|
| 38 |
import lightgbm as lgb
|
| 39 |
from catboost import CatBoostRegressor
|
| 40 |
from sklearn.ensemble import StackingRegressor
|
| 41 |
+
import json
|
|
|
|
|
|
|
| 42 |
|
| 43 |
app = Flask(__name__)
|
| 44 |
|
|
|
|
| 80 |
# ------------------------------
|
| 81 |
|
| 82 |
# Prediction analysis models loaded from Hugging Face.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 83 |
|
|
|
|
| 84 |
src_path = hf_hub_download(
|
| 85 |
repo_id="WebashalarForML/Diamond_model_",
|
| 86 |
+
filename="models_list/mkble/DecisionTree_best_pipeline_mkble_0_to_0.99_al.pkl",
|
| 87 |
cache_dir=MODEL_FOLDER
|
| 88 |
)
|
| 89 |
+
dst_path = os.path.join(MODEL_FOLDER, "DecisionTree_best_pipeline_mkble_0_to_0.99_al.pkl")
|
| 90 |
shutil.copy(src_path, dst_path)
|
| 91 |
+
makable_model_0 = load(dst_path)
|
|
|
|
| 92 |
|
| 93 |
src_path = hf_hub_download(
|
| 94 |
repo_id="WebashalarForML/Diamond_model_",
|
| 95 |
+
filename="models_list/mkble/DecisionTree_best_pipeline_mkble_1_to_1.49.pkl",
|
| 96 |
cache_dir=MODEL_FOLDER
|
| 97 |
)
|
| 98 |
+
dst_path = os.path.join(MODEL_FOLDER, "DecisionTree_best_pipeline_mkble_1_to_1.49.pkl")
|
| 99 |
shutil.copy(src_path, dst_path)
|
| 100 |
+
makable_model_1 = load(dst_path)
|
|
|
|
| 101 |
|
| 102 |
+
# Prediction analysis models loaded from Hugging Face.
|
| 103 |
src_path = hf_hub_download(
|
| 104 |
repo_id="WebashalarForML/Diamond_model_",
|
| 105 |
+
filename="models_list/mkble/DecisionTree_best_pipeline_mkble_1.50_to_1.99.pkl",
|
| 106 |
cache_dir=MODEL_FOLDER
|
| 107 |
)
|
| 108 |
+
dst_path = os.path.join(MODEL_FOLDER, "DecisionTree_best_pipeline_mkble_1.50_to_1.99.pkl")
|
| 109 |
shutil.copy(src_path, dst_path)
|
| 110 |
+
makable_model_2 = load(dst_path)
|
|
|
|
| 111 |
|
| 112 |
#classsification model on the task
|
| 113 |
src_path = hf_hub_download(
|
|
|
|
| 119 |
shutil.copy(src_path, dst_path)
|
| 120 |
mkble_amt_class_model = load(dst_path)
|
| 121 |
|
| 122 |
+
#print("makable_model type:", type(makable_model))
|
|
|
|
|
|
|
|
|
|
| 123 |
#print("grade_model type:", type(grade_model))
|
| 124 |
#print("bygrade_model type:", type(bygrade_model))
|
| 125 |
#print("gia_model type:", type(gia_model))
|
| 126 |
print("================================")
|
| 127 |
print("mkble_amt_class_model type:", type(mkble_amt_class_model))
|
| 128 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 129 |
# List of label encoder names.
|
| 130 |
encoder_list = [
|
| 131 |
'Tag', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol', 'EngSym', 'EngFlo',
|
|
|
|
| 181 |
df = pd.read_csv(filepath)
|
| 182 |
else:
|
| 183 |
df = pd.read_excel(filepath)
|
|
|
|
| 184 |
except Exception as e:
|
| 185 |
print(f'Error reading file: {e}', 'error')
|
| 186 |
return redirect(url_for('index'))
|
|
|
|
| 206 |
print('Invalid file type. Only CSV and Excel files are allowed.', 'error')
|
| 207 |
return redirect(url_for('index'))
|
| 208 |
|
| 209 |
+
|
| 210 |
+
|
| 211 |
def process_dataframe(df):
|
| 212 |
try:
|
| 213 |
+
#df = df[df["MkblAmt"].notna()]
|
| 214 |
|
| 215 |
# Define the columns needed for two parts.
|
| 216 |
required_columns = ['Tag', 'EngCts', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol',
|
|
|
|
| 221 |
|
| 222 |
# Create two DataFrames: one for prediction and one for classification.
|
| 223 |
df_pred = df[required_columns].copy()
|
| 224 |
+
#df_pred = df_pred[(df_pred[['EngCts']] > 0.99).all(axis=1) & (df_pred[['EngCts']] < 1.50).all(axis=1)]
|
| 225 |
+
df_pred[['EngBlk', 'EngWht', 'EngOpen', 'EngPav']]=df_pred[['EngBlk', 'EngWht', 'EngOpen', 'EngPav']].fillna("-")
|
| 226 |
df_class = df[required_columns_2].fillna("NA").copy()
|
| 227 |
|
| 228 |
# Transform categorical columns for prediction DataFrame using the label encoders.
|
|
|
|
| 253 |
# Prediction Report Section
|
| 254 |
# -------------------------
|
| 255 |
try:
|
| 256 |
+
|
| 257 |
+
# for model 0 to 0.99
|
| 258 |
+
df_pred_0 = df_pred[(df_pred[['EngCts']] > 0.00).all(axis=1) & (df_pred[['EngCts']] < 0.99).all(axis=1)]
|
| 259 |
+
df_pred_0['change_in_amt_mkble'] = pd.DataFrame(mkble_amt_class_model.predict(df_pred_0), columns=["pred_change_in_eng_to_mkble"])
|
| 260 |
+
print(df_pred_0.columns)
|
| 261 |
+
df_pred_0 = df_pred_0[['Tag', 'EngCts', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol',
|
|
|
|
| 262 |
'EngSym', 'EngFlo', 'EngNts', 'EngMikly', 'EngBlk', 'EngWht', 'EngOpen',
|
| 263 |
'EngPav', 'EngAmt',
|
| 264 |
'change_in_amt_mkble'
|
| 265 |
]]
|
| 266 |
+
df_pred_0['Makable_Predicted'] = pd.DataFrame(np.expm1(makable_model_0.predict(df_pred_0)), columns=["Predicted"])
|
| 267 |
+
print(df_pred_0.columns)
|
| 268 |
+
|
| 269 |
+
# for model 1 to 1.49
|
| 270 |
+
|
| 271 |
+
df_pred_1 = df_pred[(df_pred[['EngCts']] > 0.99).all(axis=1) & (df_pred[['EngCts']] < 1.50).all(axis=1)]
|
| 272 |
+
df_pred_1['change_in_amt_mkble'] = pd.DataFrame(mkble_amt_class_model.predict(df_pred_1), columns=["pred_change_in_eng_to_mkble"])
|
| 273 |
+
print(df_pred_1.columns)
|
| 274 |
+
df_pred_1 = df_pred_1[['Tag', 'EngCts', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol',
|
| 275 |
+
'EngSym', 'EngFlo', 'EngNts', 'EngMikly', 'EngBlk', 'EngWht', 'EngOpen',
|
| 276 |
+
'EngPav', 'EngAmt',
|
| 277 |
+
'change_in_amt_mkble'
|
| 278 |
+
]]
|
| 279 |
+
df_pred_1['Makable_Predicted'] = pd.DataFrame(np.expm1(makable_model_1.predict(df_pred_1)), columns=["Predicted"])
|
| 280 |
+
print(df_pred_1.columns)
|
| 281 |
+
|
| 282 |
+
# for model 1.50 to 1.99
|
| 283 |
+
|
| 284 |
+
df_pred_2 = df_pred[(df_pred[['EngCts']] > 1.49).all(axis=1) & (df_pred[['EngCts']] < 2.00).all(axis=1)]
|
| 285 |
+
df_pred_2['change_in_amt_mkble'] = pd.DataFrame(mkble_amt_class_model.predict(df_pred_2), columns=["pred_change_in_eng_to_mkble"])
|
| 286 |
+
print(df_pred_2.columns)
|
| 287 |
+
df_pred_2 = df_pred_2[['Tag', 'EngCts', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol',
|
| 288 |
+
'EngSym', 'EngFlo', 'EngNts', 'EngMikly', 'EngBlk', 'EngWht', 'EngOpen',
|
| 289 |
+
'EngPav', 'EngAmt',
|
| 290 |
+
'change_in_amt_mkble'
|
| 291 |
+
]]
|
| 292 |
+
df_pred_2['Makable_Predicted'] = pd.DataFrame(np.expm1(makable_model_2.predict(df_pred_2)), columns=["Predicted"])
|
| 293 |
+
print(df_pred_2.columns)
|
| 294 |
+
|
| 295 |
+
df_pred_main = pd.concat([df_pred_0, df_pred_1, df_pred_2])
|
| 296 |
+
df_pred_main['Makable_Diff'] = df_pred_main['EngAmt'] - df_pred_main['Makable_Predicted']
|
| 297 |
+
|
| 298 |
+
# Fill NaN or missing values in prediction columns
|
| 299 |
+
df_pred_main[['change_in_amt_mkble', 'Makable_Predicted', 'Makable_Diff']] = df_pred_main[['change_in_amt_mkble', 'Makable_Predicted', 'Makable_Diff']].fillna("-")
|
| 300 |
|
| 301 |
for col in ['Tag', 'EngShp', 'EngQua', 'EngCol', 'EngCut', 'EngPol', 'EngSym', 'EngFlo', 'EngNts', 'EngMikly','EngBlk', 'EngWht', 'EngOpen', 'EngPav']:
|
| 302 |
try:
|
| 303 |
+
df_pred_main[col] = loaded_label_encoder[col].inverse_transform(df_pred_main[col].astype(int))
|
| 304 |
except ValueError as e:
|
| 305 |
print(f'inverse transform fails value in column {col}: {e}', 'error')
|
| 306 |
|
| 307 |
except ValueError as e:
|
| 308 |
print(f'pred model error----->: {e}', 'error')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 309 |
|
| 310 |
# Final return with full data for pagination.
|
| 311 |
+
# # Final step to replace NaN or empty values with "-"
|
| 312 |
+
# df_pred_main = df_pred.fillna("-")
|
| 313 |
+
# df_pred_main = df_pred.replace(r'^\s*$', "-", regex=True)
|
| 314 |
+
return df_pred_main, df_pred_main
|
| 315 |
except Exception as e:
|
| 316 |
print(f'Error processing file: {e}', 'error')
|
| 317 |
return pd.DataFrame(), pd.DataFrame()
|
|
|
|
| 375 |
return send_file(CLASS_OUTPUT_FILE, as_attachment=True)
|
| 376 |
|
| 377 |
if __name__ == "__main__":
|
| 378 |
+
app.run(debug=True)
|