comps_model / app.py
Borya-Goldarb's picture
Update app.py
a1f0692 verified
import streamlit as st
import pandas as pd
def get_market_submarket(df, google_ola):
filtered_row = df[df['google_ola'] == google_ola].iloc[0]
return filtered_row['rent_combined'], filtered_row['building_sf'], filtered_row['rented_sf'], filtered_row['market_costar'], filtered_row['full_submarket_costar']
def main():
st.set_page_config(initial_sidebar_state="collapsed", layout="wide")
st.session_state['user_select_value'] = ""
st.session_state['year_buit'] = 1999
st.session_state['submarket_val'] = ""
st.session_state['market_val'] = ""
def display_list_and_input():
option_choice = st.selectbox("Select a property address", df_options)
return option_choice
if 'user_select_value' not in st.session_state:
st.session_state['user_select_value'] = ""
if 'building_sf' not in st.session_state:
st.session_state['building_sf'] = 0
if 'rented_sf' not in st.session_state:
st.session_state['rented_sf'] = 0
if 'execution_dates' not in st.session_state:
st.session_state['execution_dates'] = 2014
if 'LSF' not in st.session_state:
st.session_state['LSF'] = 75000
if 'prediction' not in st.session_state:
st.session_state['prediction'] = 0
st.title("Search")
df_properties = pd.read_csv("all_data_with_market.csv", encoding='utf-8')
df_options = st.session_state.get("df_options", [st.session_state['user_select_value']] + df_properties.google_ola.tolist())
# search_options = [""] + options
selected_option = display_list_and_input()
col_1_1, col_1_2 = st.columns([1, 2])
with col_1_1:
st.write('Filter definition')
min_property_size, max_property_size = st.slider('Property Size % Filter', min_value=-100, max_value=200, step = 10,
value=(-50, 100))
min_property_lease_size, max_property_lease_size = st.slider('Lease Size % Filter', min_value=-100, max_value=300, step = 10,
value=(-100, 300))
months_back = st.slider('Lease Range Filter (Last X Months)', min_value=0, max_value=36,
value=(14))
st.session_state['min_property_size_perc'] = min_property_size
st.session_state['max_property_size_perc'] = max_property_size
st.session_state['min_property_lease_size_perc'] = min_property_lease_size
st.session_state['max_property_lease_size_perc'] = max_property_lease_size
st.session_state['months_back'] = months_back
if selected_option != "":
# user's filter for property size is a range in percentage around picked property
min_size = (100 + st.session_state['min_property_size_perc']) / 100 * st.session_state['building_sf']
max_size = (100 + st.session_state['max_property_size_perc']) / 100 * st.session_state['building_sf']
# # user's filter for lease size is a range in percentage around picked lease
lease_min_size = (100 + st.session_state['min_property_lease_size_perc']) / 100 * st.session_state['rented_sf']
lease_max_size = (100 + st.session_state['max_property_lease_size_perc']) / 100 * st.session_state['rented_sf']
#apply all filters
mask = (df_properties['rented_sf'] >= lease_min_size) & (df_properties['rented_sf'] <= lease_max_size) &(df_properties['building_sf'] >= min_size) & (df_properties['building_sf'] <= max_size) & (df_properties['months_since'] <= st.session_state['months_back'])
df_properties_cnt = df_properties[mask].copy()
# st.markdown(f"**Number of Rows After Applying Filters:** <span style='font-size:24px'>{len(df_properties_cnt)}</span>", unsafe_allow_html=True)
# st.write("Number of Rows After Applying Filters : ", len(df_properties_cnt))
if st.button("Submit"):
if selected_option == "":
st.write(":red[Please choose the property address]")
else:
st.session_state['user_select_value'] = selected_option
st.session_state['execution_dates'] = 2014
prediction, building_sf, rented_sf, market_val, submarket_val = get_market_submarket(df_properties, selected_option)
st.session_state['market_val'] = market_val
st.session_state['submarket_val'] = submarket_val
st.session_state['building_sf'] = building_sf
st.session_state['rented_sf'] = rented_sf
st.session_state['prediction'] = prediction
st.switch_page("pages/market_rent_estimation.py")
if __name__ == "__main__":
main()