Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| import joblib | |
| # ========================= | |
| # PAGE CONFIG / SAYFA AYARLARI | |
| # ========================= | |
| st.set_page_config(page_title="Diamond Predictor", page_icon="💎", layout="wide") | |
| # ========================= | |
| # LOAD MODEL / MODELİ YÜKLE | |
| # ========================= | |
| def load_model(): | |
| # Model dosyasının adını kontrol et / Check model filename | |
| model = joblib.load('diamond_catboost_model.pkl') | |
| return model | |
| model = load_model() | |
| # ========================= | |
| # HEADER / BAŞLIK | |
| # ========================= | |
| st.title("💎 Diamond Price Prediction App") | |
| st.subheader("TR: Elmas Fiyat Tahmini Uygulaması | EN: Diamond Price Prediction Tool") | |
| st.write("---") | |
| # ========================= | |
| # SIDEBAR - INPUTS / YAN PANEL - GİRDİLER | |
| # ========================= | |
| st.sidebar.header("🔧 Input Features / Girdi Özellikleri") | |
| def get_user_inputs(): | |
| carat = st.sidebar.number_input("Carat (Ağırlık)", 0.2, 5.0, 1.0, step=0.01) | |
| cut = st.sidebar.selectbox("Cut (Kesim)", | |
| ["Ideal", "Premium", "Very Good", "Good", "Fair"]) | |
| color = st.sidebar.selectbox("Color (Renk)", | |
| ["D", "E", "F", "G", "H", "I", "J"]) | |
| clarity = st.sidebar.selectbox("Clarity (Berraklık)", | |
| ["IF", "VVS1", "VVS2", "VS1", "VS2", "SI1", "SI2", "I1"]) | |
| depth = st.sidebar.slider("Depth (%)", 43.0, 79.0, 61.0) | |
| table = st.sidebar.slider("Table Width (%)", 43.0, 95.0, 57.0) | |
| col1, col2, col3 = st.sidebar.columns(3) | |
| x = col1.number_input("X (mm)", 0.0, 11.0, 5.0) | |
| y = col2.number_input("Y (mm)", 0.0, 58.0, 5.0) | |
| z = col3.number_input("Z (mm)", 0.0, 31.0, 3.0) | |
| data = { | |
| 'carat': carat, 'cut': cut, 'color': color, 'clarity': clarity, | |
| 'depth': depth, 'table': table, 'x': x, 'y': y, 'z': z | |
| } | |
| return pd.DataFrame([data]) | |
| input_df = get_user_inputs() | |
| # ========================= | |
| # MAIN DISPLAY / ANA EKRAN | |
| # ========================= | |
| col_main1, col_main2 = st.columns([1, 1]) | |
| with col_main1: | |
| st.markdown("### 📋 Selected Features / Seçilen Özellikler") | |
| st.dataframe(input_df, use_container_width=True) | |
| # ========================= | |
| # PREPROCESSING / VERİ ÖN İŞLEME | |
| # ========================= | |
| # Create dummy variables | |
| input_encoded = pd.get_dummies(input_df) | |
| # Fix 'carat_group_mid' if missing (Modelin beklediği o özel sütun) | |
| if "carat_group_mid" in model.feature_names_: | |
| input_encoded["carat_group_mid"] = input_df["carat"].iloc[0] | |
| # Align with model features (Modelin beklediği sütun sırasına sok) | |
| final_df = input_encoded.reindex(columns=model.feature_names_, fill_value=0) | |
| # ========================= | |
| # PREDICTION / TAHMİN | |
| # ========================= | |
| with col_main2: | |
| st.markdown("### 🎯 Prediction / Tahmin") | |
| if st.button("Predict Price / Fiyatı Tahmin Et"): | |
| prediction = model.predict(final_df)[0] | |
| st.balloons() | |
| st.success(f"💰 Estimated Price / Tahmini Fiyat: **${prediction:,.2f}**") | |
| # Additional Info / Ek Bilgi | |
| st.info(""" | |
| **EN:** This prediction is based on the CatBoost model with 98% accuracy. | |
| **TR:** Bu tahmin, %98 doğruluk oranına sahip CatBoost modeli tarafından yapılmıştır. | |
| """) | |
| # ========================= | |
| # FOOTER / ALT BİLGİ | |
| # ========================= | |
| st.write("---") | |
| st.caption("Created by Esma | Diamond Price Prediction Project") |