import pandas as pd import streamlit as st import plotly.graph_objects as go df = pd.read_excel("result.xlsx") def get_lat_lon(row): row = eval(row['result_dadata'])[0] lat = row['geo_lat'] lon = row['geo_lon'] adress = row['result'] return lat, lon, adress def get_colors(row): if row > 10000: return 'red' elif row <= 10000 and row > 4000: return 'blue' elif row <= 4000 and row > 2000: return 'yellow' # elif row <= 2000 and row > 1000: # return 'green' # elif row <= 200 and row > 100: # return 'purple' # elif row <= 100 and row > 30: # return 'orange' else: return 'black' df[['lat', 'lon', 'adress']] = df.apply(get_lat_lon, axis=1, result_type='expand') viz_df = df[['lpu_name','lat', 'lon', 'adress', 'MT_SUM_RUR']].copy() viz_df['MT_SUM_RUR'] = viz_df['MT_SUM_RUR']/1000 viz_df[['lat','lon']] = viz_df[['lat','lon']].astype(float) viz_df['colors'] = viz_df['MT_SUM_RUR'].apply(get_colors) text_series ="Название клиники: "+ viz_df['lpu_name'] + "
" + "Адрес: " + viz_df["adress"] + "
" + "Сумма:" + viz_df['MT_SUM_RUR'].astype(str) + " тыс.руб" fig_bubbles_coords = go.Figure(data=go.Scattermapbox( lat=viz_df['lat'], lon=viz_df['lon'], mode='markers', marker=go.scattermapbox.Marker( size=viz_df['MT_SUM_RUR'], color='red', sizemode='area', sizeref=5, opacity=0.6 ), text=text_series, )) fig_bubbles_coords.update_layout( mapbox_style='open-street-map', autosize=True, hovermode='closest', showlegend=False, mapbox=dict( center=dict(lat=viz_df['lat'].mean(), lon=viz_df['lon'].mean()), zoom=9 ), width=900, height=900 ) fig_bubbles = go.Figure(data=go.Scattermapbox( lat=viz_df['lat'], lon=viz_df['lon'], mode='markers', marker=go.scattermapbox.Marker( size=viz_df['MT_SUM_RUR'], color='red', sizemode='area', sizeref=5, opacity=0.6, ), customdata=text_series, )) fig_bubbles.update_layout( mapbox_style='open-street-map', autosize=True, hovermode='closest', showlegend=False, mapbox=dict( center=dict(lat=viz_df['lat'].mean(), lon=viz_df['lon'].mean()), zoom=9 ), width=900, height=900 ) fig_bubbles.update_traces(hovertemplate='%{customdata}') fig_heatbar = go.Figure(data=go.Scattermapbox( lat=viz_df['lat'], lon=viz_df['lon'], mode='markers', marker=go.scattermapbox.Marker( color=viz_df['MT_SUM_RUR'], sizemode='area', sizeref=5, opacity=1, colorscale='rdylbu', # Градиент цветов от светло-синего до темно-синего colorbar=dict(title='MT_SUM_RUR') ), customdata=text_series, )) fig_heatbar.update_layout( mapbox_style='open-street-map', autosize=True, hovermode='closest', showlegend=False, mapbox=dict( center=dict(lat=viz_df['lat'].mean(), lon=viz_df['lon'].mean()), zoom=9 ), width=900, height=900 ) fig_heatbar.update_traces(hovertemplate='%{customdata}') dct_colors = {'red':'больше 10000', 'blue':'10000-4000', 'yellow':'4000-2000', # 'green':'400-200', # 'purple':'200-100', # 'orange':'100-30', 'black':'меньше 2000'} colors = ['red', 'blue', 'yellow', # 'green', # 'purple', # 'orange', 'black'] fig_colored = go.Figure() for color in colors: temp_df = viz_df[viz_df['colors'] == color] text_series_temp = "Название клиники: "+ temp_df['lpu_name'] + "
" + "Адрес: " + temp_df["adress"] + "
" + "Сумма: " + temp_df['MT_SUM_RUR'].astype(str) + " тыс.руб" fig_colored.add_trace(go.Scattermapbox( lat=temp_df['lat'], lon=temp_df['lon'], mode='markers', marker=go.scattermapbox.Marker( color=color, sizemode='area', sizeref=5, opacity=1, ), name=dct_colors[color], customdata=text_series_temp, )) fig_colored.update_layout( mapbox_style='open-street-map', autosize=True, hovermode='closest', showlegend=True, mapbox=dict( center=dict(lat=viz_df['lat'].mean(), lon=viz_df['lon'].mean()), zoom=9 ), width=900, height=900 ) fig_colored.update_traces(hovertemplate='%{customdata}') viz_df = viz_df.rename(columns={"MT_SUM_RUR":"Сумма"}) st.dataframe(data=viz_df[['lpu_name', 'Сумма', 'adress']]) st.plotly_chart(fig_bubbles) st.plotly_chart(fig_heatbar) st.plotly_chart(fig_colored) # %%