祝福大家五一假期性福快乐:
12.7 系统主文件
本项目的系统主文件是main.py,功能是实现了一个基于推荐模型的推荐系统的用户解码,具体实现流程如下所示:
- 定义了一个名为Recommendation的推荐模型对象。
- 定义了一个装饰器函数load_customer_id(),用于加载客户数据并返回客户列表。根据配置文件中指定的路径读取客户数据,并进行一系列的数据处理操作,最终返回客户列表。
- 定义了一个函数recommend(customer_id),用于根据给定的客户ID进行推荐,并返回推荐的物品列表。在recommend(customer_id)函数中,调用推荐模型对象的predict()方法进行推荐,然后将推荐的物品与对应的图片路径进行关联。
- 定义了一个主函数main(),用于构建推荐系统的用户界面。使用库Streamlit中的函数和方法构建用户界面,包括显示标题和图像,创建下拉菜单,并根据用户选择的客户调用recommend()函数进行推荐并展示推荐结果。
- 在主函数中,使用Streamlit库创建了一个Web应用界面,包括标题、图像和下拉菜单等元素。
- 在下拉菜单中选择一个客户,点击“Recommend”按钮后,调用recommend()函数进行推荐,并将推荐的物品和对应的图片显示在界面上。
文件main.py的具体实现代码如下所示。
model_obj = Recommendation()
@st.cache
def load_customer_id():
PATH = os.path.join(
read_yaml_key(CONFIGURATION_PATH, 'data_source','data_folders'),
'customer_lists.parquet'
)
unique_customer_id = read_from_parquet(PATH)
customer_lists = (unique_customer_id[['customer_id','article_id']]
.groupby('customer_id')['article_id']
.apply(list)
.reset_index()
)
customer_lists = customer_lists.merge(unique_customer_id[['customer_id','org_customer_id']], on = ['customer_id'], how = 'inner')
customer_lists = customer_lists.drop_duplicates(['customer_id','org_customer_id'], keep ='last')
del [unique_customer_id]
gc.collect()
return customer_lists
def recommend(customer_id):
recommend_items = model_obj.predict(customer_id)
recommend_items['image_path'] = list(map(get_relative_image_path, recommend_items['article_id']))
return recommend_items
def main():
st.markdown("<h1 style='text-align: center; font-size: 65px; color: #4682B4;'>{}</h1>".format('Recommender System'),
unsafe_allow_html=True)
st.image("./references/banner.png")
customer_lists = load_customer_id()
selected_customer = st.selectbox(
"Type or select a customer from the dropdown",
customer_lists.org_customer_id.values
)
if st.button('Recommend'):
output = recommend(selected_customer)
items = output.article_id.values
image_path = output.image_path.values
st.header("Recommendation")
cnt = 0
cols = st.columns(5)
for i in range(5):
#cols[i].header(items[cnt])
cols[i].image(image_path[cnt])
cnt += 1
cols = st.columns(5)
for i in range(5):
#[i].header(items[cnt])
cols[i].image(image_path[cnt])
cnt += 1
cols = st.columns(5)
for i in range(5):
#cols[i].header(items[cnt])
cols[i].image(image_path[cnt])
cnt += 1
if __name__ == "__main__":
main()
执行上述代码后将启动一个基于推荐模型的推荐系统的用户界面,如图12-10所示。整个用户界面包含以下主要元素和交互功能:
- 标题和横幅图像:界面顶部显示标题和横幅图像,用于呈现推荐系统的整体主题和品牌形象。
- 下拉菜单:界面中显示一个下拉菜单,用于选择或手动输入一个客户。
- 推荐按钮:界面上有一个"Recommend"按钮,用于触发推荐操作。
- 推荐结果:在点击"Recommend"按钮后,界面将显示推荐的物品列表。推荐结果以图像的形式呈现,每行显示5个物品的图像。
图12-10 执行效果
本专题已完结:
(13-1)服装推荐系统:背景介绍+系统分析+准备数据集_穿搭推荐数据集-CSDN博客
(13-3-01)服装推荐系统:数据集处理——初步分析-CSDN博客
(13-3-02)服装推荐系统:数据集处理——数据清洗-CSDN博客
(13-4-01)服装推荐系统:实现推荐模型(1)-CSDN博客
(13-4-02)服装推荐系统:实现推荐模型(2)基于ResNet的图像推荐模型-CSDN博客
(13-4-03)服装推荐系统:实现推荐模型(3)训练排名模型-CSDN博客