Spaces:
Paused
Paused
File size: 3,634 Bytes
fd7e04e 9ae8083 6676090 7c90a6c 13bce48 0934492 fd7e04e 1523bf0 a651923 5250b05 08625ae cd9721e 1fedf0d 5a66be2 2d4db89 9202d78 2d4db89 9202d78 e26c3f5 2d4db89 9202d78 2d4db89 86120d5 5a66be2 86120d5 45576df d4d3bd5 651bbaf a651923 05ae74f a651923 476c38a a9b4435 d4d3bd5 a9b4435 8f827eb 86120d5 fe351a4 923de78 be61306 651bbaf 06fbd01 |
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 79 80 81 82 83 84 85 86 87 |
import streamlit as st
import pandas as pd
import pickle
import json
import pydeck as pdk
from utils import create_new_features, normalize, bucketize, init_new_pred
st.set_page_config(layout="wide")
# Load model and files
with open('./trained_model.pkl', 'rb') as file:
model = pickle.load(file)
with open("./min_dict.json", "r") as f:
min_dict = json.load(f)
with open("./max_dict.json", "r") as f:
max_dict = json.load(f)
with open("./cities_geo.json", "r") as f:
cities_geo = json.load(f)
# Custom CSS to adjust the slider width
st.markdown("""
<style>
.stSlider [data-baseweb=slider]{
width: 95%;
}
.stCheckbox, .stSelectbox {
width: 95%px;
}
</style>
""",unsafe_allow_html=True)
# Create two columns: one for the city and one for the map
col1, col2 = st.columns([1, 2]) # Adjust the width ratios as needed
with col1:
st.subheader('Features')
with st.container(height=550, border=True):
city = st.selectbox('City', list(cities_geo.keys())) # Display city dropdown in the first column
waterfront = st.checkbox('Waterfront', value=False)
bedrooms = st.slider('Bedrooms', min_value=min_dict['bedrooms'], max_value=max_dict['bedrooms'], value=3)
bathrooms = st.slider('Bathrooms', min_value=min_dict['bathrooms'], max_value=max_dict['bathrooms'], value=2)
sqft_living = st.slider('Square Feet (Living)', min_value=min_dict['sqft_living'], max_value=max_dict['sqft_living'], value=1000)
sqft_lot = st.slider('Square Feet (Lot)', min_value=min_dict['sqft_lot'], max_value=max_dict['sqft_lot'], value=2000)
floors = st.slider('Floors', min_value=min_dict['floors'], max_value=max_dict['floors'], value=1)
view = st.slider('View', min_value=min_dict['view'], max_value=max_dict['view'], value=0)
condition = st.slider('Condition', min_value=min_dict['condition'], max_value=max_dict['condition'], value=3)
sqft_above = st.slider('Square Feet (Above)', min_value=min_dict['sqft_above'], max_value=max_dict['sqft_above'], value=1000)
sqft_basement = st.slider('Square Feet (Basement)', min_value=min_dict['sqft_basement'], max_value=max_dict['sqft_basement'], value=0)
yr_built = st.slider('Year Built', min_value=min_dict['yr_built'], max_value=max_dict['yr_built'], value=2000)
yr_renovated = st.slider('Year Renovated', min_value=yr_built, max_value=max_dict['yr_renovated'], value=yr_built)
st.markdown('</div>', unsafe_allow_html=True)
new_pred = init_new_pred()
new_pred['bedrooms'] = bedrooms
new_pred['bathrooms'] = bathrooms
new_pred['sqft_living'] = sqft_living
new_pred['sqft_lot'] = sqft_lot
new_pred['floors'] = floors
new_pred['waterfront'] = int(waterfront)
new_pred['view'] = view
new_pred['condition'] = condition
new_pred['sqft_above'] = sqft_above
new_pred['sqft_basement'] = sqft_basement
new_pred['yr_built'] = yr_built
new_pred['yr_renovated'] = yr_renovated
new_pred[f'city_{city}'] = 1
# Process the prediction
new_pred = pd.DataFrame([new_pred])
new_pred = create_new_features(new_pred)
new_pred = bucketize(new_pred)
new_pred = normalize(new_pred)
# Predict the price
predicted_price = model.predict(new_pred)
with col2:
# Placeholder for displaying the predicted price at the top
price_placeholder = st.empty()
price_placeholder.subheader(f'Predicted Price: ${predicted_price[0][0]:,.2f}')
map_data = pd.DataFrame(cities_geo[city])
with st.container(height=550, border=True):
st.map(map_data, zoom=11)
|