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.cache_data def load_data(): df_ind = pd.read_csv("data/df_individuals_score.csv", index_col=[0]) df_ind = df_ind.drop("region_code", axis=1) 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() st.sidebar.title("Our History in Data") st.sidebar.write( "This project is led by Charles de Dampierre, Folgert Karsdorp, Mike Kestemont, Valentin Thouzeau and Nicolas Baumard" ) # 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_per_capita" ) unseen_index_path = ( "data/immaterial_index/figures_trends_R/figures_unseen/results_unseen" ) unseen_capita_index_path = ( "data/immaterial_index/figures_trends_R/figures_unseen/results_unseen/per_capita" ) population_path = "data/population" 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", "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: col1, col2 = st.columns(2) 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"].astype(int) df = df.reset_index(drop=True) # Display the data in the left column with col1: st.header("Cultural Producers") st.dataframe(df) st.write(f"Number of Cultural producers active before 1800: {len(df)}") for key, path in index_paths[selected_region].items(): if os.path.exists(path): if key == "global_index": st.subheader("Global Index") st.image( Image.open(path), caption=key.capitalize(), use_column_width=True, ) elif key == "global_index_per_capita": st.subheader("Index per capita") st.image( Image.open(path), caption=key.capitalize(), use_column_width=True, ) elif key == "unseen_index": st.subheader("Unsee-Species Index") st.image( Image.open(path), caption=key.capitalize(), use_column_width=True, ) elif key == "unseen_index_capita": st.subheader("Unsee-Species per capita Index") st.image( Image.open(path), caption=key.capitalize(), use_column_width=True, ) elif key == "population_index": st.subheader("Population Index") st.image( Image.open(path), caption=key.capitalize(), use_column_width=True, ) elif key == "map": st.subheader("Maps") st.sidebar.image( Image.open(path), caption=key.capitalize(), use_column_width=True, ) else: st.write(f"File for {key.capitalize()} does not exist.") with col2: try: region_description = get_region_description( region_data, selected_region ) st.header("Analysis") st.write(f"{region_description}") except: st.write("Analysis not ready yet")