Spaces:
Build error
Build error
File size: 7,251 Bytes
dbd39be | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | import pandas as pd
import joblib
import gradio as gr
# pkl modelini yükle
try:
pipe = joblib.load('pipe.pkl')
except FileNotFoundError:
print("HATA: 'pipe.pkl' dosyası bulunamadı. Lütfen dosyanın doğru yolda olduğundan emin olun.")
pipe = None # Model yüklenemezse None olarak ayarla
except Exception as e:
print(f"Model yüklenirken bir hata oluştu: {e}")
pipe = None
# Veri yükle
try:
df = pd.read_excel('cars.xls')
# Benzersiz değerleri ve NaN olmayanları alıp sıralamak, Gradio dropdown'ları için daha iyi
make_options = sorted(df['Make'].dropna().unique().tolist())
cylinder_options = sorted(df['Cylinder'].dropna().unique().tolist())
doors_options = sorted(df['Doors'].dropna().unique().tolist())
except FileNotFoundError:
print("HATA: 'cars.xls' dosyası bulunamadı. Lütfen dosyanın doğru yolda olduğundan emin olun.")
# Örnek DataFrame veya boş DataFrame oluşturarak uygulamanın çökmesini engelle
df = pd.DataFrame({
'Make': [], 'Model': [], 'Trim': [], 'Type': [],
'Cylinder': [], 'Doors': []
})
make_options = []
cylinder_options = []
doors_options = []
except Exception as e:
print(f"Veri yüklenirken bir hata oluştu: {e}")
df = pd.DataFrame({
'Make': [], 'Model': [], 'Trim': [], 'Type': [],
'Cylinder': [], 'Doors': []
})
make_options = []
cylinder_options = []
doors_options = []
def predict_price(make, model, trim, mileage, car_type, cylinder, liter, doors, cruise, sound, leather):
if pipe is None:
return "HATA: Model yüklenemedi, tahmin yapılamıyor."
try:
# Kullanıcıdan alınan verileri DataFrame'e dönüştür
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 = pipe.predict(input_data)[0]
return f"Tahmini Fiyat: ${int(prediction):,}" # Sayıyı formatla
except Exception as e:
return f"Tahmin sırasında bir hata oluştu: {e}"
# Dinamik olarak model seçeneklerini güncellemek için fonksiyon
def update_models(selected_make):
if pd.isna(selected_make) or not selected_make: # Eğer marka seçilmemişse
return gr.Dropdown(choices=[], label="Model", interactive=True, value=None)
models = sorted(df[df['Make'] == selected_make]['Model'].dropna().unique().tolist())
return gr.Dropdown(choices=models, label="Model", interactive=True, value=None if not models else models[0])
# Dinamik olarak donanım (trim) seçeneklerini güncellemek için fonksiyon
def update_trims(selected_make, selected_model):
if pd.isna(selected_make) or not selected_make or pd.isna(selected_model) or not selected_model:
return gr.Dropdown(choices=[], label="Donanım (Trim)", interactive=True, value=None)
trims = sorted(df[(df['Make'] == selected_make) & (df['Model'] == selected_model)]['Trim'].dropna().unique().tolist())
return gr.Dropdown(choices=trims, label="Donanım (Trim)", interactive=True, value=None if not trims else trims[0])
# Dinamik olarak araç tipi seçeneklerini güncellemek için fonksiyon
def update_types(selected_make, selected_model, selected_trim):
if pd.isna(selected_make) or not selected_make or \
pd.isna(selected_model) or not selected_model or \
pd.isna(selected_trim) or not selected_trim:
return gr.Dropdown(choices=[], label="Araç Tipi", interactive=True, value=None)
types = sorted(df[(df['Make'] == selected_make) &
(df['Model'] == selected_model) &
(df['Trim'] == selected_trim)]['Type'].dropna().unique().tolist())
return gr.Dropdown(choices=types, label="Araç Tipi", interactive=True, value=None if not types else types[0])
# Gradio arayüzü
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("# 🚗 Fiyat Tahmin Uygulaması @drmurataltun")
gr.Markdown("Araba fiyatı tahmini için aşağıdaki bilgileri giriniz:")
with gr.Row():
make_dd = gr.Dropdown(choices=make_options, label="Marka", interactive=True)
model_dd = gr.Dropdown(choices=[], label="Model", interactive=True) # Başlangıçta boş
trim_dd = gr.Dropdown(choices=[], label="Donanım (Trim)", interactive=True) # Başlangıçta boş
with gr.Row():
mileage_num = gr.Number(label="Kilometre", minimum=200, maximum=600000, step=1000, value=50000)
type_dd = gr.Dropdown(choices=[], label="Araç Tipi", interactive=True) # Başlangıçta boş
cylinder_dd = gr.Dropdown(choices=cylinder_options, label="Silindir", interactive=True)
with gr.Row():
liter_num = gr.Number(label="Motor Hacmi (Litre)", minimum=0.8, maximum=8.0, step=0.1, value=2.0)
doors_dd = gr.Dropdown(choices=doors_options, label="Kapı Sayısı", interactive=True)
cruise_rb = gr.Radio(choices=[True, False], label="Hız Sabitleme", value=True, type="value")
with gr.Row():
sound_rb = gr.Radio(choices=[True, False], label="Gelişmiş Ses Sistemi", value=True, type="value")
leather_rb = gr.Radio(choices=[True, False], label="Deri Koltuk", value=False, type="value")
# Dinamik dropdown güncellemeleri için olay dinleyicileri
make_dd.change(fn=update_models, inputs=make_dd, outputs=model_dd)
make_dd.change(fn=lambda: (gr.Dropdown(choices=[], value=None), gr.Dropdown(choices=[], value=None)), outputs=[trim_dd, type_dd]) # Marka değişince trim ve type sıfırla
model_dd.change(fn=update_trims, inputs=[make_dd, model_dd], outputs=trim_dd)
model_dd.change(fn=lambda: gr.Dropdown(choices=[], value=None), outputs=type_dd) # Model değişince type sıfırla
trim_dd.change(fn=update_types, inputs=[make_dd, model_dd, trim_dd], outputs=type_dd)
predict_button = gr.Button("Fiyat Tahmini Yap 💰")
output_text = gr.Textbox(label="Tahmini Sonuç")
predict_button.click(
fn=predict_price,
inputs=[make_dd, model_dd, trim_dd, mileage_num, type_dd, cylinder_dd, liter_num, doors_dd, cruise_rb, sound_rb, leather_rb],
outputs=output_text
)
gr.Markdown("---")
gr.Markdown("### 💡 Kullanım Notları:")
gr.Markdown("- Lütfen tüm alanları doğru bir şekilde doldurun.")
gr.Markdown("- **Marka** seçimi, **Model** seçeneklerini günceller.")
gr.Markdown("- **Model** seçimi, **Donanım (Trim)** seçeneklerini günceller.")
gr.Markdown("- **Marka, Model ve Donanım** seçimi, **Araç Tipi** seçeneklerini günceller.")
gr.Markdown("- 'Hız Sabitleme', 'Gelişmiş Ses Sistemi' ve 'Deri Koltuk' için 'True' (Var) veya 'False' (Yok) seçimi yapınız.")
if __name__ == '__main__':
if pipe is None or df.empty:
print("Model veya veri yüklenemediği için Gradio arayüzü başlatılamıyor.")
print("Lütfen 'car_price_model.pkl' ve 'cars.xls' dosyalarının varlığını ve doğruluğunu kontrol edin.")
else:
demo.launch() |