Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import numpy as np | |
import pickle | |
import os | |
import subprocess | |
# Ensure scikit-learn is installed | |
try: | |
import sklearn | |
except ImportError: | |
subprocess.run(["pip", "install", "scikit-learn", "--quiet"]) | |
import sklearn | |
from sklearn.linear_model import LinearRegression # Now it should work | |
from sklearn.preprocessing import LabelEncoder | |
# Load dataset | |
def load_data(): | |
df = pd.read_csv("car_data.csv") # Replace with your dataset | |
return df | |
def preprocess_data(df): | |
label_encoders = {} | |
for column in ["brand", "model", "fuel_type"]: # Encode categorical features | |
le = LabelEncoder() | |
df[column] = le.fit_transform(df[column]) | |
label_encoders[column] = le | |
return df, label_encoders | |
# Train the model (Manual Data Split) | |
def train_model(df): | |
X = df[["year", "mileage", "brand", "model", "fuel_type"]].values | |
y = df["price"].values | |
# Manual 80-20 split | |
split_index = int(0.8 * len(X)) # 80% for training, 20% for testing | |
X_train, X_test = X[:split_index], X[split_index:] | |
y_train, y_test = y[:split_index], y[split_index:] | |
model = LinearRegression() | |
model.fit(X_train, y_train) | |
return model | |
df = load_data() | |
df, label_encoders = preprocess_data(df) | |
model = train_model(df) | |
# Streamlit UI | |
st.title("Car Price Prediction App") | |
st.sidebar.header("Enter Car Details") | |
year = st.sidebar.slider("Year", int(df["year"].min()), int(df["year"].max()), 2015) | |
mileage = st.sidebar.number_input("Mileage (in km)", min_value=0, max_value=500000, value=50000) | |
brand = st.sidebar.selectbox("Brand", label_encoders["brand"].classes_) | |
filtered_models = df[df["brand"] == label_encoders["brand"].transform([brand])[0]]["model"].unique() | |
model_name = st.sidebar.selectbox("Model", label_encoders["model"].inverse_transform(filtered_models)) | |
fuel_type = st.sidebar.selectbox("Fuel Type", label_encoders["fuel_type"].classes_) | |
if st.sidebar.button("Predict Price"): | |
brand_encoded = label_encoders["brand"].transform([brand])[0] | |
model_encoded = label_encoders["model"].transform([model_name])[0] | |
fuel_encoded = label_encoders["fuel_type"].transform([fuel_type])[0] | |
input_data = np.array([[year, mileage, brand_encoded, model_encoded, fuel_encoded]]) | |
predicted_price = model.predict(input_data)[0] | |
st.write(f"### Predicted Car Price: ${predicted_price:,.2f}") | |