Spaces:
Sleeping
Sleeping
#%% | |
import pandas as pd | |
import streamlit as st | |
import plotly.graph_objects as go | |
df = pd.read_excel("preprocessed_geodata_v2.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 | |
dct_colors = {'red':'больше 6000', | |
'blue':'6000-3000', | |
'yellow':'3000-1000', | |
# 'green':'400-200', | |
# 'purple':'200-100', | |
# 'orange':'100-30', | |
'black':'меньше 1000' | |
} | |
def get_colors(row): | |
if row > 6000: | |
return 'red' | |
elif row <= 6000 and row > 3000: | |
return 'blue' | |
elif row <= 3000 and row > 1000: | |
return 'yellow' | |
# elif row <= 400 and row > 200: | |
# 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', 'count_gp']].copy() | |
viz_df[['lat','lon']] = viz_df[['lat','lon']].astype(float) | |
viz_df['colors'] = viz_df['count_gp'].apply(get_colors) | |
text_series ="Название клиники: "+ viz_df['lpu_name'] + "<br>" + "Адрес: " + viz_df["adress"] + "<br>" + "Количество гарантийных писем:" + viz_df['count_gp'].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['count_gp'], | |
color='red', | |
sizemode='area', | |
sizeref=10, | |
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_coords.show() | |
#%% | |
fig_bubbles = go.Figure(data=go.Scattermapbox( | |
lat=viz_df['lat'], | |
lon=viz_df['lon'], | |
mode='markers', | |
marker=go.scattermapbox.Marker( | |
size=viz_df['count_gp'], | |
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='<b>%{customdata}</b>') | |
# fig_bubbles.show() | |
#%% | |
fig_heatbar = go.Figure(data=go.Scattermapbox( | |
lat=viz_df['lat'], | |
lon=viz_df['lon'], | |
mode='markers', | |
marker=go.scattermapbox.Marker( | |
color=viz_df['count_gp'], | |
sizemode='area', | |
sizeref=5, | |
opacity=1, | |
colorscale='rdylbu', # Градиент цветов от светло-синего до темно-синего | |
colorbar=dict(title='count_gp') | |
), | |
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='<b>%{customdata}</b>') | |
# fig_heatbar.show() | |
#%% | |
dct_colors = {'red':'больше 6000', | |
'blue':'6000-3000', | |
'yellow':'3000-1000', | |
# 'green':'400-200', | |
# 'purple':'200-100', | |
# 'orange':'100-30', | |
'black':'меньше 1000' | |
} | |
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'] + "<br>" + "Адрес: " + temp_df["adress"] + "<br>" + "Количество гарантийных писем:" + temp_df['count_gp'].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='<b>%{customdata}</b>') | |
# fig_colored.show() | |
# %% | |
viz_df = viz_df.rename(columns={"count_gp":"Число_ГП"}) | |
#%% | |
st.dataframe(data=viz_df[['lpu_name', 'Число_ГП', 'adress']]) | |
# st.plotly_chart(fig_bubbles_coords) | |
st.plotly_chart(fig_bubbles) | |
st.plotly_chart(fig_heatbar) | |
st.plotly_chart(fig_colored) | |
# st.table(df) | |