Spaces:
Runtime error
Runtime error
File size: 4,903 Bytes
74addf2 |
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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
import streamlit as st
import pandas as pd
import numpy as np
import altair as alt
from vega_datasets import data
st.set_page_config(layout="wide")
st.markdown('# COVID Restrictions')
st.markdown("""
A look into the COVID restrictions currently in place in countries around the world to determine the requirements to succesfully enter a certain country.
Also, can access the history of COVID regulations in each country.
""")
df = pd.read_csv(r'./data/international-travel-covid.csv')
df["Day"] = pd.to_datetime(df["Day"])
codes = pd.read_csv('./data/all.csv')
df["id"] = 0
df.rename(columns={'international_travel_controls': 'restrictions'}, inplace=True)
# %%
#codes.head()
# %%
for index, row in codes.iterrows():
df.loc[(df['Code'] == row["alpha-3"]),'id'] = row["country-code"]
# %%
df['restrictions'] = df['restrictions'].replace([0,1,2,3,4],
["No measures","Screening","Quarantine from high-risk regions","Ban on high-risk regions","total border closure"])
# %%
#df.head(15)
# %%
#df.dtypes
# %%
df['year'] = df.Day.map(lambda x: x.year)
df['month'] = df.Day.map(lambda x: x.month)
df['day'] = df.Day.map(lambda x: x.day)
# %%
df_first = df[df["day"] == 1]
# %%
#drop anything before 2023
df_first = df_first[(df_first["Day"] < '2023-01-01')]
# %%
#df_first
# %%
alt.data_transformers.disable_max_rows()
source = alt.topo_feature(data.world_110m.url, "countries")
background = alt.Chart(source).mark_geoshape(fill="white")
years=list(df_first['year'].unique())
years.sort()
selectorYear = alt.selection_single(
name='Y',
fields=['year'],
init={"year":years[0]},
bind=alt.binding_select(options=years, name="Year: ")
)
months=list(df_first['month'].unique())
months.sort()
selectorMonth = alt.selection_single(
name='Months',
fields=['month'],
init={"month":months[0]},
bind=alt.binding_select(options=months, name="Month: "),
)
highlight = alt.selection_single(fields=['restrictions'], bind='legend')
opacityCondition = alt.condition(highlight, alt.value(1.0), alt.value(0.2))
foreground = alt.Chart(df_first,title="The COVID restrictions in each country on the 1st of the month").mark_geoshape(
stroke="black", strokeWidth=0.15
).encode(
alt.Color(
"restrictions:N",
scale=alt.Scale(domain=["No measures","Screening","Quarantine from high-risk regions","Ban on high-risk regions","total border closure"],
range=['#ffffcc','#fbec5d','#ffbf00','#ff4d00','#e62020']),
legend=alt.Legend(title="", orient="top")
)
,tooltip=[alt.Tooltip('Entity:N', title="Country"), alt.Tooltip('restrictions:N', title="Restrictions")],
opacity=opacityCondition
).transform_lookup(
lookup='id',
from_=alt.LookupData(source, key='id',
fields=["type", "properties", "geometry"])
).project("naturalEarth1").transform_filter(
selectorYear & selectorMonth
)
foreground = foreground.add_selection(selectorYear, selectorMonth, highlight).properties(width=700, height=400)
foreground
# %%
alt.renderers.set_embed_options(
padding={"left": 0, "right": 0, "bottom": 0, "top": 0}
)
selectorYear2 = alt.selection_single(
name='Years',
fields=['year'],
init={"year":years[0]},
bind=alt.binding_radio(options=years,name="Year: ")
#bind=alt.binding_select(options=years, name="Year")
)
highlight2 = alt.selection_single(fields=['restrictions'], bind='legend')
opacityCondition = alt.condition(highlight, alt.value(1.0), alt.value(0.2))
monthNames = ["","January","February","March","April","May","June","July","August","September","October","November","December"]
facet = alt.concat(*(
alt.Chart(df_first[df_first["month"] == month], title=monthNames[month]).mark_geoshape(
stroke="black", strokeWidth=0.15
).encode(
alt.Color(
"restrictions:N",
scale=alt.Scale(domain=["No measures","Screening","Quarantine from high-risk regions","Ban on high-risk regions","total border closure"],
range=['#ffffcc','#fbec5d','#ffbf00','#ff4d00','#e62020']),
legend=alt.Legend(title="", orient="top")
)
,tooltip=[alt.Tooltip('Entity:N', title="Country"), alt.Tooltip('restrictions:N', title="Restrictions")],
opacity=opacityCondition
).transform_lookup(
lookup='id',
from_=alt.LookupData(source, key='id',
fields=["type", "properties", "geometry"])
).project("naturalEarth1").transform_filter(
selectorYear2
).add_selection(selectorYear2, highlight)
for month in range(1,13)
), columns=3
).properties(background = '#f9f9f9',
title = alt.TitleParams(text = 'The COVID restrictions throughout the different months of the year')
)
facet |