大数据毕业设计:租房推荐系统 python 租房大数据 爬虫+可视化大屏 计算机毕业设计(附源码+文档)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏)

毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、项目介绍

技术栈:
租房大数据分析可视化平台 毕业设计 python 爬虫 推荐系统

Django框架、vue前端框架、scrapy爬虫、贝壳租房网
租房大数据分析可视化平台是一个基于Django框架和vue前端框架开发的系统,使用scrapy爬虫技术从贝壳租房网上获取租房数据,并通过数据分析和可视化技术展示给用户。

该系统的主要功能包括:

  1. 数据爬取:使用scrapy爬虫技术从贝壳租房网上获取租房数据,包括房源信息、租金、位置等。

  2. 数据存储:将爬取到的租房数据存储到数据库中,方便后续的数据分析和展示。

  3. 数据分析:对爬取到的租房数据进行分析,包括租金分布、地理位置分布、房屋面积分布等。

  4. 可视化展示:将数据分析的结果通过图表、地图等形式展示给用户,方便用户了解租房市场的情况。

  5. 推荐系统:根据用户的需求和偏好,通过数据分析和机器学习算法为用户推荐符合其需求的租房信息。

通过该系统,用户可以方便地了解租房市场的情况,包括租金水平、地理位置分布等,同时还可以根据自己的需求和偏好获取个性化的租房推荐。

2、项目界面

(1)租房数据可视化大屏

在这里插入图片描述

(2)租房推荐

在这里插入图片描述

(3)租房数据详情页
在这里插入图片描述

(4)房屋数据

在这里插入图片描述

(5)注册登录界面

在这里插入图片描述

(6)数据爬取页面

在这里插入图片描述

3、项目说明

租房大数据分析可视化平台是一个基于Django框架和vue前端框架开发的系统,使用scrapy爬虫技术从贝壳租房网上获取租房数据,并通过数据分析和可视化技术展示给用户。

该系统的主要功能包括:

  1. 数据爬取:使用scrapy爬虫技术从贝壳租房网上获取租房数据,包括房源信息、租金、位置等。

  2. 数据存储:将爬取到的租房数据存储到数据库中,方便后续的数据分析和展示。

  3. 数据分析:对爬取到的租房数据进行分析,包括租金分布、地理位置分布、房屋面积分布等。

  4. 可视化展示:将数据分析的结果通过图表、地图等形式展示给用户,方便用户了解租房市场的情况。

  5. 推荐系统:根据用户的需求和偏好,通过数据分析和机器学习算法为用户推荐符合其需求的租房信息。

通过该系统,用户可以方便地了解租房市场的情况,包括租金水平、地理位置分布等,同时还可以根据自己的需求和偏好获取个性化的租房推荐。

4、核心代码


