Spaces:
Runtime error
Runtime error
import streamlit as st | |
import numpy as np | |
import pandas as pd | |
import gspread | |
import folium | |
import requests as r | |
from datetime import datetime | |
from datetime import date | |
from bs4 import BeautifulSoup as bs | |
from shapely.geometry import Point | |
from google.oauth2.service_account import Credentials | |
from streamlit_folium import folium_static | |
import pickle | |
import os | |
#API='80ccf867-5353-4474-a01c-d1299496eca7' | |
API='deb65d93-a965-4d1f-a09e-5a047ea959d7' | |
def make_date(a): | |
try: | |
return datetime.strptime(a, "%d.%m.%Y").date() | |
except: | |
return date(2000, 3, 14) | |
def GET_COORDS_YANDEX(adress): | |
ADRESS=adress.replace(' ', '+') | |
result=r.get(f'https://geocode-maps.yandex.ru/1.x/?apikey={API}&geocode={ADRESS}&results=1') | |
res_b_xml=bs(result.content, "lxml") | |
try: | |
coords=res_b_xml.find('pos').text.split() | |
res=[float(a) for a in coords] | |
return Point(res) | |
except: | |
return None | |
def first_try(data): | |
old_data=[data[0]] | |
len_old_data=1 | |
return old_data, len_old_data | |
def import_data(): | |
scopes = [ | |
'https://www.googleapis.com/auth/spreadsheets', | |
'https://www.googleapis.com/auth/drive' | |
] | |
credentials = Credentials.from_service_account_file( | |
'test-project-for-telegram-bot-bcb5e887f016.json', | |
scopes=scopes | |
) | |
gc = gspread.authorize(credentials) | |
spr = gc.open_by_url("https://docs.google.com/spreadsheets/d/1Ol9039HJ99Q8xVVp1Wwz5iBdURxEKHLIcEvyqUc2pZM/edit#gid=642560994") | |
wks=spr.worksheet('Консолидированный список') | |
new_data=wks.get_all_values() | |
new_data[0].pop(-1) | |
new_data[0].pop(-1) | |
with open('old_data.pickle', 'rb') as f: | |
if os.stat('old_data.pickle').st_size == 0: | |
old_data, len_old_data=first_try(new_data) | |
else: | |
old_data=pickle.load(f) | |
len_old_data=len(old_data) | |
list_to_geocode=new_data[len_old_data::] | |
for lead in list_to_geocode: | |
lead.pop(-1) | |
lead.pop(-1) | |
lead.append(GET_COORDS_YANDEX(lead[8])) | |
#lead.append('thee must be coords') | |
lead.append(make_date(lead[3])) | |
for lead in list_to_geocode: | |
old_data.append(lead) | |
if len(old_data[0])!=len(old_data[1]): | |
old_data[0].append('coords1') | |
old_data[0].append('date1') | |
with open('old_data.pickle', 'wb') as f: | |
pickle.dump(old_data, f) | |
DD=pd.DataFrame(old_data[1::], columns=old_data[0]) | |
return DD | |
OBJECTS=import_data() | |
OBJECTS=pd.DataFrame( | |
{ | |
'комнатность':OBJECTS['Кол-во комнат'].values, | |
'этаж':OBJECTS['Этаж'].values, | |
'площадь':OBJECTS['Площадь '].values, | |
'ремонт':OBJECTS['Ремонт'].values, | |
'Диапазон предварительной оценки':OBJECTS['Предварительная оценка (рынок / выкуп) '].values, | |
'Дата оценки':OBJECTS['date1'].values, | |
'geometry':OBJECTS['coords1'].values | |
} | |
) | |
st.write(OBJECTS.head(3)) | |
GEO_OBJECTS=gpd.GeoDataFrame(OBJECTS) | |
with st.sidebar: | |
st.header('Введите параметры оценок') | |
min_date = st.date_input("введите минимальную дату оценки", date(2019, 7, 6)) | |
max_date = st.date_input("введите максимальную дату оценки", date(2019, 7, 6)) | |
rooms = st.multiselect('комантность', ['ст', '1', '2', '3', '4'], ['1', '2']) | |
areamin, areamax = st.slider('Select a range of values', 0.0 , 200.0, (25.0, 75.0)) | |
start_adress = st.text_input("адресс текущей оценки") | |
#Data_to_plot=GEO_OBJECTS.loc[(GEO_OBJECTS['Дата оценки']>min_date)&(GEO_OBJECTS['Дата оценки']<min_date)&(GEO_OBJECTS['комнатность'] in rooms)&(GEO_OBJECTS['площадь']>areamin)&(GEO_OBJECTS['площадь']<areamax)] | |
st.subheader('Карта оценок') | |
m = folium.Map(location=[55.87890, 37.71943], zoom_start=10, tiles='CartoDB positron') | |
#for A in Data_to_plot.values: | |
# tag='' | |
# lat=A[5].y | |
# log=A[5].x | |
# for feature in A[:-2]: | |
# tag+=feature.replace('\"', '').replace("'","").replace("/"," ")+' ' | |
#if len(tag)>40: | |
# tag=tag[5:] | |
#tag=f'хуувая квартира №{i}' | |
# tag+=str(A[-1]) | |
# folium.Marker(location=[lat, log], | |
# popup = tag).add_to(m) | |
folium_static(m) | |