Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| from streamlit_folium import folium_static | |
| import numpy as np | |
| import folium | |
| import matplotlib.pyplot as plt | |
| import seaborn as sns | |
| from datetime import datetime, timedelta | |
| def main(): | |
| st.set_page_config(initial_sidebar_state="collapsed", layout="wide") | |
| data = { | |
| "favorite": [True, False, False, True, True, False, False, True], | |
| 'Address': ['Location_A', 'Location_B', 'Location_C', 'Location_D', 'Location_E', | |
| 'Location_F', 'Location_G', 'Location_H' | |
| ], | |
| 'latitude': np.random.uniform(40.7, 40.8, size=8), # Assuming latitude range between 40.7 and 40.8 | |
| 'longitude': np.random.uniform(-74.0, -73.9, size=8), # Assuming longitude range between -74.0 and -73.9 | |
| 'Match score': [90, 89, 88, 87, 86, 85, 84, 83], | |
| 'Market': ["M1", "M1", "M1", "M1", "M1", "M1", "M1", "M1"], | |
| 'Sub-market': ["S1", "S1", "S1", "S1", "S1", "S1", "S1", "S1"], | |
| 'Lease Date': ["2024/1/1", "2024/1/1", "2024/1/1", "2024/1/1", "2024/1/1", "2024/1/1", "2024/1/1", "2024/1/1"], | |
| 'LSF': [20000, 30000, 20000, 30000, 20000, 30000, 50000, 35000], | |
| 'RSF': [20000, 30000, 20000, 30000, 20000, 30000, 50000, 35000], | |
| 'Rent (NNN)': [11, 11, 11, 12, 12, 12, 12, 15], | |
| 'Year Built': [2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019], | |
| 'Office %': [20, 20, 20, 20, 20, 20, 20, 20], | |
| 'Clear Height':[19, 18, 19, 18, 17, 19, 19, 18], | |
| 'Doors (drive in / Dock)': [2, 2, 2, 2, 2, 2, 2, 2], | |
| 'Lease Term ': [60, 60, 60, 60, 60, 60, 60, 60], | |
| 'Rent (Gross)': [11, 11, 11, 12, 12, 12, 12, 15], | |
| 'TIs ': [1, 1, 1, 1, 1, 1, 1, 1] | |
| } | |
| # Create DataFrame | |
| df_data = pd.DataFrame(data) | |
| # df_data_checkbox = df_data.copy() | |
| # df_data_checkbox.insert(loc=0, column='Select rows', value=[False]*len(df_data)) | |
| filtered_data2 = df_data[['Address', 'Market', 'Sub-market', 'Lease Date', 'LSF', 'RSF', 'Rent (NNN)', 'Year Built', 'Office %', 'Clear Height', 'Doors (drive in / Dock)', 'Lease Term ', 'Rent (Gross)']] | |
| filtered_data = pd.concat([filtered_data2]) | |
| # Display the filtered data | |
| col_1_1, col_1_2 = st.columns([2, 1]) | |
| with col_1_1: | |
| st.write('Comps list:') | |
| display_df = st.table(filtered_data) | |
| with col_1_2: | |
| # Create a map object | |
| m = folium.Map(width=500, height=440, location=(df_data['latitude'].mean(), df_data['longitude'].mean()), zoom_start=10) | |
| # Add markers to the map | |
| all_markers = folium.FeatureGroup(name='All Markers') | |
| active_markers = folium.FeatureGroup(name='Active Markers', show=False) | |
| inactive_markers = folium.FeatureGroup(name='Inactive Markers', show=False) | |
| for index, row in df_data.iterrows(): | |
| status_color = 'green' if index%2==0 else 'red' | |
| html_content = f""" | |
| <div style=" | |
| display: inline-block; | |
| background-color: white; | |
| border: 2px solid black; | |
| border-radius: 50%; | |
| width: 20px; | |
| height: 20px; | |
| text-align: center; | |
| line-height: 20px; | |
| font-size: 8pt; | |
| color: {status_color}; | |
| ">{index}</div> | |
| """ | |
| # Create a DivIcon with custom HTML content | |
| icon = folium.DivIcon(html=html_content) | |
| marker = folium.Marker([row['latitude'], row['longitude']], popup=row['Address'], icon=icon).add_to(m) | |
| # Add layer control to toggle marker visibility | |
| folium.LayerControl().add_to(m) | |
| polygon_coords = [ [np.random.uniform(40.7, 40.8, size=6)[i], np.random.uniform(-74.0, -73.9, size=6)[i]] for i in range(6)] | |
| # Create a polygon object | |
| polygon = folium.Polygon(locations=polygon_coords, color='blue', fill=True, fill_color='blue', fill_opacity=0.3) | |
| # Add the tag to the polygon | |
| popup_text = "This is my polygon" | |
| popup = folium.Popup(popup_text, parse_html=True) | |
| polygon.add_child(popup) | |
| # Add the polygon to the map | |
| m.add_child(polygon) | |
| # Render the map | |
| folium_static(m) | |
| col_2_1, col_2_2, col_2_3 = st.columns([4, 4, 1]) | |
| with col_2_1: | |
| option = st.radio("Add comps:", (":rainbow[On]", ":rainbow[Off]"), horizontal=True, index=1) | |
| with col_2_2: | |
| if st.button("Predictions"): | |
| st.switch_page("pages/market_rent_estimation.py") | |
| with col_2_3: | |
| if st.button("Rexy"): | |
| st.switch_page("pages/rexy.py") | |
| if option == ":rainbow[On]": | |
| col_3_1, col_3_2, col_3_3 = st.columns([5,1,5]) | |
| with col_3_1: | |
| data5 = { | |
| "favorite": [False]*8, | |
| 'Address': ['B', 'B', 'B', 'B', 'B', 'B', 'B', 'B'], | |
| 'latitude': [40.7]*8, # Assuming latitude range between 40.7 and 40.8 | |
| 'longitude': [-74.0]*8, # Assuming longitude range between -74.0 and -73.9 | |
| 'Match score': [12, 12, 12, 12, 12, 12, 12, 12], | |
| 'Market': ["M2", "M2", "M2", "M2", "M2", "M2", "M2", "M2"], | |
| 'Sub-market': ["S2", "S2", "S2", "S2", "S2", "S2", "S2", "S2"], | |
| 'Lease Date': ["2024/1/1", "2024/1/1", "2024/1/1", "2024/1/1", "2024/1/1", "2024/1/1", "2024/1/1", "2024/1/1"], | |
| 'LSF': [20000, 30000, 20000, 30000, 20000, 30000, 50000, 35000], | |
| 'RSF': [20000, 30000, 20000, 30000, 20000, 30000, 50000, 35000], | |
| 'Rent (NNN)': [11, 11, 11, 12, 12, 12, 12, 15], | |
| 'Year Built': [2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019], | |
| 'Office %': [20, 20, 20, 20, 20, 20, 20, 20], | |
| 'Clear Height':[19, 18, 19, 18, 17, 19, 19, 18], | |
| 'Doors (drive in / Dock)': [2, 2, 2, 2, 2, 2, 2, 2], | |
| 'Lease Term ': [60, 60, 60, 60, 60, 60, 60, 60], | |
| 'Rent (Gross)': [11, 11, 11, 12, 12, 12, 12, 15], | |
| 'TIs ': [1, 1, 1, 1, 1, 1, 1, 1] | |
| } | |
| # Create DataFrame | |
| df5 = pd.DataFrame(data5) | |
| # df5.insert(loc=0, column='Select rows', value=[False]*len(df5)) | |
| st.write('Additional comps') | |
| test = st.data_editor( | |
| df5, | |
| column_config={ | |
| "favorite": st.column_config.CheckboxColumn( | |
| "Your favorite?", | |
| help="Select your **favorite** widgets", | |
| default=False, | |
| ) | |
| }, | |
| disabled=['Address','latitude','longitude','Match score','Market','Sub-market','Lease Date','LSF', | |
| 'RSF','Rent (NNN)','Year Built','Office %','Clear Height','Doors (drive in / Dock)','Lease Term ','Rent (Gross)','TIs '], | |
| hide_index=True, | |
| ) | |
| with col_3_2: | |
| if st.button("Add comps", help="Click to add more comps"): | |
| filtered_data1 = pd.concat([filtered_data, test.drop(columns=['favorite'])]) | |
| # filtered_data.update(test.drop(columns=['favorite'])) | |
| display_df.table(filtered_data1) | |
| with col_3_3: | |
| st.write('Filter definition') | |
| range_1 = st.slider('Lease date', min_value=0, max_value=36, | |
| value=(12)) | |
| range_2 = st.slider('Location in mi', min_value=0, max_value=50, | |
| value=(12)) | |
| range_3 = st.slider('LSF', min_value=0, max_value=500000, step = 1000, | |
| value=(20000, 200000)) | |
| range_4 = st.slider('Clear height', min_value=0, max_value=50, | |
| value=(15, 30)) | |
| range_5 = st.slider('Year built', min_value=1960, max_value=2024, | |
| value=(1999, 2010)) | |
| range_5 = st.slider('Far %', min_value=0, max_value=100, | |
| value=50) | |
| range_6 = st.slider('Office %', min_value=0, max_value=100, | |
| value=30) | |
| range_7 = st.slider('Docl doors & Drive-in', min_value=0, max_value=20, | |
| value=3) | |
| st.button("Apply filter", key="submit_button", help="Click to submit") | |
| if __name__ == "__main__": | |
| main() |