from .models import *
import json
from django.http.response import HttpResponse
from django.shortcuts import render
from django.http import JsonResponse
from datetime import datetime, time
from django.core.paginator import Paginator
from django.db.models import Q
import simplejson
from collections import Counter
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.charts import Map, Grid, Bar, Line, Pie, TreeMap
from pyecharts.faker import Faker
from pyecharts.commons.utils import JsCode
from pyecharts.options.charts_options import MapItem
from django.db.models import Q, Count, Avg, Min, Maxdef to_dict(l, exclude=tuple()):# 将数据库模型 变为 字典数据 的工具类函数def transform(v):if isinstance(v, datetime):return v.strftime("%Y-%m-%d %H:%M:%S")return vdef _todict(obj):j = {k: transform(v)for k, v in obj.__dict__.items()if not k.startswith("_") and k not in exclude}return jreturn [_todict(i) for i in l]def unique_fields(request):body = request.jsonfield = body.get("field")data = [i[0] for i in Rental.objects.values_list(field).distinct()]return JsonResponse(data, safe=False)def get_list(request):# 列表body = request.jsonpagesize = body.get("pagesize", 10)page = body.get("page", 1)orderby = body.get("orderby", "-id")notin = ["pagesize", "page", "total", "orderby"]query = {k: v for k, v in body.items() if k not in notin and (v != "" and v is not None)}q = Q(**query)objs = Rental.objects.filter(q).order_by(orderby)paginator = Paginator(objs, pagesize)pg = paginator.page(page)result = to_dict(pg.object_list)return JsonResponse({"total": paginator.count,"result": result,})def get_detail(request):# 详情body = request.jsonid = body.get("id")o = Rental.objects.get(pk=id)his = History.objects.filter(userId=request.user.id).order_by("-createTime").first()if not (his and his.rentalId == o.id):History(userId=request.user.id, rentalId=o.id).save()return JsonResponse(to_dict([o])[0])def history_recommand(request):rentalIds = (History.objects.filter(userId=request.user.id).values_list("rentalId").distinct())rentals = []# 根据历史查看记录推荐if rentalIds:rentalIds = [i[0] for i in rentalIds]location = [i[0]for i in Rental.objects.filter(id__in=rentalIds).values_list("location")]locations = ["-".join(i.split("-")[:2]) for i in location]most_common_cates = list(dict(Counter(locations).most_common(2)).keys())q = Q()for i in most_common_cates:q |= Q(location__icontains=i)rentals = Rental.objects.filter(q).order_by("?")[:5]# 没有记录则随机推荐else:rentals = Rental.objects.order_by("?")[:5]return JsonResponse(to_dict(rentals), safe=False)def type_pie(request):data = {i["type"]: i["count"]for i in Rental.objects.values("type").annotate(count=Count("id"))if "租" in i["type"]}# 用饼图展示数据c = (Pie(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)).add("",list(data.items()),label_opts=opts.LabelOpts(is_show=False),radius=["40%", "75%"],).set_global_opts(title_opts=opts.TitleOpts(title="租房类型统计", pos_left="40%"),legend_opts=opts.LegendOpts(type_="scroll", pos_right="80%", orient="vertical"),))# 返回数据return HttpResponse(c.dump_options(), content_type="application/json")def orientation_map(request):data = [{"name": i["orientation"], "value": i["count"]}for i in Rental.objects.values("orientation").annotate(count=Count("id"))]# 用饼图展示数据c = (TreeMap(init_opts=opts.InitOpts(width="1280px", height="720px")).add(series_name="option",data=data,visual_min=300,leaf_depth=1,# 标签居中为 position = "inside"label_opts=opts.LabelOpts(position="inside"),).set_global_opts(legend_opts=opts.LegendOpts(is_show=False),title_opts=opts.TitleOpts(title="房屋朝向分析", pos_left="leafDepth"),))# 返回数据return HttpResponse(c.dump_options(), content_type="application/json")def level_bar(request):data = {i["level"]: i["count"]for i in Rental.objects.values("level").annotate(count=Count("id"))if i["level"]}# 用柱状图展示统计数据c = (Bar().add_xaxis([i[0] for i in data.items()]).add_yaxis("",[i[1] for i in data.items()],label_opts=opts.LabelOpts(is_show=False),bar_max_width=50,).reversal_axis().set_global_opts(title_opts=opts.TitleOpts(title="楼层类型分析"),# datazoom_opts=opts.DataZoomOpts(orient="vertical"),yaxis_opts=opts.AxisOpts(type_="category",axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),),))# 返回数据return HttpResponse(c.dump_options(), content_type="application/json")def price_bar(request):data = {}data["1000以下"] = Rental.objects.filter(price__lte=1000).count()data["1000-2000"] = Rental.objects.filter(price__gte=1000, price__lte=2000).count()data["2000-3000"] = Rental.objects.filter(price__gte=2000, price__lte=3000).count()data["3000-4000"] = Rental.objects.filter(price__gte=3000, price__lte=4000).count()data["4000-5000"] = Rental.objects.filter(price__gte=4000, price__lte=5000).count()data["5000-6000"] = Rental.objects.filter(price__gte=5000, price__lte=6000).count()data["6000-7000"] = Rental.objects.filter(price__gte=6000, price__lte=7000).count()data["7000以上"] = Rental.objects.filter(price__gte=7000).count()# 用柱状图展示统计数据c = (Bar().add_xaxis([i[0] for i in data.items()]).add_yaxis("",[i[1] for i in data.items()],label_opts=opts.LabelOpts(is_show=False),bar_max_width=50,color="#5689ff",).set_global_opts(title_opts=opts.TitleOpts(title="房源价格分布"),# datazoom_opts=opts.DataZoomOpts(orient="vertical"),xaxis_opts=opts.AxisOpts(type_="category",axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),),))# 返回数据return HttpResponse(c.dump_options(), content_type="application/json")def province_map(request):data = {i["province"] + "省": i["count"]for i in Rental.objects.values("province").annotate(count=Count("id"))}dd = [MapItem(name=i[0], value=i[1]) for i in data.items()]m = (Map().add("房源数量", dd, "china", is_roam=False, is_map_symbol_show=False).set_global_opts(title_opts=opts.TitleOpts(title="房源数量分布",),visualmap_opts=opts.VisualMapOpts(max_=1000,is_piecewise=False,),legend_opts=opts.LegendOpts(is_show=False, textstyle_opts=opts.TextStyleOpts(color="white")),))return HttpResponse(m.dump_options(), content_type="aplication/text")

