大数据毕业设计:租房推荐系统 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.hqwc.cn/news/321459.html

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

相关文章

[C#]使用onnxruntime部署Detic检测2万1千种类别的物体

【源码地址】 github地址:https://github.com/facebookresearch/Detic/tree/main 【算法介绍】 Detic论文:https://arxiv.org/abs/2201.02605v3 项目源码:https://github.com/facebookresearch/Detic 在Detic论文中,Detic提到…

MySQL检索距离当前最近的7个小时内,靠近每个时间点数据信息

MySQL检索距离当前最近的7个小时内,靠近每个时间点数据信息 如果你想在最近7个小时内找到每个时间点最接近的数据,即使某些时间点没有数据,你可以使用子查询和窗口函数。以下是一个示例查询: sqlCopy codeSELECTt.time_point,CO…

【KingbaseES】实现MySql函数Median

本方法只支持在聚合函数窗口中调用 不支持在GROUP BY中使用,使用plsql写的玩意新能都会稍微差一些 建议使用原生方法修改 CREATE OR REPLACE FUNCTION _final_median(numeric[])RETURNS numeric AS $$SELECT AVG(val)FROM (SELECT valFROM unnest($1) valORDER BY …

OpenAI换血大震动始末:“ChatGPT之父”奥特曼,缘何被“扫地出门”?

近期,AI业界发生了一场“大地震”。作为聊天机器人ChatGPT的开发者,OpenAI无疑是最受关注的人工智能公司之一。就是这家公司的联合创始人、CEO、有“ChatGPT之父”之称的阿尔特曼在“疯狂的5天”里,经历了被闪电免职、加入微软、最终又官复原…

佳能G3800彩色喷墨多功能一体打印机报5B00错误代码处理方法

5B00错误代码的含义 5B00错误代码是指佳能G3800打印机的“废墨仓已满”。这个废墨仓是打印机内部的一个部件,主要用于收集打印过程中产生的废墨。当废墨仓已满时,打印机就会报5B00错误代码。 佳能G3800彩色喷墨多功能一体打印机报5B00错误代码处理办法 …

Hadoop入门学习笔记——八、数据分析综合案例

视频课程地址:https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接:https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记(汇总) 目录 八、数据分析综合案例8.1. 需求分析8.1.1. 背景介绍8.1.2…

润滑剂,2026年市场规模将达130亿美元

润滑剂是一种广泛应用于工业生产和机械维护中的材料,它可以降低机器设备的摩擦,提高性能和延长使用寿命。全球市场分析 从全球市场来看,润滑剂市场规模持续增长。根据市场调研机构的数据显示,预计2026年,全球润滑剂市场…

构建基础wlan网络 hcia无线

实验 旁挂组网 二层网络 ac为 dhcp的服务器给ap地址 s1给sta的ip地址 DHCP 业务为直接转发 实验步骤 第一步 poe 开启 poe en 开启 第二步 有线连接 vlan的配置 s1 vlan batch 100 101 连接的端口 port link-type trunk port trunk allow-pass …

计算机网络—网络搭建NAT内外网映射

使用Windows Server 2003 网络拓扑 Router 外网:NAT IP 网段 192.168.17.0/24内网:仅主机模式 IP 172.16.29.4 Client1:仅主机模式 IP 172.16.29.2 网关 172.16.29.1 Client2:仅主机模式 IP 172.16.29.3 网关 172.16.29.1…

ElasticSearch使用Grafana监控服务状态-Docker版

文章目录 版本信息构建docker-compose.yml参数说明 创建Prometheus配置文件启动验证配置Grafana导入监控模板模板说明 参考资料 版本信息 ElasticSearch:7.14.2 elasticsearch_exporter:1.7.0(latest) 下载地址:http…

Linux 进程(八) 进程的退出码

main 函数的返回值叫做进程的退出码。当进程成功退出的时候,我们一般用0来表示。进程失败的时候一般用非零来表示。我们使用不同的数字来表示进程退出时不同的失败原因。 我们查看系统的有多少退出码以及其含义时需要用到strerror() 他的头文件和用法如下。 通过一…

2024腾讯云轻量应用服务器详细介绍_轻量全解析

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器,CPU内存带宽配置高并且价格特别便宜,大带宽,但是限制月流量。轻量2核2G3M带宽62元一年、2核2G4M优惠价118元一年,540元三年、2核4G5M带宽218元一年,756元3年、…