File size: 3,369 Bytes
00e640a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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()