Spaces:
Sleeping
Sleeping
import streamlit as st | |
from streamlit_option_menu import option_menu | |
from func import * | |
from easeBased_model import * | |
from contentBased_model import * | |
if "user_preferences" not in st.session_state: | |
st.session_state["user_preferences"] = {} | |
# if "user_titles" not in st.session_state: | |
# st.session_state["user_titles"] = [] | |
data = pd.read_pickle("data/2k_titles.pkl") | |
def games_recomm(preferences_id): | |
if "rs" in st.session_state: | |
del st.session_state["rs"] | |
with st.spinner("Getting recommendation..."): | |
pref_value = [] | |
for id in preferences_id: | |
if st.session_state[id] == "Positive": | |
pref_value.append(1) | |
elif st.session_state[id] == "Negative": | |
pref_value.append(0) | |
pred_df = pd.DataFrame({ | |
'user_id': [999999] * len(preferences_id), | |
'app_id': preferences_id, | |
'is_recommended': pref_value | |
}) | |
res = ease_model(pred_df=pred_df, k=10) | |
# res = cbf_model(pred_df=pred_df, k=10) | |
# st.write(res[['predicted_items', 'predicted_score']]) | |
st.write(res) | |
if type(res) == ValueError: | |
st.error("Recommendation failed. Please select with at least 3 games title.") | |
st.session_state | |
return | |
else: | |
st.session_state['rs'] = res | |
# st.write(len(st.session_state['rs'])) | |
if len(st.session_state['rs']) >= 1: | |
st.success(f"Go to result page to view top {len(st.session_state['rs'])} recommendations.") | |
else: | |
st.error("Recommendation failed. Please reload the session.") | |
# st.write(res) | |
# Main Page Header | |
# Consist of Home page, Result page, About page, and Log page | |
def spr_sidebar(): | |
menu = option_menu( | |
menu_title=None, | |
options=['Home', 'Result', 'About'], | |
icons=['house', 'joystick', 'info-square'], | |
menu_icon='cast', | |
default_index=0, | |
orientation='horizontal' | |
) | |
# Change 'app_mode' state based on current page | |
if menu == 'Home': | |
st.session_state['app_mode'] = 'Home' | |
elif menu == 'Result': | |
st.session_state['app_mode'] = 'Result' | |
elif menu == 'About': | |
st.session_state['app_mode'] = 'About' | |
# Home page. One of the page in Main Header | |
def home_page(): | |
st.title("Steam Recommendation System") | |
# st.session_state | |
if "user_preferences" in st.session_state: | |
ids_list = ids_to_titles(st.session_state["user_preferences"]) | |
preferences = st.multiselect( | |
label="Input games you like:", | |
options=list(data), | |
default=ids_list, | |
key="user_titles") | |
user_input = generate_app_gamebox(preferences) | |
else: | |
preferences = st.multiselect( | |
label="Input games you like:", | |
options=list(data), | |
key="user_titles") | |
user_input = generate_app_gamebox(preferences) | |
state = st.button("Get recommendation") | |
if state: | |
st.session_state["user_preferences"] = user_input | |
st.markdown("---") | |
games_recomm(st.session_state["user_preferences"]) | |
# Result page | |
# Show the list of predictions for active user | |
def result_page(): | |
if "rs" not in st.session_state: | |
st.error('Please input preferences titles and run "Get recommendation"') | |
else: | |
st.success(f'Top {len(st.session_state["rs"])}') | |
st.session_state | |
user_res = generate_res_gamebox(ids=st.session_state['rs']) | |
# About page | |
# Show the information of the project and the sites | |
def about_page(): | |
pass | |
def main(): | |
spr_sidebar() | |
# st.session_state | |
if st.session_state['app_mode'] == 'Home': | |
home_page() | |
elif st.session_state['app_mode'] == 'Result': | |
result_page() | |
elif st.session_state['app_mode'] == 'About': | |
about_page() | |
if __name__ == '__main__': | |
main() | |