Engine_PM / app.py
sudhirpgcmma02's picture
Upload app.py with huggingface_hub
254ed26 verified
import streamlit as st
import joblib
import pandas as pd
import os
from sklearn.base import BaseEstimator, TransformerMixin
from featureengineer import FeatureEngineer
from outliercapper import OutlierCapper
def load_data():
try:
return pd.read_csv("data/engine_data.csv")
except:
return pd.DataFrame(columns=[
"Engine rpm","Lub oil pressure","Fuel pressure","Coolant pressure","lub oil temp","Coolant temp","Engine condition"])
data=load_data()
#renaming columns for easy processing
data.columns = (data.columns
.str.strip()
.str.replace(" ","_")
.str.replace(r"[^\w]","_",regex=True)
.str.lower()
)
# -----------------------------
# Load Model
# -----------------------------
base_dir= os.path.dirname(__file__)
model_path= os.path.join(base_dir,"best_engine_PM_prediction_v1.joblib")
model = joblib.load(model_path)
st.set_page_config(page_title="Engine Condition Predictor", layout="centered")
st.title("🔧 Engine Health Monitoring System")
st.write("Enter the engine sensor values below to predict engine condition")
# ---- User Inputs ----
with st.form("engine_input_form"):
engine_rpm = st.number_input(
"Engine RPM",
min_value=0,
max_value=10000,
value=1500,
step=50
)
lub_oil_pressure = st.number_input(
"Lub Oil Pressure (bar)",
min_value=0.0,
max_value=20.0,
value=3.5,
step=0.1
)
fuel_pressure = st.number_input(
"Fuel Pressure (bar)",
min_value=0.0,
max_value=20.0,
value=4.0,
step=0.1
)
coolant_pressure = st.number_input(
"Coolant Pressure (bar)",
min_value=0.0,
max_value=10.0,
value=1.5,
step=0.1
)
lub_oil_temp = st.number_input(
"Lub Oil Temperature (°C)",
min_value=0.0,
max_value=200.0,
value=85.0,
step=1.0
)
coolant_temp = st.number_input(
"Coolant Temperature (°C)",
min_value=0.0,
max_value=200.0,
value=90.0,
step=1.0
)
submit = st.form_submit_button("🚀 Predict Engine Condition")
##data capturing
input_df = pd.DataFrame({
"engine_rpm": [engine_rpm],
"lub_oil_pressure": [lub_oil_pressure],
"fuel_pressure": [fuel_pressure],
"coolant_pressure": [coolant_pressure],
"lub_oil_temp": [lub_oil_temp],
"coolant_temp": [coolant_temp]
})
# -----------------------------
# Predict Button
# -----------------------------
if submit:
st.success("✅ Input captured successfully")
st.write("### Input Data")
st.dataframe(input_df)
# Predict
prediction = model.predict(input_df)[0]
prob = model.predict_proba(input_df)[0][1]
st.subheader("Prediction Result")
if prob>=0.5:
label="Maintenance Needed"
st.warning(f"Engine needs Preventive maintenance. Probability: {prob:.2f}")
else:
label="Normal"
st.success(f"Engine working normal. Probability: {prob:.2f}")
# Save prediction to dataframe
input_df['Engine_condition'] = label #'Normal / Preventive maintenance req '
st.session_state['input_df'] = input_df
st.dataframe(input_df)
# -----------------------------
# SAVE RECORDS SECTION
# -----------------------------
if st.button("Save Record"):
if "input_df" in st.session_state:
file_path = "records.csv"
# If file exists → append
if os.path.exists(file_path):
existing_df = pd.read_csv(file_path)
updated_df = pd.concat([existing_df, input_df], ignore_index=True)
else:
# Create new CSV
updated_df = st.session_state['input_df']
updated_df.to_csv(file_path, index=False)
st.success("Record saved successfully!")
else:
st.error("Record not saved...Thank for analysis")