Spaces:
Sleeping
Sleeping
import pandas as pd | |
from sklearn.model_selection import train_test_split | |
from sklearn.linear_model import LinearRegression | |
from sklearn.metrics import mean_squared_error, r2_score | |
from sklearn.pipeline import Pipeline | |
from sklearn.compose import ColumnTransformer | |
from sklearn.preprocessing import StandardScaler, OneHotEncoder | |
import streamlit as st | |
df = pd.read_excel("./cars.xls") | |
x = df.drop("Price", axis=1) | |
y = df[["Price"]] | |
x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=20, random_state=42) | |
preprocessor = ColumnTransformer( | |
transformers= [ | |
("num", StandardScaler(),["Mileage", "Cylinder", "Liter", "Doors"]), | |
("cat", OneHotEncoder(), ["Make", "Model", "Trim", "Type"]) | |
] | |
) | |
model = LinearRegression() | |
pipeline = Pipeline(steps=[ | |
("preprocessor", preprocessor), | |
("regressor", model) | |
]) | |
pipeline.fit(x_train, y_train) | |
pred = pipeline.predict(x_test) | |
rmse = mean_squared_error(pred, y_test)**.5 | |
r2 = r2_score(pred, y_test) | |
def price_pred(make,model,trim,mileage,car_type,cylinder,liter,doors,cruise,sound,leather): | |
input_data = pd.DataFrame({ | |
"Make": [make], | |
"Model": [model], | |
"Trim": [trim], | |
"Mileage": [mileage], | |
"Type": [car_type], | |
"Cylinder": [cylinder], | |
"Liter": [liter], | |
"Doors": [doors], | |
"Cruise": [cruise], | |
"Sound": [sound], | |
"Leather": [leather], | |
}) | |
prediction = pipeline.predict(input_data)[0] | |
return prediction | |
def main(): | |
st.title("MLOps Car Price Prediction :red_car:") | |
st.write("Enter Car Details to predict the price") | |
make = st.selectbox("Model", df["Make"].unique()) | |
model = st.selectbox("Model", df[df["Make"] == make]["Model"].unique()) | |
trim = st.selectbox("Trim", df[(df["Make"] == make) & (df["Model"] == model)]["Trim"].unique()) | |
mileage = st.number_input("Mileage", 200, 60000) | |
car_type = st.selectbox("Type", df["Type"].unique()) | |
cylinder = st.selectbox("Cylinder", df["Cylinder"].unique()) | |
liter = st.number_input("Liter", 1, 6) | |
doors = st.selectbox("Doors", df["Doors"].unique()) | |
cruise = st.radio("Cruise", [0,1]) | |
sound = st.radio("Sound", [0,1]) | |
leather = st.radio("Leather", [0,1]) | |
if st.button("Predict"): | |
price = price_pred(make,model,trim,mileage,car_type,cylinder,liter,doors,cruise,sound,leather) | |
st.write(price) | |
price = float(price) | |
st.write(f"The predicted price is : ${price:.2f}") | |
if __name__ == "__main__": | |
main() | |
# make = st.selectbox("Make", df["Make"].unique()) | |
# model = st.selectbox("Model", df[df["Make"]==make]["Model"].unique()) | |
# trim = st.selectbox("Trim", df[df["Model"]==model]["Trim"].unique()) | |