File size: 4,104 Bytes
fd7e04e
9ae8083
6676090
7c90a6c
0934492
fd7e04e
1523bf0
 
 
 
 
 
 
 
 
 
 
 
 
 
5250b05
08625ae
cd9721e
 
 
 
1fedf0d
 
5a66be2
86120d5
 
5a66be2
86120d5
46440c4
1523bf0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82d400e
 
 
 
 
 
 
 
 
 
 
1523bf0
 
86120d5
8f827eb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0934492
8f827eb
 
 
 
 
86120d5
 
68a1d92
 
 
 
1523bf0
1fedf0d
a86821d
1523bf0
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
88
89
90
91
92
93
94
95
96
97
98
99
import streamlit as st
import pandas as pd
import pickle
import json
from utils import create_new_features, normalize, bucketize, init_new_pred

st.set_page_config(layout="wide")

st.markdown("""
    <style>
    .scroll-container {
        height: 500px;  /* Set the height of the scrollable section */
        overflow-y: scroll;
        padding: 10px;
        border: 1px solid #ccc; /* Optional: Add border to make the scrollable area more visible */
    }
    </style>
    """, unsafe_allow_html=True)

# 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)

# 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():
    st.markdown('<div class="scroll-container">', unsafe_allow_html=True)

    # Create two columns for City and Waterfront
    col3, col4 = st.columns(2)

    # City dropdown in the first column
    with col3:
        city = st.selectbox('City', list(cities_geo.keys()))

    # Waterfront checkbox in the second column
    with col4:
        waterfront = st.checkbox('Waterfront', value=False)

    # 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=min_dict['yr_renovated'], max_value=max_dict['yr_renovated'], value=2010)

    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)

# Display the map in the second column
with col2:
    # Placeholder for displaying the predicted price at the top
    price_placeholder = st.empty()
    price_placeholder.markdown(
        f"<h1 style='font-size: 24px;'>Predicted Price: ${predicted_price[0][0]:,.2f}</h1>",
        unsafe_allow_html=True)
    
    map_data = pd.DataFrame(cities_geo[city])
    st.map(map_data, zoom=11)