# %% # packages import streamlit as st import polars as pl import plotly.express as px import plotly.io as pio pio.templates.default = "simple_white" st.set_page_config(layout="wide") # %% # Data dat = pl.read_csv("dat_munged.csv") info = pl.read_csv("Metadata_Indicator_API_Download_DS2_en_csv_v2_5657328.csv").rename({"INDICATOR_CODE":"Indicator Code", "INDICATOR_NAME":"Indicator Name"}) dat_vars = pl.read_csv("dat_vars.csv") # %% # Example Chart # drop_country = ["ZAF"] # indicator_code = "NY.GDP.PCAP.PP.KD" list_name = dat_vars.select("Indicator Name").to_series().to_list() list_code = dat_vars.select("Indicator Code").to_series().to_list() list_country_code = ["ZAF", "ZWE", "KEN", "NGA", "GHA", "COD"] list_country_name = ["South Africa", "Zimbabwe", "Kenya", "Nigeria", "Ghana", "Congo, Dem. Rep."] drop_country = st.sidebar.multiselect("Remove Country (Country Code)", list_country_code) checked_var = st.sidebar.checkbox("Use Variable Name") if checked_var: indicator_name = st.sidebar.selectbox("Select your variable", list_name) indicator_code = dat_vars.filter(pl.col("Indicator Name") == indicator_name).select("Indicator Code").to_series()[0] else: indicator_code = st.sidebar.selectbox("Select your variable", list_code) indicator_name = dat_vars.filter(pl.col("Indicator Code") == indicator_code).select("Indicator Name").to_series()[0] title_text = indicator_name subtitle_text = info.filter(pl.col("Indicator Code") == indicator_code).select("SOURCE_NOTE").to_series()[0] y_axis_title = indicator_name[indicator_name.find("(")+1:indicator_name.find(")")] use_dat = dat.filter((pl.col("Indicator Code").is_in([str(indicator_code)])) & (~pl.col("Country Code").is_in(drop_country)) & (pl.col("value").is_not_null())) sp = px.line(use_dat.to_pandas(), x="year", y="value", color="Country Name", markers=True, labels = {"year":"Year", "value":y_axis_title}, title = title_text) st.markdown("## Country performance over time") st.markdown("_You can read about streamlit [here](slides.html)_") st.markdown("__" + title_text + "__") st.markdown(subtitle_text) st.markdown("### Chart") st.markdown("_Use the expand arrows visible when you hover over the upper right corner of the chart to see it in full screen._") sp st.markdown("### Table: " + title_text) display_dat = use_dat.select("Country Code", "Indicator Name", "year", "value") st.dataframe( display_dat\ .pivot(index="year", on="Country Code", values="value", aggregate_function="first")\ .sort(pl.col("year"),descending=True), hide_index=True, use_container_width=True, column_config={ "value": y_axis_title, "year": st.column_config.NumberColumn( "Year", help="Year of data", format="%.0f" )}) def convert_df(df): return df.write_csv().encode('utf-8') csv = convert_df(display_dat) st.download_button("Download Data", data = csv, file_name = "data.csv", mime="text/csv") st.markdown("## My presentation") # Read file and keep in variable with open('slides.html','r') as f: html_data = f.read() ## Show in webpage st.components.v1.html(html_data,height=1500)