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()