
deepseek大数据毕业设计 Python房屋推荐系统 商品房推荐系统 协同过滤推荐算法 楼盘 小区分析可视化 Django框架 大数据毕业设计(附源码)✅
deepseek大数据毕业设计 Python房屋推荐系统 商品房推荐系统 协同过滤推荐算法 楼盘 小区分析可视化 Django框架 大数据毕业设计(附源码)✅
博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅
1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅
2、大数据毕业设计:2025年选题大全 深度学习 python语言 JAVA语言 hadoop和spark(建议收藏)✅
🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅
1、项目介绍
Python房屋推荐系统 商品房 协同过滤算法 分析可视化
前端:html,css,js,Echats,百度地图
后端:Python语言 Django框架 两种协同过滤推荐算法
数据库:mysql
解决问题:
中国正处于城镇化进程加速发展时期,城市规模不断扩大,大量的人口有农村向着城市转移,农村地区逐步演变成城市地区,
城市人口不断增加。而在城市化发展的过程中,住房问题成为了人们最为苦恼的问题,而且随着人们生活质量的不断提升,
消费者在购房的过程中会考虑越来越多的房产因素,例如:小区绿化,小区周边的社会服务设施,区位资源,房源的价格等各方面的因素,
那么针对这些消费者在购房过程中考虑的诸多问题,一套完整的房源信息分析推荐系统就显得格外重要。
Python房屋推荐系统 商品房 协同过滤算法 分析可视化 毕业设计
2、项目界面
(1)个人详情页
(2)数据可视化分析
(3)房屋数据管理
(4)楼盘详细信息
(5)百度地图分析
(6)房源对比
(7)两种推荐算法推荐
(8)后台数据管理
3、项目说明
Python房屋推荐系统 商品房 协同过滤算法 分析可视化 毕业设计
前端:html,css,js,Echats,百度地图
后端:Python语言 Django 两种协同过滤推荐算法
数据库:mysql
解决问题:
中国正处于城镇化进程加速发展时期,城市规模不断扩大,大量的人口有农村向着城市转移,农村地区逐步演变成城市地区,
城市人口不断增加。而在城市化发展的过程中,住房问题成为了人们最为苦恼的问题,而且随着人们生活质量的不断提升,
消费者在购房的过程中会考虑越来越多的房产因素,例如:小区绿化,小区周边的社会服务设施,区位资源,房源的价格等各方面的因素,
那么针对这些消费者在购房过程中考虑的诸多问题,一套完整的房源信息分析推荐系统就显得格外重要。
Django是一个基于Python的高级Web开发框架,用于构建强大的Web应用程序。协同过滤是一种推荐系统算法,用于根据用户的历史行为和其他用户的行为模式,推荐给用户可能感兴趣的内容。
基于Django的房屋推荐系统可以使用协同过滤算法来为用户推荐符合其喜好的房屋列表。以下是实现房屋推荐系统的一般步骤:
-
数据收集:收集用户对房屋的评分数据,包括用户ID、房屋ID和评分。
-
数据预处理:使用Django的数据库模型创建房屋和用户模型,并将收集到的评分数据存储到数据库中。
-
相似度计算:根据用户对房屋的评分数据,计算房屋之间的相似度。常用的相似度计算方法有余弦相似度和皮尔逊相关系数。
-
推荐生成:对于特定用户,根据其历史评分数据和房屋之间的相似度,计算出与用户喜好最相似的房屋列表。
-
推荐展示:使用Django的视图和模板系统,将生成的推荐结果展示给用户。
-
用户反馈:根据用户的反馈,对推荐结果进行调整和优化。
除了基本的房屋推荐功能外,你还可以通过Django的用户认证系统实现用户登录、注册和个人信息管理功能。
总结来说,基于Django的房屋推荐系统可以通过协同过滤算法帮助用户找到符合其喜好的房屋。使用Django的优势是能够快速构建稳定的Web应用程序,并与其他Django组件(如用户认证系统)无缝集成。
4、核心代码
from django.shortcuts import render
from django.http import JsonResponse
from data_count.models import *
import numpy as np
import math
# Create your views here.
def recommend_html(request):
"""
房源推荐页面的显示
:param request:
:return:
"""
return render(request,"gp_data/house_tuijian.html")
def data_to_json1(data):
list = []
for i in data:
dict = {}
dict["loupan_id"] = i.loupan_id.id
dict["loupan_name"] = i.loupan_id.loupan_name
dict["property_type"] = i.loupan_id.property_type
dict["building_type"] = i.loupan_id.building_type
dict["sub_region_id"] = i.loupan_id.sub_region_id
dict["address"] = i.loupan_id.address
dict["lvhua_rate"] = i.loupan_id.lvhua_rate
dict["zhandi_area"] = i.loupan_id.zhandi_area
dict["jianzhu_area"] = i.loupan_id.jianzhu_area
dict["car_num"] = i.loupan_id.car_num
dict["cankao_price"] = i.loupan_id.cankao_price
dict["default_image_id"] = i.loupan_id.default_image_id
dict["housetype_text"] = i.loupan_id.housetype_text
dict["baidu_lat"] = i.loupan_id.baidu_lat
dict["baidu_lng"] = i.loupan_id.baidu_lng
dict["sale_title"] = i.loupan_id.sale_title
dict["price_2020"] = i.loupan_id.price_2020
dict["price_2019"] = i.loupan_id.price_2019
dict["price_2018"] =i.loupan_id.price_2018
if dict not in list:
list.append(dict)
return {"result":list}
def base_user_recommend(request):
"""
基于用户收藏的推荐
csdn 算法地址 :https://blog.csdn.net/winone361/article/details/45457445
:param request:
:return:
"""
#获取全部用户对象
all_user = user.objects.all()
#获取全部楼盘对象
all_loupan = loupan.objects.all()
#创建用户收藏矩阵
user_collect_items_X_Y = np.zeros((len(all_user),len(all_loupan)),dtype=float)
#创建用户对
for i in range(len(all_user)):
for j in range(len(all_loupan)):
#判断收藏夹中是否 有该用户收藏的该楼盘
collect = collections.objects.filter(loupan_id = all_loupan[j],user_id = all_user[i])
if len(collect) != 0:
user_collect_items_X_Y[i][j] = 1
#建立 楼盘 - 用户的倒叙表 转置用户收藏矩阵
T_user_collect_items_X_Y = user_collect_items_X_Y.T
#创建用户 - 用户矩阵
user_user_X_Y = np.zeros((len(all_user),len(all_user)),dtype=float)
#赋值用户相似表
for i in range(len(T_user_collect_items_X_Y)):
for j in range(len(T_user_collect_items_X_Y[i])):
index_list = []
if T_user_collect_items_X_Y[i][j]==1:
index_list.append(j)
if len(index_list)>=1:
for i_ in range(len(index_list)):
for j_ in range(i_+1,len(index_list)):
user_user_X_Y[i_][j_]+=1
like_user_user_X_Y = user_user_X_Y
#进行用户相似计算
for i in range(len(user_user_X_Y)):
for j in range(len(user_user_X_Y[i])):
print("user",user_user_X_Y)
print(len(user_user_X_Y[i]))
like_user_user_X_Y[i][j] = user_user_X_Y[i][j]/math.sqrt(len(user_user_X_Y[i])*len(user_user_X_Y[j]))
print(user_user_X_Y[i][j]/math.sqrt(len(user_user_X_Y[i])*len(user_user_X_Y[j])))
print(like_user_user_X_Y[i][j])
print(like_user_user_X_Y)
#获取当前用户
now_user = user.objects.get(id = request.COOKIES["user_id"])
index = 0
for u in range(len(all_user)):
if now_user==all_user[u]:
index = u
#从用户相似表中找到和他最相似的用户
max_user_index = int(np.argmax(like_user_user_X_Y[index]))
print(max_user_index)
#获取当前用户收藏的楼盘
now_user_collect = list(now_user.collections_set.all())
#获取相似用户收藏的楼盘
like_user_collect = list(all_user[max_user_index].collections_set.all())
print("现在",now_user_collect)
print("相似",like_user_collect)
if now_user == all_user[max_user_index]:
last_tuijian_data =now_user_collect
else :
for i in now_user_collect:
print(i.loupan_id.loupan_name)
for j in like_user_collect:
print(j.loupan_id.loupan_name)
print(i.loupan_id.loupan_name == j.loupan_id.loupan_name)
if i.loupan_id.loupan_name == j.loupan_id.loupan_name:
print(i.loupan_id.loupan_name)
now_user_collect.remove(i)
print("移除成功")
last_tuijian_data = now_user_collect + like_user_collect
print(last_tuijian_data)
#转换成json数据
return JsonResponse(data_to_json1(last_tuijian_data))
def data_to_json(data):
list = []
for i in data:
dict = {}
dict["loupan_id"] = i.id
dict["loupan_name"] = i.loupan_name
dict["property_type"] = i.property_type
dict["building_type"] = i.building_type
dict["sub_region_id"] = i.sub_region_id
dict["address"] = i.address
dict["lvhua_rate"] = i.lvhua_rate
dict["zhandi_area"] = i.zhandi_area
dict["jianzhu_area"] = i.jianzhu_area
dict["car_num"] = i.car_num
dict["cankao_price"] = i.cankao_price
dict["default_image_id"] = i.default_image_id
dict["housetype_text"] = i.housetype_text
dict["baidu_lat"] = i.baidu_lat
dict["baidu_lng"] = i.baidu_lng
dict["sale_title"] = i.sale_title
dict["price_2020"] = i.price_2020
dict["price_2019"] = i.price_2019
dict["price_2018"] =i.price_2018
list.append(dict)
return {"result":list}
def base_loupan_recommend(request):
"""
基于楼盘的推荐
csdn 算法地址:
:param request:
:return:
"""
#获取用户行为中的全部数据
#获取全部用户
all_user = user.objects.all()
#获取全部楼盘
all_loupan = loupan.objects.all()
#创建用户行为矩阵
action_user_X_Y = np.zeros((len(all_loupan),len(all_user)),dtype=float)
#为行为矩阵赋值
for i in range(len(all_loupan)):
for j in range(len(all_user)):
#创建用户行为表对象
user_action = user_actions.objects.filter(loupan_id=all_loupan[i],user_id=all_user[j])
#获取分数
if len(user_action)!=0:
count = user_action[0].click_num+user_action[0].search_num+user_action[0].collection_num+user_action[0].comment_num
print(count)
action_user_X_Y[i][j] = count
print(action_user_X_Y)
#创建相似矩阵
like_user_X_Y = np.zeros((len(all_loupan),len(all_loupan)),dtype=float)
for i in range(len(all_loupan)):
for j in range(len(all_loupan)):
if i==j:
like_user_X_Y[i][j] =1.0
else:
like_user_X_Y[i][j] =sum(np.array(action_user_X_Y[i])*np.array(action_user_X_Y[j]))/(math.sqrt(sum(action_user_X_Y[i]*action_user_X_Y[i]))+math.sqrt(sum(action_user_X_Y[j]*action_user_X_Y[j])))
print("分子:",sum(np.array(action_user_X_Y[i])*np.array(action_user_X_Y[j])))
print("分母:",(math.sqrt(sum(action_user_X_Y[i]*action_user_X_Y[i]))+math.sqrt(sum(action_user_X_Y[j]*action_user_X_Y[j]))))
print(like_user_X_Y[0])
#对like_user_X_Y 讲nan换成0.0
action_user_X_Y[np.isnan(action_user_X_Y)]=0.0
like_user_X_Y[np.isnan(like_user_X_Y)] = 0.0
#创建推荐矩阵 相似矩阵*评分矩阵
recommen_X_Y = np.dot(like_user_X_Y,action_user_X_Y)
#生成该用户的推荐list
#获取用户在那一列
user_id = request.COOKIES["user_id"]
islogin = request.COOKIES["islogin"]
if islogin=="False":
#表示用户没有登录
return JsonResponse({"res":0})
now_user = user.objects.get(id=user_id)
y_index = 0
for i in range(len(all_user)):
if all_user[i] == now_user:
y_index = i
tuijian_obj =[]
#讲推荐矩阵转置
T_recommen_X_Y = recommen_X_Y.T
for i in range(len(T_recommen_X_Y[y_index])):
if T_recommen_X_Y[y_index][i] !=0.0 :
tuijian_obj.append(all_loupan[i])
#添加到历史推荐
# 将数据添加到历史推荐中
history_info = history_recommend.objects.filter(user_id=now_user, loupan_id=all_loupan[i])
if len(history_info) == 0:
# 创建对象添加数据
history_info_obj = history_recommend()
history_info_obj.user_id = now_user
history_info_obj.loupan_id = all_loupan[i]
history_info_obj.save()
# 进行用户行为保存
if request.COOKIES["islogin"] == "True":
print("用户行为保存")
user_obj = user.objects.get(id=request.COOKIES["user_id"])
# 创建user_actions 对象
user_action = user_actions.objects.filter(user_id=user_obj, loupan_id=all_loupan[i])
if len(user_action) != 0:
# 将click_num +1
user_action[0].click_num = user_action[0].click_num + 1
user_action[0].collection_num = user_action[0].collection_num + 2
user_action[0].save()
else:
user_action = user_actions()
user_action.user_id = user_obj
user_action.loupan_id = all_loupan[i]
user_action.click_num = 1
user_action.collection_num = 2
user_action.save()
#将推荐的对象转成json格式
if len(tuijian_obj)==0:
#表示推荐列表为空
return JsonResponse({'res':1})
else :
return JsonResponse(data_to_json(tuijian_obj))
5、源码获取方式
🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看【用户名】、【专栏名称】就可以找到我啦🍅
感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻
更多推荐
所有评论(0)