Spaces:
Sleeping
Sleeping
import pandas as pd | |
import numpy as np | |
import pickle | |
import streamlit as st | |
from sklearn.model_selection import train_test_split | |
from sklearn.linear_model import LinearRegression | |
from sklearn.pipeline import Pipeline | |
from sklearn.compose import ColumnTransformer | |
from sklearn.preprocessing import StandardScaler, OneHotEncoder | |
# Veri Setini Yükleyin | |
df = pd.read_csv('kc_house_data.csv') | |
# Girdileri ve çıktıları ayırma | |
X = df.drop('price', axis=1) | |
y = df[['price']] | |
# Eğitim ve test setlerine ayırma | |
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) | |
# Ön işleme ve model pipeline'ı oluşturma | |
preprocessor = ColumnTransformer(transformers=[ | |
('num', StandardScaler(), ['bedrooms', 'bathrooms', 'sqft_living', 'sqft_lot', 'floors', 'sqft_above', 'sqft_basement', 'yr_built', 'yr_renovated', 'sqft_living15', 'sqft_lot15']), | |
('cat', OneHotEncoder(), ['zipcode']) | |
]) | |
model = LinearRegression() | |
pipe = Pipeline(steps=[('preprocessor', preprocessor), ('model', model)]) | |
pipe.fit(X_train, y_train) | |
# Modeli kaydet | |
with open('ev_fiyat_modeli.pkl', 'wb') as f: | |
pickle.dump(pipe, f) | |
# Modeli yükle | |
with open('ev_fiyat_modeli.pkl', 'rb') as f: | |
loaded_model = pickle.load(f) | |
# Tahmin fonksiyonu | |
def predict_price(bedrooms, bathrooms, sqft_living, sqft_lot, floors, sqft_above, sqft_basement, yr_built, yr_renovated, sqft_living15, sqft_lot15, zipcode): | |
input_data = pd.DataFrame({ | |
'bedrooms': [bedrooms], | |
'bathrooms': [bathrooms], | |
'sqft_living': [sqft_living], | |
'sqft_lot': [sqft_lot], | |
'floors': [floors], | |
'sqft_above': [sqft_above], | |
'sqft_basement': [sqft_basement], | |
'yr_built': [yr_built], | |
'yr_renovated': [yr_renovated], | |
'sqft_living15': [sqft_living15], | |
'sqft_lot15': [sqft_lot15], | |
'zipcode': [zipcode] | |
}) | |
prediction = loaded_model.predict(input_data)[0][0] | |
return max(0, prediction) # Negatif değerleri sıfıra eşitle | |
# Streamlit arayüzü | |
st.title("Ev Fiyatı Tahmini 🏠") | |
st.write("Evin özelliklerini girin") | |
bedrooms = st.number_input("Yatak Odası Sayısı", 1, 10) | |
bathrooms = st.number_input("Banyo Sayısı", 1, 5) | |
sqft_living = st.number_input("Metrekare (Yaşam Alanı)", 50, 10000) | |
sqft_lot = st.number_input("Metrekare (Arsa Alanı)", 50, 50000) | |
floors = st.number_input("Kat Sayısı", 1, 3) | |
sqft_above = st.number_input("Metrekare (Zemin Üstü)", 50, 10000) | |
sqft_basement = st.number_input("Metrekare (Zemin Altı)", 0, 5000) | |
yr_built = st.number_input("Yapım Yılı", 1900, 2022) | |
yr_renovated = st.number_input("Renovasyon Yılı", 0, 2022) | |
sqft_living15 = st.number_input("Yakın Metrekare (Yaşam Alanı)", 50, 10000) | |
sqft_lot15 = st.number_input("Yakın Metrekare (Arsa Alanı)", 50, 50000) | |
zipcode = st.selectbox("Posta Kodu", df['zipcode'].unique()) | |
if st.button("Tahmin Et"): | |
pred = predict_price(bedrooms, bathrooms, sqft_living, sqft_lot, floors, sqft_above, sqft_basement, yr_built, yr_renovated, sqft_living15, sqft_lot15, zipcode) | |
st.write("Tahmini Fiyat: $", round(pred, 2)) | |