WaterQualityPrediction / src /streamlit_app.py
hande-x's picture
Update src/streamlit_app.py
77428ca verified
Raw
History Blame Contribute Delete
2.33 kB
import streamlit as st
import pandas as pd
import joblib
MODEL_PATH = 'src/water_quality.joblib'
FEATURES = [
'ph', 'Hardness', 'Solids', 'Chloramines', 'Sulfate',
'Conductivity', 'Organic_carbon', 'Trihalomethanes', 'Turbidity'
]
@st.cache_resource
def load_pipeline():
try:
pipeline = joblib.load(MODEL_PATH)
return pipeline
except Exception as e:
st.error(f"Error loading model. Ensure '{MODEL_PATH}' exists. Error: {e}")
return None
def make_prediction(pipeline, input_data):
df_input = pd.DataFrame([input_data])
predictions = pipeline.predict(df_input)
probability = pipeline.predict_proba(df_input)[:, 1][0] # probability of potable
label = int(predictions[0])
return label, probability
# --- Streamlit Interface ---
st.set_page_config(page_title="Water Quality Predictor", layout="centered")
st.title("💧 Water Potability Prediction")
pipeline = load_pipeline()
if pipeline:
st.sidebar.header("Water Quality Parameters")
ph = st.sidebar.number_input("pH Level:", 0.0, 14.0, 7.0, 0.1)
hardness = st.sidebar.number_input("Hardness:", 50.0, 400.0, 200.0)
solids = st.sidebar.number_input("Solids (ppm):", 300.0, 60000.0, 20000.0)
chloramines = st.sidebar.number_input("Chloramines (ppm):", 0.0, 15.0, 7.0, 0.1)
sulfate = st.sidebar.number_input("Sulfate (ppm):", 100.0, 500.0, 300.0)
conductivity = st.sidebar.number_input("Conductivity (μS/cm):", 200.0, 800.0, 400.0)
organic_carbon = st.sidebar.number_input("Organic Carbon (ppm):", 5.0, 30.0, 15.0)
trihalomethanes = st.sidebar.number_input("Trihalomethanes (ppm):", 10.0, 150.0, 70.0)
turbidity = st.sidebar.number_input("Turbidity (NTU):", 1.0, 7.0, 4.0)
input_data = {
'ph': ph,
'Hardness': hardness,
'Solids': solids,
'Chloramines': chloramines,
'Sulfate': sulfate,
'Conductivity': conductivity,
'Organic_carbon': organic_carbon,
'Trihalomethanes': trihalomethanes,
'Turbidity': turbidity
}
if st.button("Predict Potability"):
label, prob = make_prediction(pipeline, input_data)
status = "POTABLE ✅" if label == 1 else "NOT POTABLE ❌"
st.success(f"Prediction: {status}")
st.info(f"Probability of being potable: {prob*100:.2f}%")