CodingMaster24/WaterPotabilityPredictor
0
1import streamlit as st2import pandas as pd3import numpy as np4import requests5from io import StringIO6from sklearn.model_selection import train_test_split7from sklearn.preprocessing import StandardScaler8from sklearn.linear_model import LogisticRegression9from sklearn.metrics import accuracy_score10 11# --- Load dataset ---12@st.cache_data13def load_data():14 url = "https://raw.githubusercontent.com/Sivatech24/Water-Potability-Predictor/main/Data/water_potability.csv"15 s = requests.get(url).content16 data = pd.read_csv(StringIO(s.decode("utf-8")))17 data = data.dropna() # Drop missing values18 return data19 20data = load_data()21 22# --- Split data ---23X = data.drop(columns=["Potability"])24y = data["Potability"]25X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)26 27# --- Standardize data ---28scaler = StandardScaler()29X_train = scaler.fit_transform(X_train)30X_test = scaler.transform(X_test)31 32# --- Train model ---33model = LogisticRegression()34model.fit(X_train, y_train)35 36# --- Prediction function ---37def predict_potability(features):38 features = np.array(features).reshape(1, -1)39 try:40 features = scaler.transform(features)41 return model.predict(features)[0]42 except ValueError:43 return None44 45# --- Streamlit UI ---46st.title("๐ง Water Potability Prediction")47st.write("Enter the water quality parameters to predict if the water is **safe to drink**.")48 49# --- Input fields ---50ph = st.number_input("pH Level (0-14)", min_value=0.0, max_value=14.0, value=7.0)51hardness = st.number_input("Hardness", min_value=0.0, value=150.0)52solids = st.number_input("Solids (ppm)", min_value=0.0, value=20000.0)53chloramines = st.number_input("Chloramines", min_value=0.0, value=4.0)54sulfate = st.number_input("Sulfate", min_value=0.0, value=300.0)55conductivity = st.number_input("Conductivity", min_value=0.0, value=400.0)56organic_carbon = st.number_input("Organic Carbon", min_value=0.0, value=10.0)57trihalomethanes = st.number_input("Trihalomethanes", min_value=0.0, value=50.0)58turbidity = st.number_input("Turbidity", min_value=0.0, value=4.0)59 60# --- Prediction ---61if st.button("๐ Predict Potability"):62 input_features = [ph, hardness, solids, chloramines, sulfate, conductivity, organic_carbon, trihalomethanes, turbidity]63 result = predict_potability(input_features)64 65 if result is None:66 st.error("โ Invalid input. Please check your values.")67 elif result == 1:68 st.success("โ
The water is **potable** (safe to drink).")69 else:70 st.warning("โ ๏ธ The water is **not potable** (not safe to drink).")71 72# --- Model Accuracy ---73accuracy = accuracy_score(y_test, model.predict(X_test))74st.sidebar.markdown(f"### ๐ Model Accuracy: `{accuracy:.2%}`")75 