5、源码获取方式

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/597261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

广播及代码实现

广播(Broadcast)是一种网络通信方式,它允许一台设备向网络中的所有其他设备发送消息。广播通常用于在网络上传递一些信息,让所有设备都能接收并处理。在广播中,通信的目标是整个网络而不是特定的单个设备。 向子网中…

【JAVA】Java 中 Set集合常用方法

🍎个人博客:个人主页 🏆个人专栏: JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 常用方法 代码示例 结语 我的其他博客 前言 Java中的Set接口提供了一种不允许包含重复元素的集合。常用的实现类有HashS…

把苹果手机上的备忘录转为长图片,分享给别人方法教程

在这个信息爆炸的时代,手机备忘录几乎成了我随身携带的“记忆宝库”。每当我脑海中闪现出一个想法、灵感或是需要记住的重要事项,我都会第一时间打开苹果手机的备忘录,将它们一一记录下来。备忘录的简洁界面和高效操作总能让我在忙碌的生活中…

正负样本分配策略simOTA

simOTA是YOLOX中提出的 正负样本分配策略(OTA, SimOTA,TAS) OTA源于2021年cvpr的论文,使训练和验证的标签有着更好的对应关系。 yolov5没有用到,只有一种loss: from utils.loss import ComputeLoss comput…

线性代数-第五课,第六课,第七课,第八课

第五课 判断某向量是否可由某向量组线性表示 把向量组组成一个行列式,计算行列式的秩 把所有向量放在一起构成一个行列式,计算行列式的秩 如果两个行列式的秩相等,表示可以线性表示,写答案的格式如下 线性表示:bk…

大模型应用实践:AIGC探索之旅

随着OpenAI推出ChatGPT,AIGC迎来了前所未有的发展机遇。大模型技术已经不仅仅是技术趋势,而是深刻地塑造着我们交流、工作和思考的方式。 本文介绍了笔者理解的大模型和AIGC的密切联系,从历史沿革到实际应用案例,再到面临的技术挑…

二、串行FLASH文件系统FatFs移植

经过上一节的分析,我们对文件系统有一定的理解了,这一节给大家介绍怎么把FatFs文件系统的这些代码移植到STM32S上,然后STM32利用这一些代码或者函数,以文件的格式对FLASH进行读写数据。 实则对diskio.c提供一些函数接口。 首先将…

Kubernetes-网络

一. 前言 flannel两种容器跨主机通信的方案,其中UDP模式是IP in UDP,即三层报文封装在UDP数据包中通信;而vxlan模式则是MAC in UDP,即二层报文封装在UDP数据包中通信 flannel UDP模式和vxlan模式都对数据包做了封解包&#xff0c…

