基于大数据的热门旅游景点推荐系统
前言介绍
选题背景及意义
随着经济的稳步增长以及人们生活水平的不断提高,旅游已经成为人们生活中不可或缺的一部分。旅游不仅能够帮助人们放松身心、缓解工作和生活压力,还能拓宽视野、增长见识,满足人们对美好生活的向往[1]。与此同时,互联网和移动设备的普及,使得人们获取旅游信息的方式发生了巨大变化。旅游市场的蓬勃发展也带来了一些问题。一方面,海量的旅游信息充斥在网络上,景点介绍、游客评价、攻略分享等信息繁多且繁杂,用户在选择旅游景点时往往面临信息过载的困扰,难以快速、准确地找到符合自己需求和兴趣的景点。另一方面,对于旅游景点的管理者和旅游服务提供商来说,如何有效地推广景点、吸引更多游客,以及如何对旅游相关数据进行管理和分析,从而提升服务质量和运营效率,也是亟待解决的问题。
热门旅游景点推荐系统的开发,旨在利用先进的技术手段,解决上述问题。系统采用B/S开发模式,结合django、Python、Hadoop以及Scrapy爬虫等技术,实现对用户、景点分类、旅游景点(包括江苏景点等)的有效管理。通过Scrapy爬虫获取丰富的旅游景点数据,利用Hadoop进行数据的存储和处理,借助django搭建系统后端架构,Python进行数据分析和处理,为用户提供个性化的景点推荐服务。
该系统的开发具有重要意义。对于用户而言,能够节省他们筛选景点的时间和精力,提供更加精准、个性化的旅游推荐,提升旅游体验。对于旅游景点和旅游服务提供商来说,系统可以帮助他们更好地了解用户需求,进行精准营销和推广,提高景点的知名度和吸引力。此外,该系统的建设也有助于推动旅游行业的数字化转型,促进旅游行业的健康发展。
01开发环境
1.1 Python技术
1.2 Django框架
1.3 Hadoop
1.4 Scrapy爬虫
1.5 MySQL数据库
1.6 B/S 结构
1.7 Vue.js 技术
1.8 协同过滤算法
02系统功能模块
亮点(爬虫【携程旅行】、协同过滤算法推荐、数据分析、Echarts可视化看板)
1、数据管理:爬虫信息列表展示。
2、数据存储:mysql数据库。
3、数据分析:大数据分析统计图表大屏
4、智能推荐:基于用户的协同过滤算法推荐
04图片展示














后台管理系统





05系统文档、代码展示
5.1 系统文档

5.2 代码展示
#协同过滤算法代码(学习交流+VX: S20231025S )
#查找相似用户
def cosine_similarity(a, b):
numerator = sum([a[key] * b[key] for key in a if key in b])
denominator = math.sqrt(sum([a[key]**2 for key in a])) * math.sqrt(sum([b[key]**2 for key in b]))
return numerator / denominator
#收藏协同算法
def evaluationdata_autoSort2(request):
if request.method in ["POST", "GET"]:
req_dict = request.session.get("req_dict")
cursor = connection.cursor()
sorted_recommended_goods=[]
user_ratings={}
token = request.META.get('HTTP_TOKEN')
decode_str = eval(base64.b64decode(token).decode("utf8"))
user_id = decode_str['params']["id"]
try:
cursor.execute("select * from storeup where type = 1 and tablename = 'evaluationdata' order by addtime desc")
desc = cursor.description
data_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()]
#用户-订单矩阵
for item in data_dict:
if user_ratings.__contains__(item["userid"]):
ratings_dict = user_ratings[item["userid"]]
if ratings_dict.__contains__(item["refid"]):
ratings_dict[str(item["refid"])]+=1
else:
ratings_dict[str(item["refid"])] =1
else:
user_ratings[item["userid"]] = {
str(item["refid"]):1
}
try:
# 计算目标用户与其他用户的相似度
similarities = {other_user: cosine_similarity(user_ratings[user_id], user_ratings[other_user])
for other_user in user_ratings if other_user != user_id}
# 找到与目标用户最相似的用户
most_similar_user = sorted(similarities, key=similarities.get, reverse=True)[0]
# 找到最相似但目标用户未购买过的商品
recommended_goods = {goods: rating for goods, rating in user_ratings[most_similar_user].items() if
goods not in user_ratings[user_id]}
# 按评分降序排列推荐
sorted_recommended_goods = sorted(recommended_goods, key=recommended_goods.get, reverse=True)
except:
pass
except:
sorted_recommended_goods=[]
L = []
where = " AND ".join([f"{key} = '{value}'" for key, value in req_dict.items() if key!="page" and key!="limit" and key!="order"and key!="sort"])
if where:
sql = f'''SELECT * FROM (SELECT * FROM evaluationdata WHERE {where}) AS table1 WHERE id IN ('{"','".join(sorted_recommended_goods)}') union all SELECT * FROM (SELECT * FROM evaluationdata WHERE {where}) AS table1 WHERE id NOT IN ('{"','".join(sorted_recommended_goods)}')'''
else:
sql = f'''select * from evaluationdata where id in ('{"','".join(sorted_recommended_goods)}') union all select * from evaluationdata where id not in('{"','".join(sorted_recommended_goods)}')'''
cursor.execute(sql)
desc = cursor.description
data_dict = [dict(zip([col[0] for col in desc], row)) for row in cursor.fetchall()]
for online_dict in data_dict:
for key in online_dict:
if 'datetime.datetime' in str(type(online_dict[key])):
online_dict[key] = online_dict[key].strftime(
"%Y-%m-%d %H:%M:%S")
else:
pass
L.append(online_dict)
return JsonResponse(....)

140

被折叠的 条评论
为什么被折叠?



