import pandas as pd import joblib import gradio as gr # Modeli yükle try: pipe = joblib.load('car_price_model.pkl') except FileNotFoundError: print("HATA: 'car_price_model.pkl' dosyası bulunamadı.") pipe = None 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') 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ı.") df = pd.DataFrame({ 'Make': [], 'Model': [], 'Trim': [], 'Type': [], 'Cylinder': [], 'Doors': [] }) make_options, cylinder_options, doors_options = [], [], [] except Exception as e: print(f"Veri yüklenirken hata oluştu: {e}") df = pd.DataFrame({ 'Make': [], 'Model': [], 'Trim': [], 'Type': [], 'Cylinder': [], 'Doors': [] }) make_options, cylinder_options, doors_options = [], [], [] # Tahmin fonksiyonu def predict_price(make, model, trim, mileage, car_type, cylinder, liter, doors, cruise, sound, leather): if pipe is None: return "HATA: Model yüklenemedi." try: 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):,}" except Exception as e: return f"Tahmin sırasında hata oluştu: {e}" # Dinamik dropdown güncellemeleri def update_models(selected_make): if pd.isna(selected_make) or not selected_make: return gr.Dropdown(choices=[], label="🚘 Model", interactive=True) models = sorted(df[df['Make'] == selected_make]['Model'].dropna().unique().tolist()) return gr.Dropdown(choices=models, label="🚘 Model", interactive=True, value=models[0] if models else None) def update_trims(selected_make, selected_model): if not selected_make or not selected_model: return gr.Dropdown(choices=[], label="🎯 Donanım (Trim)", interactive=True) 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=trims[0] if trims else None) def update_types(selected_make, selected_model, selected_trim): if not selected_make or not selected_model or not selected_trim: return gr.Dropdown(choices=[], label="🚗 Araç Tipi", interactive=True) 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=types[0] if types else None) # Gradio arayüzü (tema: mor) with gr.Blocks(theme=gr.themes.Soft(primary_hue="purple")) as demo: gr.Markdown("

🚗 Araba Fiyat Tahmin Uygulaması

") gr.Markdown("

🧠 Makine Öğrenmesi tabanlı fiyat tahmini yapmak için bilgileri doldurun.

") with gr.Accordion("📋 Tahmin Girdileri", open=True): with gr.Row(): make_dd = gr.Dropdown(choices=make_options, label="🔰 Marka", interactive=True) model_dd = gr.Dropdown(choices=[], label="🚘 Model", interactive=True) trim_dd = gr.Dropdown(choices=[], label="🎯 Donanım (Trim)", interactive=True) 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) 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") with gr.Row(): predict_button = gr.Button("💸 Fiyat Tahmini Yap", variant="primary") with gr.Row(): output_text = gr.Textbox(label="📈 Tahmini Sonuç", lines=1) # Dropdown güncellemeleri 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]) 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) trim_dd.change(fn=update_types, inputs=[make_dd, model_dd, trim_dd], outputs=type_dd) 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ı

""") # Uygulama çalıştır if __name__ == '__main__': if pipe is None or df.empty: print("Model veya veri yüklenemedi. Uygulama başlatılamıyor.") else: demo.launch()