手把手教你在Ubuntu22上安装VideoRetalking

VideoReTalking是一种新系统,可以根据输入音频编辑真实世界的谈话头部视频的面孔,即使具有不同的情感,也能生成高质量和口型同步的输出视频。我们的系统将这个目标分解为三个连续的任务: (1)具有规范表情的…

SpringBoot实现登录拦截器

SpringBoot实现登录拦截器 对于管理系统或其他需要用户登录的系统,登录验证都是必不可少的环节,在SpringBoot开发的项目中,通过实现拦截器来实现用户登录拦截并验证。 1、SpringBoot实现登录拦截的原理 SpringBoot通过实现HandlerIntercep…

普中STM32-PZ6806L开发板(HAL库函数实现-访问多个温度传感器DS18B20)

简介 我们知道多个DS18B20的DQ线是可以被挂在一起的, 也就是一根线上可以访问不同的DS18B20而不会造成数据错乱, 怎么做到的,其实数据手册都有说到, 就是靠64-bit ROM code 进行识别, 也可以理解成Serial Number进行识别, 因为主要差异还是在Serial Numb…

本地git服务器的使用

最后总结一句,用gitlab最省事,管理权限最方便,别像下文一样整了。 Windows上使用: 首先要在windows开发机上生成密钥: 1.安装git,首先去git官网下载git,https://git-scm.com/downloads&#xff…

初学者SkyWalking详细使用文档

SkyWalking使用文档 下载地址:https://skywalking.apache.org/downloads/ 主要下载:skywalking apm(tar) 、agents(tar) 解压: (可选操作): ​ apache-skywalking-apm-bin --&g…

chromium在中文用户名下无法编译的问题

新电脑没有太注意,起用户名的时候用了中文。 在编译chromium104的代码时,因为环境变量有中文导致编译失败: 因为我的电脑默认是使用gbk编码,而不是utf-8编码。 这个问题有三种解决办法: (一)把…

MySQL——事物

目录 一.发现问题 二.什么时事物 三.事务提交方式 四.事物的常规操作方式 五. 事务隔离级别 1.如何理解隔离性 2.隔离级别 3.查看与设置隔离性 4.读未提交【Read Uncommitted】 5.读提交【Read Committed】 6.可重复读【Repeatable Read】 7.串行化【serializabl…

云卷云舒:大型电信运营商应用软件健康度评估方法

大型电信运营商内均会自建云资源池,并基于云资源池构建自己上层应用软件资源,但是各类上层应用软件的故障频发也给运维工作带来了较大的压力,电信运营商急需一种较完善的方法实现对于应用软件的健康度评测,以进一步指导运维完成应…

unity C# 中一看就会的try-catch-finally、throw

文章目录 1、C# 异常处理原理:2、C# 异常处理实用案例(简化版示例):3、throw关键字 C# 异常处理是一种用于捕获和处理程序运行时错误的机制,它允许程序在遇到不可预见或非正常条件时进行优雅地恢复或失败。C# 中的异常…

Rust 圣经 阅读 字符、布尔、单元类型

字符类型(char) Rust 的字符不仅仅是 ASCII ,还包含所有的 Unicode 值,包括单个的中文、日文、表情符号等等。 Unicode 值的范围从 U0000 ~ UD7FF 和 UE000 ~ U10FFFF。 因为每个 Unicode 都是 4 个字节编码,所以字符…

知虾皮Shopee:东南亚最受欢迎的电子商务平台

在如今数字化时代,电子商务平台成为人们购物的首选方式。Shopee作为东南亚地区最受欢迎的电子商务平台,通过其多样化的商品、便捷的购物体验和创新的商业模式,迅速在该地区占据了重要地位。本文将详细介绍Shopee的特点和优势,以及…

设计模式 七大原则

1.单一职责原则 单一职责原则(SRP:Single responsibility principle)又称单一功能原则 核心:解耦和增强内聚性(高内聚,低耦合)。 描述: 类被修改的几率很大,因此应该专注…