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_basement': [sqft_basement], 'sqft_above': [sqft_above], '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("Home Price Estimate") st.write("Enter the features of the house") bedrooms = st.number_input("Number of Attack Rooms", 1, 10) bathrooms = st.number_input("Number of Bathrooms", 1, 5) sqft_living = st.number_input("Metrekare (Yaşam Alanı)", 50, 10000) sqft_lot = st.number_input("Square Meters (Living Space)", 50, 50000) floors = st.number_input("Number of Floors", 1, 3) sqft_above = st.number_input("Square Meters (Above Ground)", 50, 10000) sqft_basement = st.number_input("Square Meters (Underground)", 0, 5000) yr_built = st.number_input("Year of Construction", 1900, 2022) yr_renovated = st.number_input("Year of Renovation", 0, 2022) sqft_living15 = st.number_input("Nearby Square Meters (Living Space)", 50, 10000) sqft_lot15 = st.number_input("Nearby Square Meters (Land Area)", 50, 50000) zipcode = st.selectbox("Postal code", df['zipcode'].unique()) if st.button("Set an estimated price"): 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("Estimated Price: $", round(pred, 2))