File size: 2,502 Bytes
17d7d2e
 
 
efda6d0
8970242
17d7d2e
 
bf3fe21
 
17d7d2e
1303ac0
17d7d2e
 
c077474
17d7d2e
 
56a13a2
17d7d2e
 
 
 
 
 
 
 
 
 
94fc387
2815635
 
ba18f11
2815635
17d7d2e
2815635
 
bd80b62
2815635
7cdbd6f
73a25a9
011e348
73a25a9
1907c60
94fc387
 
28831ec
9cc277c
f68a5ef
bf3fe21
2815635
bf3fe21
 
 
b5b6069
bf3fe21
94fc387
 
28831ec
bf3fe21
 
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
import streamlit as st
import pickle
import pandas as pd
import torch
import numpy as np

cosine_scores = pickle.load(open('cosine_scores.pkl','rb'))
coursedf = pd.read_pickle('course_df.pkl')          # course_df uses titles to generate course recommendations
course_df_new = pd.read_pickle('course_df_new.pkl') #course_df_new makes recommendations using the entire description

course_title_list = [i + ": " + j for i, j in zip(coursedf['ref'].to_list(), coursedf['title'].to_list())]

def get_random_course():
    row=coursedf.sample(1)
    return row['ref'], row['title'] 

def recommend(index):
    pairs = {}

    for i in range(len(coursedf)):
        pairs[coursedf.iloc[i,1]]=cosine_scores[index][i]

    sorttemp = sorted(pairs.items(), key=lambda x:x[1], reverse=True)
    sorted_final = dict(sorttemp[1:31])

    return list(sorted_final.keys())

st.set_page_config(page_title='DiscoverCourses', page_icon=':bird:')
st.title('DiscoverCourses')
st.write('© 2023 Rushank Goyal. All rights reserved.')

selected_course = st.selectbox('Pick a course',course_title_list)

container = st.container()
maincol1, maincol2 = container.columns([4, 1])

if maincol1.button('Recommend by title'):
    output=recommend(np.where((coursedf['ref']+": "+coursedf['title']) == selected_course)[0][0])
    for result in output:
        index=np.where(coursedf['title'] == result)[0][0]
        course_id=coursedf.iloc[index,0]
        st.subheader(course_id+": "+result)
        with st.expander("See description"):
            st.write(course_df_new.iloc[index,3]) #Using the new coursedf because it has proper descriptions for each course
        link = "[ExploreCourses](https://explorecourses.stanford.edu/search?q="+course_id+"+"+result.replace(" ","+")+")"
        st.markdown(link, unsafe_allow_html=True)
        st.divider()
        
if maincol2.button('Recommend by description'):
    index_new=np.where((coursedf['ref']+": "+coursedf['title']) == selected_course)[0][0]
    rec_list=course_df_new.iloc[index_new,2]
    for result in rec_list:
        course_id=coursedf.iloc[index_new,0]
        st.subheader(course_id+": "+result)
        with st.expander("See description"):
            st.write(course_df_new.iloc[index_new,3]) #Using the new coursedf because it has proper descriptions for each course
        link = "[ExploreCourses](https://explorecourses.stanford.edu/search?q="+course_id+"+"+result.replace(" ","+")+")"
        st.markdown(link, unsafe_allow_html=True)
        st.divider()