mattritchey commited on
Commit
5564795
·
1 Parent(s): 42f9022

Delete app.py

Browse files
Files changed (1) hide show
  1. app.py +0 -157
app.py DELETED
@@ -1,157 +0,0 @@
1
- import streamlit as st
2
- from streamlit_folium import st_folium
3
- import pandas as pd
4
- import numpy as np
5
- import folium
6
- from joblib import Parallel, delayed
7
-
8
-
9
- @st.cache
10
- def convert_df(df):
11
- return df.to_csv(index=0).encode('utf-8')
12
-
13
-
14
- def map_results(results):
15
- for index, row in results.iterrows():
16
- address, sq_ft = results.loc[index,
17
- 'Address'], results.loc[index, 'Total Area']
18
- html = f"""<p style="arial"><p style="font-size:14px">
19
- {address}
20
- <br> Square Footage: {sq_ft}"""
21
-
22
- iframe = folium.IFrame(html)
23
- popup = folium.Popup(iframe,
24
- min_width=140,
25
- max_width=140)
26
-
27
- folium.Marker(location=[results.loc[index, 'Lat'],
28
- results.loc[index, 'Lon']],
29
- fill_color='#43d9de',
30
- popup=popup,
31
- radius=8).add_to(m)
32
- return folium
33
-
34
-
35
- @st.cache
36
- def get_housing_data(address_input):
37
- address = address_input.replace(
38
- ' ', '+').replace(',', '').replace('#+', '').upper()
39
- try:
40
- census = pd.read_json(
41
- f"https://geocoding.geo.census.gov/geocoder/geographies/onelineaddress?address={address}&benchmark=2020&vintage=2020&format=json")
42
- results = census.iloc[:1, 0][0]
43
- matchedAddress_first = results[0]['matchedAddress']
44
- matchedAddress_last = results[-1]['matchedAddress']
45
- lat, lon = results[0]['coordinates']['y'], results[0]['coordinates']['x']
46
- # lat2, lon2 = results[-1]['coordinates']['y'], results[-1]['coordinates']['x']
47
- censusb = pd.DataFrame({'Description': ['Address Input', 'Census Matched Address: First',
48
- 'Census Matched Address: Last', 'Lat', 'Lon'],
49
- 'Values': [address_input, matchedAddress_first, matchedAddress_last, lat, lon]})
50
-
51
- #Property Records
52
- url = f'https://www.countyoffice.org/property-records-search/?q={address}'
53
- county_office_list = pd.read_html(url)
54
-
55
- if county_office_list[1].shape[1] == 2:
56
- df2 = pd.concat([county_office_list[0], county_office_list[1]])
57
- else:
58
- df2 = county_office_list[0]
59
- df2.columns = ['Description', 'Values']
60
-
61
- final = censusb.append(df2)
62
-
63
- #Transpose
64
- final2 = final.T
65
- final2.columns = final2.loc['Description']
66
- final2 = final2.loc[['Values']].set_index('Address Input')
67
-
68
- except:
69
- final2 = address_input
70
- return final2
71
-
72
-
73
- @st.cache(allow_output_mutation=True)
74
- def address_quick(df, n_jobs=128):
75
- if isinstance(df, pd.DataFrame):
76
- df = df.drop_duplicates()
77
- df['address_input'] = df.iloc[:, 0]+', '+df.iloc[:, 1] + \
78
- ', '+df.iloc[:, 2]+' '+df.iloc[:, 3].astype(str).str[:5]
79
- df['address'] = df['address_input'].replace(
80
- {' ': '+', ',': ''}, regex=True).str.upper()
81
- df['address'] = df['address'].replace({'#+': ''}, regex=True)
82
- # addresses=df['address'].values
83
- addresses_input = df['address_input'].values
84
- else:
85
- addresses_input = [df]
86
- results = Parallel(n_jobs=n_jobs, prefer="threads")(
87
- delayed(get_housing_data)(i) for i in addresses_input)
88
- results_df = [i for i in results if isinstance(i, pd.DataFrame)]
89
- results_errors = [i for i in results if not isinstance(i, pd.DataFrame)]
90
- errors = pd.DataFrame({'Error Addresses': results_errors})
91
- final_results = pd.concat(results_df)
92
- final_results = final_results[final_results.columns[2:]].copy()
93
-
94
- return final_results, errors
95
-
96
-
97
- st.set_page_config(layout="wide")
98
- col1, col2 = st.columns((2))
99
-
100
- address = st.sidebar.text_input(
101
- "Address", "1500 MOHICAN DR, FORESTDALE, AL, 35214")
102
- uploaded_file = st.sidebar.file_uploader("Choose a file")
103
- uploaded_file = 'C:/Users/mritchey/addresses_sample.csv'
104
- address_file = st.sidebar.radio('Choose',
105
- ('Single Address', 'Addresses (Geocode: Will take a bit)'))
106
-
107
-
108
- if address_file == 'Addresses (Geocode: Will take a bit)':
109
- try:
110
- df = pd.read_csv(uploaded_file)
111
- cols = df.columns.to_list()[:4]
112
- with st.spinner("Getting Data: Hang On..."):
113
- results, errors = address_quick(df[cols])
114
-
115
- except:
116
- st.header('Make Sure File is Loaded First and then hit "Addresses"')
117
-
118
- else:
119
- results, errors = address_quick(address)
120
-
121
- m = folium.Map(location=[39.50, -98.35], zoom_start=3)
122
-
123
- with col1:
124
- st.title('Addresses')
125
- map_results(results)
126
- st_folium(m, height=500, width=500)
127
-
128
- with col2:
129
- st.title('Results')
130
- results.index = np.arange(1, len(results) + 1)
131
- st.dataframe(results)
132
- csv = convert_df(results)
133
- st.download_button(
134
- label="Download data as CSV",
135
- data=csv,
136
- file_name='Results.csv',
137
- mime='text/csv')
138
- try:
139
- if errors.shape[0] > 0:
140
-
141
- st.header('Errors')
142
- errors.index = np.arange(1, len(errors) + 1)
143
- st.dataframe(errors)
144
- # st.table(errors.assign(hack='').set_index('hack'))
145
- csv2 = convert_df(errors)
146
- st.download_button(
147
- label="Download Errors as CSV",
148
- data=csv2,
149
- file_name='Errors.csv',
150
- mime='text/csv')
151
- except:
152
- pass
153
-
154
- st.markdown(""" <style>
155
- #MainMenu {visibility: hidden;}
156
- footer {visibility: hidden;}
157
- </style> """, unsafe_allow_html=True)