HenryStephen's picture
First commit
8b9797b
raw
history blame
No virus
3.62 kB
import streamlit as st
import pandas as pd
# 1. Loading the dataset
df = pd.read_excel("data/table.xlsx")
# 2. Preprocessing the dataset
df["Bionic prototype"] = df["Bionic prototype"].str.strip()
df["Materials"] = df["Materials"].str.split(";").apply(lambda x: [material.strip() for material in x])
df["Method"] = df["Method"].str.split(";").apply(lambda x: [method.strip() for method in x])
df["Multifunction"] = df["Multifunction"].str.split(";").apply(lambda x: [multifunction.strip() for multifunction in x])
# 3. Saving the processed dataset
# df.to_excel("data/filtered_table.xlsx", index=False)
# 4. Extracting a unique list for each column
bionic_prototype_list = df["Bionic prototype"].unique()
method_list = df["Method"].explode().unique()
multifunction_list = df["Multifunction"].explode().unique()
bionic_prototype_list.sort()
method_list.sort()
multifunction_list.sort()
with st.sidebar:
st.slider(
label="Search results limit",
min_value=1,
max_value=50,
value=20,
step=1,
key="limit",
help="Limit the number of search results",
)
st.multiselect(
label="Display columns",
options=["Bionic prototype", "Multifunction", "Method", "Materials", "Res"],
default=["Bionic prototype", "Multifunction", "Method", "Materials", "Res"],
help="Select columns to display in the search results",
key="display_columns",
)
st.title("Bionic Path Selection")
st.multiselect(
label="Multifunction",
options=multifunction_list,
default=[],
help="Select the multifunction to display in the search results",
placeholder="Select the multifunction to display in the search results",
key="multifunction_option"
)
st.session_state.disabled = False if len(st.session_state.multifunction_option) > 0 else True
left_col, right_col = st.columns(2)
with left_col:
st.selectbox(
label="Bionic prototype",
options=bionic_prototype_list,
help="Select the bionic prototype to display in the search results",
placeholder="Select the bionic prototype to display in the search results",
index=None,
key="bionic_prototype_option",
disabled=st.session_state.disabled
)
with right_col:
st.multiselect(
label="Method",
options=method_list,
default=[],
help="Select the method to display in the search results",
placeholder="Select the method to display in the search results",
key="method_option",
disabled=st.session_state.disabled
)
search = st.button("Search")
if search:
multifunction_option = st.session_state.multifunction_option
bionic_prototype_option = st.session_state.bionic_prototype_option
method_option = st.session_state.method_option
# Filter the multifunction column
filtered_df = df[
df["Multifunction"].apply(lambda x: all(multifunction in x for multifunction in multifunction_option))]
# Filter the bionic prototype column
filtered_df = filtered_df[filtered_df["Bionic prototype"] == bionic_prototype_option] \
if (bionic_prototype_option is not None and not st.session_state.disabled and not filtered_df.empty) \
else filtered_df
# Filter the method column
filtered_df = filtered_df[filtered_df["Method"].apply(lambda x: any(method in x for method in method_option))] \
if (len(method_option) > 0 and not st.session_state.disabled and not filtered_df.empty) \
else filtered_df
st.dataframe(filtered_df[st.session_state.display_columns].head(st.session_state.limit))