import streamlit as st from PIL import Image import os import pandas as pd import tomli pd.options.mode.chained_assignment = None st.set_page_config(layout="wide") st.markdown( "

Our History in Data

", unsafe_allow_html=True, ) @st.cache_data def load_data(): df_ind = pd.read_csv("data/df_individuals_score.csv", index_col=[0]) df_ind["productive_year"] = df_ind["productive_year"].astype(int) df_ind["individual_wikidata_id"] = "https://www.wikidata.org/wiki/" + df_ind[ "individual_wikidata_id" ].astype(str) df_ind = df_ind[df_ind["productive_year"] <= 1800] return df_ind df_ind = load_data() def load_region_descriptions(): with open("regions.toml", "rb") as toml_file: data = tomli.load(toml_file) return data # Function to get description based on selected region def get_region_description(region_data, selected_region): return region_data[selected_region]["description"] region_data = load_region_descriptions() # page = st.sidebar.selectbox("Navigate to:", ["Home", "Methodology", "Team"]) page = st.sidebar.radio( "Menu", ["Home", "Methodology", "Team", "About"], key="navigation_radio", ) st.sidebar.success( "This project is led by Charles de Dampierre, Folgert Karsdorp, Mike Kestemont, Valentin Thouzeau and Nicolas Baumard" ) # Test change if page == "Home": # Set the global index path global_index_path = "data/immaterial_index/figures_trends_R/results" global_index_path_per_capita = ( "data/immaterial_index/figures_trends_R/results_capita" ) unseen_index_path = "data/immaterial_index/figures_trends_R/results_unseen" unseen_capita_index_path = ( "data/immaterial_index/figures_trends_R/results_unseen_capita" ) complexity_index_path = "data/immaterial_index/figures_trends_R/results_complexity" occupations_index_path = ( "data/immaterial_index/figures_trends_R/results_occupations" ) population_path = "data/population" gdp_per_capita_path = "data/gdp_per_capita" maps_path = "data/map_figures" from region_list import region_list region_filtered = list(region_list.keys()) index_paths = {} for region_key in region_list: # Create the index paths for the current region index_paths[region_key] = { "map": f"{maps_path}/map_{region_key}.png", "global_index": f"{global_index_path}/{region_key}.png", "global_index_per_capita": f"{global_index_path_per_capita}/{region_key}.png", "unseen_index": f"{unseen_index_path}/{region_key}.png", "unseen_index_capita": f"{unseen_capita_index_path}/{region_key}.png", "complexity_index": f"{complexity_index_path}/{region_key}.png", "occupations_index": f"{occupations_index_path}/{region_key}.png", "gdp_per_capita_index": f"{gdp_per_capita_path}/{region_key}.png", "population_index": f"{population_path}/{region_key}.png", } # Get the region names (keys) from the index_paths dictionary regions = list(index_paths.keys()) # Allow the user to select a region selected_region = st.sidebar.selectbox( "Region:", regions, index=regions.index("Japan") ) # Display the selected region's images vertically if selected_region in index_paths: st.markdown( f"

{selected_region}

", unsafe_allow_html=True, ) try: st.image( f"image/{selected_region}.jpeg", caption="Japan", use_column_width=False, width=1000, ) except: pass col1, col2, col3 = st.columns([8, 1, 8]) # Display the data in the left column with col1: for key, path in index_paths[selected_region].items(): if os.path.exists(path): if key == "global_index": st.subheader("Cultural Index") st.image( Image.open(path), caption=key.capitalize(), use_column_width=True, ) elif key == "global_index_per_capita": st.subheader("Cultural Index per capita") st.image( Image.open(path), caption=key.capitalize(), use_column_width=True, ) elif key == "unseen_index": st.subheader( "Cultural Index corrected by the unseen-species model" ) st.image( Image.open(path), caption=key.capitalize(), use_column_width=True, ) elif key == "unseen_index_capita": st.subheader( "Cultural Index per capita corrected by the unseen-species model" ) st.image( Image.open(path), caption=key.capitalize(), use_column_width=True, ) # elif key == "complexity_index": # st.subheader("Complexity Index") # st.image( # Image.open(path), # caption=key.capitalize(), # use_column_width=True, # ) elif key == "occupations_index": st.subheader("Occupation Index") st.image( Image.open(path), caption=key.capitalize(), use_column_width=True, ) elif key == "gdp_per_capita_index": st.subheader("GDP per capita") st.image( Image.open(path), caption=key.capitalize(), use_column_width=True, ) else: st.write(f"File for {key.capitalize()} does not exist.") with col3: try: st.image( Image.open(f"data/map_figures/map_{selected_region}.png"), use_column_width=True, width=1000, ) except: pass st.subheader("Analysis") try: region_description = get_region_description( region_data, selected_region ) st.write(f"{region_description}") except: st.write("Analysis not ready yet") st.subheader("Cultural Producers in Wikidata") df = df_ind[df_ind["region_name"] == selected_region] df = df.drop(["region_name", "decade"], axis=1) df = df[ [ "individual_name", "productive_year", "score", "individual_wikidata_id" "", ] ] df = df.sort_values("score", ascending=False) df = df.rename(columns={"score": "Number of Catalogs"}) min_date = region_list[selected_region]["time_range"][0] max_date = region_list[selected_region]["time_range"][1] df = df[df["productive_year"] >= min_date] df = df[df["productive_year"] <= max_date] # df["productive_year"] = df["productive_year"] * 1000 df["productive_year"] = round(df["productive_year"], 0).astype(str) # df["productive_year"] = round(df["productive_year"], 0).astype(int) df = df.reset_index(drop=True) st.dataframe(df) st.write(f"Number of Cultural producers active before 1800: {len(df)}") try: st.subheader("Population") st.image( Image.open(path), caption=key.capitalize(), use_column_width=True, ) except: pass elif page == "Methodology": # Read the content of the file methodolog.md with open("docs/methodology.md", "r") as file: methodology_content = file.read() # Display the content in the Streamlit app st.write(methodology_content)