|
|
|
|
|
import sys |
|
|
import pandas as pd |
|
|
import logging |
|
|
|
|
|
|
|
|
from src.exception import CustomException |
|
|
from src.logger import logging |
|
|
from src.utils import load_object |
|
|
|
|
|
|
|
|
|
|
|
class PredictPipeline: |
|
|
def __init__(self): |
|
|
pass |
|
|
|
|
|
def predict(self, features): |
|
|
try: |
|
|
model_path = 'artifacts/model.pkl' |
|
|
preprocessor_path = 'artifacts/preprocessor.pkl' |
|
|
|
|
|
|
|
|
model = load_object(file_path=model_path) |
|
|
preprocessor = load_object(file_path=preprocessor_path) |
|
|
|
|
|
|
|
|
if model is None: |
|
|
raise Exception("Model failed to load") |
|
|
if preprocessor is None: |
|
|
raise Exception("Preprocessor failed to load") |
|
|
|
|
|
|
|
|
data_scaled = preprocessor.transform(features) |
|
|
preds = model.predict(data_scaled) |
|
|
|
|
|
return preds |
|
|
|
|
|
except Exception as e: |
|
|
logging.error(f"Error in prediction: {str(e)}") |
|
|
raise CustomException(e, sys) |
|
|
|
|
|
|
|
|
class CustomData: |
|
|
def __init__(self, gender: str, race: str, |
|
|
parental_level_of_education: str, |
|
|
lunch: str, |
|
|
test_preparation_course: str, |
|
|
reading_score: float, |
|
|
writing_score: float): |
|
|
self.gender = gender |
|
|
self.race = race |
|
|
self.parental_level_of_education = parental_level_of_education |
|
|
self.lunch = lunch |
|
|
self.test_preparation_course = test_preparation_course |
|
|
self.reading_score = reading_score |
|
|
self.writing_score = writing_score |
|
|
|
|
|
def get_data_as_data_frame(self): |
|
|
try: |
|
|
|
|
|
custom_data_input_dict = { |
|
|
"gender": [self.gender], |
|
|
"race/ethnicity": [self.race], |
|
|
"parental level of education": [self.parental_level_of_education], |
|
|
"lunch": [self.lunch], |
|
|
"test preparation course": [self.test_preparation_course], |
|
|
"reading score": [self.reading_score], |
|
|
"writing score": [self.writing_score] |
|
|
} |
|
|
|
|
|
df = pd.DataFrame(custom_data_input_dict) |
|
|
logging.info("Dataframe created successfully") |
|
|
return df |
|
|
|
|
|
except Exception as e: |
|
|
logging.error(f"Error in Dataframe Creation: {str(e)}") |
|
|
raise CustomException(e, sys) |