File size: 3,514 Bytes
a9149ce
228b1c6
 
 
c3e7254
228b1c6
48de789
228b1c6
c3e7254
 
 
 
 
 
 
 
 
 
 
 
b886921
3059231
5b03f80
3059231
5b03f80
3059231
5b03f80
3059231
b886921
3059231
228b1c6
c3e7254
 
 
 
 
228b1c6
c3e7254
228b1c6
c3e7254
 
228b1c6
c3e7254
228b1c6
5b03f80
228b1c6
5b03f80
228b1c6
c3e7254
 
 
 
 
 
228b1c6
 
 
5b03f80
228b1c6
 
 
 
 
 
 
 
 
 
 
 
 
a9149ce
 
 
 
 
b886921
a9149ce
 
 
 
6cc70f0
a9149ce
 
228b1c6
 
 
 
 
 
 
c3e7254
228b1c6
 
 
 
 
 
c3e7254
b886921
 
 
cd54df2
228b1c6
136d7f8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#%%
import pandas as pd
import streamlit as st
import plotly.graph_objects as go
from geopy.distance import geodesic as GD

df = pd.read_excel("result.xlsx")

df['lon'] = [eval(x)[0]['geo_lon'] for x in df['result_dadata']]
df['lat'] = [eval(x)[0]['geo_lat'] for x in df['result_dadata']]
df['address'] = [eval(x)[0]['result'] for x in df['result_dadata']]

target_coordinates = (55.7307614,37.6299091)

for i in df.index:
    lat = df.loc[i,'lat'] 
    lon = df.loc[i,'lon'] 
    result = GD((lat,lon),target_coordinates).km
    df.loc[i,'distance'] = result
    if result<=2:
        df.loc[i,'distance_state'] = '2-0km_from_target'
    elif result<=3 and result>2:
        df.loc[i,'distance_state'] = '2-3km_from_target'
    elif result<=5 and result>3:
        df.loc[i,'distance_state'] = '3-5km_from_target'
    elif result<=10 and result>5:
        df.loc[i,'distance_state'] = '5-10km_from_target'
    elif result>10:
        df.loc[i,'distance_state'] = 'more_10km_from_target'
        
def get_colors(row):
    if row >= 10:
        return 'black'
    elif row <= 10 and row>5:
        return 'grey'
    elif row<=5 and row>3:
        return 'red'
    elif row<=3 and row>2:
        return 'blue'
    elif row<=2:
        return 'green'

df['colors'] = df['distance'].apply(get_colors)

viz_df = viz_df = df[['lpu_name','lat', 'lon', 'address','MT_SUM_RUR', 'distance','colors','distance_state']].copy()
viz_df[['lat','lon']] = viz_df[['lat','lon']].astype(float)
viz_df['MT_SUM_RUR'] = viz_df['MT_SUM_RUR']/1000

dct_colors = {'black':'больше 10',
              'grey':'5-10',
              'red':'3-5',
              'blue':'2-3',
              'green':'меньше 2'}
colors = ['black', 'grey', 'red','blue','green']
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["address"] + "<br>" + "Расстояние от  Валовая 20: " + temp_df['distance'].round(1).astype(str) + "<br>" + "Количество выплат: " + temp_df['MT_SUM_RUR'].round(2).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.add_trace(go.Scattermapbox(
        lat=[target_coordinates[0]],
        lon=[target_coordinates[1]],
        mode='markers',
        marker=go.scattermapbox.Marker(
            color=['yellow'],
            sizemode='area',
            sizeref=20,
            opacity=1,
        ),
        name='Валовая 20',
        customdata=['Валовая 20'],
    ))

fig_colored.update_layout(
    mapbox_style='open-street-map',
    autosize=True,
    hovermode='closest',
    showlegend=True,
    mapbox=dict(
        center=dict(lat=target_coordinates[0], lon=target_coordinates[1]),
        zoom=9
    ),
    width=900,
    height=900
)

fig_colored.update_traces(hovertemplate='<b>%{customdata}</b>')

grouped_df = viz_df.groupby('distance_state').agg({'MT_SUM_RUR':'sum','lpu_name':'count'})
grouped_df['MT_SUM_RUR'] = grouped_df['MT_SUM_RUR'].cumsum()
grouped_df['lpu_name'] = grouped_df['lpu_name'].cumsum()
st.plotly_chart(fig_colored)
st.dataframe(data=grouped_df)