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)