AlihanAyverdi's picture
Create app.py
2ad9707 verified
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))