Python 使用 Pandas 实现商品推荐系统:基于地理位置和限额筛选商品
Python 使用 Pandas 实现商品推荐系统:基于地理位置和限额筛选商品
本代码使用 Python 的 Pandas 库,基于地理位置和限额筛选商品,并输出推荐结果。代码逻辑清晰,易于理解,可作为商品推荐系统的基础框架。
import pandas as pd
import numpy as np
import math
# 读取商品信息
goods_df = pd.read_excel('D:\pythonProject3\商品信息\商品打包.xlsx')
goods_df = goods_df[['新商品GPS纬度', '新商品GPS经度', '商品编号', '打包数量']]
goods_df = goods_df.dropna()
# 读取会员信息
members_df = pd.read_excel('D:\pythonProject3\打包问题\会员信息.xlsx')
members_df = members_df[['会员编号', '会员GPS纬度', '会员GPS经度', '预订商品限额']]
members_df = members_df.dropna()
# 初始化会员挑选结果
results = []
# 遍历每个会员
for index, member in members_df.iterrows():
member_id = member['会员编号']
member_lat = member['会员GPS纬度']
member_lon = member['会员GPS经度']
member_limit = member['预订商品限额']
# 初始化会员挑选的商品数量和商品编号
selected_quantity = 0
selected_goods = []
# 遍历商品列表
for index, good in goods_df.iterrows():
good_id = good['商品编号']
good_lat = good['新商品GPS纬度']
good_lon = good['新商品GPS经度']
good_quantity = good['打包数量']
# 计算会员和商品之间的距离
distance = math.sqrt((member_lat - good_lat) ** 2 + (member_lon - good_lon) ** 2)
# 如果距离小于等于0.1并且商品数量加上已选商品数量不超过会员限额
if distance <= 0.1 and selected_quantity + good_quantity <= member_limit:
# 更新已选商品数量和商品编号
selected_quantity += good_quantity
selected_goods.append(good_id)
# 添加会员挑选结果到结果列表
results.append({'会员编号': member_id, '挑选商品数量': selected_quantity, '挑选商品编号': selected_goods})
# 输出结果
for result in results:
print('会员编号:', result['会员编号'])
print('挑选商品数量:', result['挑选商品数量'])
print('挑选商品编号:', result['挑选商品编号'])
print('\n')
# 将结果输出到 Excel 文件
results_df = pd.DataFrame(results)
results_df.to_excel('D:\pythonProject3\打包问题\结果.xlsx', index=False)
代码解释
- 读取数据: 使用
pd.read_excel()读取商品信息和会员信息,并进行必要的列筛选和缺失值处理。 - 遍历会员: 使用
iterrows()遍历每个会员的信息。 - 遍历商品: 使用
iterrows()遍历每个商品的信息。 - 计算距离: 使用
math.sqrt()计算会员和商品之间的距离。 - 筛选商品: 根据距离和限额筛选符合条件的商品,并更新已选商品数量和商品编号。
- 输出结果: 使用
print()打印每个会员的推荐商品结果,并使用pd.DataFrame()和to_excel()将结果输出到 Excel 文件。
总结
本代码展示了使用 Python 的 Pandas 库进行商品推荐的简单实现。通过地理位置和限额筛选,可以为每个会员提供个性化的商品推荐,提高推荐的精准度。同时,代码结构清晰,易于扩展,可根据实际需求进行修改和完善。
原文地址: https://www.cveoy.top/t/topic/fAJO 著作权归作者所有。请勿转载和采集!