autopredict / app.py
avram48's picture
Update app.py
d6dcf5b verified
import numpy as np
import pandas as pd
import tensorflow as tf
from sklearn.preprocessing import LabelEncoder, MinMaxScaler
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense, Dropout
data = pd.read_csv('cars_raw.csv')
le = LabelEncoder()
data['Make'] = le.fit_transform(data['Make'])
data['Model'] = le.fit_transform(data['Model'])
data = data[data['Price'] != 'Not Priced']
data["Price"] = data["Price"].str.replace("$", "")
data["Price"] = data["Price"].str.replace(",", "").astype(float)
scaler = MinMaxScaler()
data['Price'] = scaler.fit_transform(data['Price'].values.reshape(-1, 1))
data = data.dropna()
for col in data.select_dtypes(include=['category', 'object']).columns:
data[col] = le.fit_transform(data[col])
for col in data.select_dtypes(include=['number']).columns:
data[col] = scaler.fit_transform(data[col].values.reshape(-1, 1))
# Удаление ненужных колонок
data = data.drop(columns=["Mileage", "SellerType", "VIN", "Stock#", "Drivetrain", "SellerName", "ConsumerReviews", "ExteriorStylingRating", "State", "Zipcode", "DealType"])
data_df = pd.DataFrame(data)
X = data.drop('Price', axis=1)
y = data['Price']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = Sequential()
model.add(Dense(128, activation='relu', input_shape=(X_train.shape[1],)))
model.add(Dropout(0.3))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(X_train, y_train, epochs=100, batch_size=32, validation_data=(X_test, y_test))
# Оценка модели
test_loss = model.evaluate(X_test, y_test)
print(f'Test loss (MSE): {test_loss}')
import gradio as gr
def predict_car_price(Year, Make, Model, FuelType, Engine):
car_data = {
"Year": int(Year),
"Make": Make,
"Model": Model,
"FuelType": FuelType,
"Engine": Engine
}
car_data_df = pd.DataFrame([car_data])
result_data = pd.read_csv('cars_raw.csv')
result_data_df = pd.DataFrame(result_data)
needs_df = result_data_df.drop(columns=["Mileage", "SellerType", "VIN", "Stock#", "Drivetrain", "SellerName", "ConsumerReviews", "ExteriorStylingRating", "State", "Zipcode", "DealType", "Used/New", "Price", "ConsumerRating", "SellerRating", "SellerReviews", "StreetName", "ComfortRating", "PerformanceRating", "ValueForMoneyRating", "ReliabilityRating", "ExteriorColor", "InteriorColor", "MinMPG", "MaxMPG", "Transmission", "InteriorDesignRating"])
needs_df = pd.concat([needs_df, car_data_df], ignore_index=True)
le = LabelEncoder()
for col in needs_df.select_dtypes(include=['category', 'object']).columns:
needs_df[col] = le.fit_transform(needs_df[col])
scaler = MinMaxScaler()
for col in needs_df.select_dtypes(include=['number']).columns:
needs_df[col] = scaler.fit_transform(needs_df[col].values.reshape(-1, 1))
result_df = needs_df.loc[[0]]
prediction = model.predict(result_df)
inverted_prediction = scaler.inverse_transform(
prediction.reshape(-1, 1)
)
predicted_price = inverted_prediction[0][0]
return predicted_price
iface = gr.Interface(
fn=predict_car_price,
inputs=[
gr.Slider(label="Year", minimum=1990, maximum=2023, step=1),
gr.Dropdown(label="Make", choices=["Acura", "Alfa Romeo", "Aston Martin", "Audi", "Bentley", "BMW", "Buick", "Cadillac", "Chevrolet", "Chrysler", "Dodge", "Ferrari", "Fiat", "Ford", "Genesis", "GMC", "Honda", "Hyundai", "Infiniti", "Jaguar", "Jeep", "Kia", "Lamborghini", "Land Rover", "Lexus", "Lincoln", "Lotus", "Maserati", "Mazda", "McLaren", "Mercedes-Benz", "Mini", "Mitsubishi", "Nissan", "Oldsmobile", "Peugeot", "Plymouth", "Pontiac", "Porsche", "Ram", "Rolls-Royce", "Saab", "Saturn", "Scion", "smart", "Subaru", "Suzuki", "Tesla", "Toyota", "Volkswagen", "Volvo"]),
gr.Textbox(label="Model"),
gr.Dropdown(label="Fuel Type", choices=["Gasoline", "Diesel", "Electric", "Hybrid"]),
gr.Textbox(label="Engine")
],
outputs="number"
)
iface.launch(share=True)