import streamlit as st from streamlit_option_menu import option_menu from func import * from 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) 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['user_title'] = st.session_state['input_title'] preferences = st.multiselect( label="Input games you like:", options=list(data), key="user_titles") user_input = generate_app_gamebox(preferences) state = st.button("Get state") if state: st.session_state["user_preferences"] = user_input st.markdown("---") games_recomm(st.session_state["user_preferences"]) st.session_state # 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()