mc-po / app.py
fromcarlostocosta's picture
Final touches
7123c15
raw
history blame
4.13 kB
import streamlit as st
import pandas as pd
import random
import plotly.express as px
from geopy.distance import geodesic
from PIL import Image
# Define the DMO names
dmo_names = ["DMO" + str(i) for i in range(1, 31)]
# Dictionary of large European cities with their coordinates
cities = {
"London": (51.5074, -0.1278),
"Paris": (48.8566, 2.3522),
"Berlin": (52.5200, 13.4050),
"Madrid": (40.4168, -3.7038),
"Rome": (41.9028, 12.4964),
"Vienna": (48.2082, 16.3738),
"Amsterdam": (52.3667, 4.8945),
"Athens": (37.9838, 23.7275),
"Stockholm": (59.3293, 18.0686),
"Brussels": (50.8503, 4.3517),
"Helsinki": (60.1699, 24.9384),
"Warsaw": (52.2297, 21.0122),
"Copenhagen": (55.6761, 12.5683),
"Lisbon": (38.7223, -9.1393),
"Dublin": (53.3498, -6.2603),
"Budapest": (47.4979, 19.0402),
"Prague": (50.0755, 14.4378),
"Sofia": (42.6977, 23.3219),
"Bucharest": (44.4396, 26.0963),
"Luxembourg": (49.6116, 6.1319),
"Riga": (56.9496, 24.1052),
"Valletta": (35.8989, 14.5146),
"Vilnius": (54.6872, 25.2797),
"Bratislava": (48.1486, 17.1077),
"Ljubljana": (46.0569, 14.5058),
"Nicosia": (35.1856, 33.3823),
"Tallinn": (59.4370, 24.7536),
"Zagreb": (45.8150, 15.9819),
"Nicosia": (35.1856, 33.3823),
"Valletta": (35.8989, 14.5146)
}
# Coordinates of beach and mountain areas
beach_coordinates = (45.0, 10.0) # Example beach coordinates
mountain_coordinates = (48.0, 10.0) # Example mountain coordinates
# Function to determine the area based on proximity to beach or mountain
def determine_area(latitude, longitude):
city_coordinates = (latitude, longitude)
beach_distance = geodesic(city_coordinates, beach_coordinates).km
mountain_distance = geodesic(city_coordinates, mountain_coordinates).km
if beach_distance <= 200:
return "Beach"
elif mountain_distance <= 200:
return "Mountain"
else:
return "City"
# Create an empty DataFrame
df = pd.DataFrame(columns=["DMO", "City", "Latitude", "Longitude", "Area", "Environmental", "Cultural",
"Community", "Socio-economic", "Infrastructure", "Stakeholder",
"Visitor_education", "Monitoring"])
# Populate the DataFrame
for i in range(30):
dmo = dmo_names[i]
city = random.choice(list(cities.keys()))
latitude, longitude = cities[city]
area = determine_area(latitude, longitude)
environmental = round(random.uniform(0, 10), 2)
cultural = round(random.uniform(0, 10), 2)
community = round(random.uniform(0, 10), 2)
socio_economic = round(random.uniform(0, 10), 2)
infrastructure = round(random.uniform(0, 10), 2)
stakeholder = round(random.uniform(0, 10), 2)
visitor_education = round(random.uniform(0, 10), 2)
monitoring = round(random.uniform(0, 10), 2)
df.loc[i] = [dmo, city, latitude, longitude, area, environmental, cultural, community,
socio_economic, infrastructure, stakeholder, visitor_education, monitoring]
df.loc[df['DMO'].isin(['DMO14', 'DMO19', 'DMO27', 'DMO15', 'DMO20', 'DMO21']), 'Area'] = 'Beach'
df.loc[df['DMO'].isin(['DMO4', 'DMO23', 'DMO8']), 'Area'] = 'Mountain'
fig = px.scatter_mapbox(df, lat="Latitude", lon="Longitude", hover_name="DMO", hover_data=["Environmental", "Cultural",
"Community", "Socio-economic",
"Infrastructure", "Stakeholder",
"Visitor_education", "Monitoring"],
color="Area", color_discrete_sequence=["blue", "green", "red"], zoom=3)
fig.update_layout(mapbox_style="open-street-map")
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
st.plotly_chart(fig, use_container_width=True)
img = Image.open('mastercard_logo.png')
col1, col2, col3 = st.columns([1,6,1])
with col1:
st.write("")
with col2:
st.write("")
with col3:
st.image(img)