File size: 3,102 Bytes
2ad9707
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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))