steam-recsys / app.py
deppfellow's picture
Init commit of ease model
00e640a
raw
history blame
3.37 kB
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()