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:** {len(df_properties_cnt)}", 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()