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 import pickle #API='80ccf867-5353-4474-a01c-d1299496eca7' API='deb65d93-a965-4d1f-a09e-5a047ea959d7' @st.cache def make_date(a): try: return datetime.strptime(a, "%d.%m.%Y").date() except: return date(2000, 3, 14) @st.cache 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 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() try: with open('old_data.pickle', 'rb') as f: old_data=pickle.load(f) len_old_data=len(old_data) except: old_data=[new_data[0]] len_old_data=1 list_to_geocode=new_data[len_old_data::] for lead in list_to_geocode: lead.append(GET_COORDS_YANDEX(lead[8])) 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('coords') old_data[0].append('date') with open('old_data.pickle', 'wb') as f: pickle.dump(old_data, f) DD=pd.DataFrame(old_data[1::], columns=old_data[0]) st.write(DD.head(3)) return DD OBJECTS=import_data() OBJECTS=pd.DataFrame( { 'комнатность':OBJECTS['Кол-во комнат'].values, 'этаж':OBJECTS['Этаж'].values, 'площадь':OBJECTS['Площадь '].values, 'ремонт':OBJECTS['Ремонт'].values, 'Диапазон предварительной оценки':OBJECTS['Предварительная оценка (рынок / выкуп) '].values, 'Дата оценки':OBJECTS['Дата создания'].values, 'geometry':OBJECTS['coords'].values } ) 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['Дата оценки']areamin)&(GEO_OBJECTS['площадь']40: # tag=tag[5:] #tag=f'хуувая квартира №{i}' tag+=str(A[-1]) folium.Marker(location=[lat, log], popup = tag).add_to(m) folium_static(m)