File size: 5,600 Bytes
fd7e04e
9ae8083
6676090
842df92
fd7e04e
5250b05
08625ae
fd7e04e
5a66be2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86120d5
8f827eb
5a66be2
86120d5
 
5a66be2
86120d5
 
 
 
b042d9f
86120d5
 
 
 
 
 
 
 
 
 
 
 
0a6e3ff
 
86120d5
a677df8
86120d5
 
 
 
 
 
0a6e3ff
86120d5
 
 
 
 
 
a677df8
8f827eb
 
 
 
 
 
 
 
 
 
 
 
 
86120d5
8f827eb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86120d5
 
 
 
8f827eb
 
 
 
 
 
 
 
 
 
 
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import streamlit as st
import pandas as pd
import pickle
from utils import create_new_features, normalize, init_new_pred

with open('./trained_model.pkl', 'rb') as file:
    model = pickle.load(file)

# Define min and max values from the dictionaries
min_dict = {
    'bedrooms': 0,
    'bathrooms': 0,
    'sqft_living': 370,
    'sqft_lot': 638,
    'floors': 1,
    'waterfront': 0,
    'view': 0,
    'condition': 1,
    'sqft_above': 370,
    'sqft_basement': 0,
    'yr_built': 1900,
    'yr_renovated': 0,
    'house_age': 0,
    'years_since_renovation': 0
}

max_dict = {
    'bedrooms': 9,
    'bathrooms': 8,
    'sqft_living': 13540,
    'sqft_lot': 1074218,
    'floors': 3,
    'waterfront': 1,
    'view': 4,
    'condition': 5,
    'sqft_above': 9410,
    'sqft_basement': 4820,
    'yr_built': 2014,
    'yr_renovated': 2014,
    'house_age': 114,
    'years_since_renovation': 2014
}
    


# Create two columns: one for the city and one for the map
col1, col2 = st.columns([1, 2])  # Adjust the width ratios as needed

# Display city dropdown in the first column
with col1:
    # Placeholder for displaying the predicted price at the top
    price_placeholder = st.empty()
    
    st.subheader('City Selection')
    city = st.selectbox(
        'Select City', 
        ['Algona', 'Auburn', 'Beaux Arts Village', 'Bellevue',
         'Black Diamond', 'Bothell', 'Burien', 'Carnation', 'Clyde Hill',
         'Covington', 'Des Moines', 'Duvall', 'Enumclaw', 'Fall City',
         'Federal Way', 'Inglewood-Finn Hill', 'Issaquah', 'Kenmore',
         'Kent', 'Kirkland', 'Lake Forest Park', 'Maple Valley', 'Medina',
         'Mercer Island', 'Milton', 'Newcastle', 'Normandy Park',
         'North Bend', 'Pacific', 'Preston', 'Ravensdale', 'Redmond',
         'Renton', 'Sammamish', 'SeaTac', 'Seattle', 'Shoreline',
         'Skykomish', 'Snoqualmie', 'Snoqualmie Pass', 'Tukwila', 'Vashon',
         'Woodinville', 'Yarrow Point'],
         
    )

    # Create sliders for each item in the dictionaries
    bedrooms = st.slider('Bedrooms', min_value=min_dict['bedrooms'], max_value=max_dict['bedrooms'], value=min_dict['bedrooms'])
    bathrooms = st.slider('Bathrooms', min_value=min_dict['bathrooms'], max_value=max_dict['bathrooms'], value=min_dict['bathrooms'])
    sqft_living = st.slider('Square Feet (Living)', min_value=min_dict['sqft_living'], max_value=max_dict['sqft_living'], value=min_dict['sqft_living'])
    sqft_lot = st.slider('Square Feet (Lot)', min_value=min_dict['sqft_lot'], max_value=max_dict['sqft_lot'], value=min_dict['sqft_lot'])
    floors = st.slider('Floors', min_value=min_dict['floors'], max_value=max_dict['floors'], value=min_dict['floors'])
    waterfront = st.checkbox('Waterfront', value=False, )
    view = st.slider('View', min_value=min_dict['view'], max_value=max_dict['view'], value=min_dict['view'])
    condition = st.slider('Condition', min_value=min_dict['condition'], max_value=max_dict['condition'], value=min_dict['condition'])
    sqft_above = st.slider('Square Feet (Above)', min_value=min_dict['sqft_above'], max_value=max_dict['sqft_above'], value=min_dict['sqft_above'])
    sqft_basement = st.slider('Square Feet (Basement)', min_value=min_dict['sqft_basement'], max_value=max_dict['sqft_basement'], value=min_dict['sqft_basement'])
    yr_built = st.slider('Year Built', min_value=min_dict['yr_built'], max_value=max_dict['yr_built'], value=min_dict['yr_built'])
    yr_renovated = st.slider('Year Renovated', min_value=min_dict['yr_renovated'], max_value=max_dict['yr_renovated'], value=min_dict['yr_renovated'])

    # if (city != 'Algona' or # Assuming Algona as the default value
    #     bedrooms != min_dict['bedrooms'] or
    #     bathrooms != min_dict['bathrooms'] or
    #     sqft_living != min_dict['sqft_living'] or
    #     sqft_lot != min_dict['sqft_lot'] or
    #     floors != min_dict['floors'] or
    #     int(waterfront) != 0 or  # Assuming default value for waterfront is 0
    #     view != min_dict['view'] or
    #     condition != min_dict['condition'] or
    #     sqft_above != min_dict['sqft_above'] or
    #     sqft_basement != min_dict['sqft_basement'] or
    #     yr_built != min_dict['yr_built'] or
    #     yr_renovated != min_dict['yr_renovated']):
        
    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 = normalize(new_pred)

    # Predict the price
    predicted_price = model.predict(new_pred)

    # Display the predicted price at the top of the app
    price_placeholder.write(f"Predicted Price: ${predicted_price[0][0]:,.2f}")

# Display the map in the second column
with col2:
    st.subheader('Map')
    if city == 'Algona':
        map_data = pd.DataFrame({
            'latitude': [47.6097, 47.6205, 47.6762],
            'longitude': [-122.3331, -122.3493, -122.3198]
        })
    elif city == 'Auburn':
        map_data = pd.DataFrame({
            'latitude': [47.6101, 47.6183],
            'longitude': [-122.2015, -122.2046]
        })
    st.map(map_data)