租房数据分析可视化大屏+58同城 Django框架 大数据毕业设计(附源码)✅

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

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

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

1、项目介绍

技术栈:

python租房数据分析可视化系统 毕业设计 58同城

python语言、MySQL数据库、Django框架、Echarts可视化

租房数据分析可视化系统是一个基于python语言、MySQL数据库、Django框架和Echarts可视化技术开发的系统。该系统旨在帮助用户通过对租房数据进行分析和可视化展示,提供更直观、全面的租房市场信息,以便用户做出更明智的租房决策。

2、项目界面

(1)租房数据可视化大屏
在这里插入图片描述

(2)租房数据管理
在这里插入图片描述

(3)系统首页

在这里插入图片描述

(4)租房数据条件查询

在这里插入图片描述

(5)评论功能

在这里插入图片描述

(6)租房数据

在这里插入图片描述

3、项目说明

租房数据分析可视化系统是一个基于python语言、MySQL数据库、Django框架和Echarts可视化技术开发的系统。该系统旨在帮助用户通过对租房数据进行分析和可视化展示,提供更直观、全面的租房市场信息,以便用户做出更明智的租房决策。

系统主要包括以下功能:

  1. 数据采集与存储:系统通过爬虫技术从58同城等租房网站上采集租房相关数据,并将其存储到MySQL数据库中,包括房源信息、租金、房屋面积、地理位置等各项数据。

  2. 数据清洗与处理:对采集到的数据进行清洗和处理,包括去除重复数据、处理缺失值、格式化数据等,以确保数据的准确性和一致性。

  3. 数据分析与统计:通过对租房数据进行统计和分析,提取出各种有价值的信息,包括不同城市的租金分布、租房面积分布、租房热门区域等,为用户提供全面的租房市场概况。

  4. 可视化展示:利用Echarts可视化技术,将分析结果以图表的形式展示给用户,包括柱状图、饼图、地图等,使用户更直观地了解租房市场的情况。

  5. 用户管理与权限控制:系统提供用户管理功能,包括用户注册、登录、密码找回等,同时还可以根据用户的身份和权限,控制其对系统功能的访问和使用。

通过租房数据分析可视化系统,用户可以快速了解租房市场的情况,包括租金水平、热门区域、房屋面积分布等,从而更好地选择合适的租房房源。同时,系统还可以为租房从业人员、房产中介等提供市场调研和决策支持。

4、核心代码

# -*- coding: utf-8 -*-
import random
import time
from urllib import parse
from datetime import date, datetime
from django.shortcuts import redirect
from ..common.helper import *
from ..common.vercode import *
from simple_mysql import db as mysql
import base64


# 处理时间对象序列化问题
class DateEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.strftime("%Y-%m-%d %H:%I:%S")
        elif isinstance(obj, date):
            return obj.strftime("%Y-%m-%d")
        else:
            return json.JSONEncoder.default(self, obj)


def index(request):
    '''
    重定向到前端主页
    :param request:
    :return:
    '''
    return redirect('/dist/index.html')

#从前端获取传递的参数后,在数据库中查询相关信息并给出结果。
#和数据库进行交互
# 登录
def login(request):
    name = request.POST.get("username")
    password = request.POST.get("pwd")
    role = request.POST.get("role", 1)

    if request.session.get('verify') != request.POST.get("code"):
        return jsonResponse(1, '验证码错误')

    db = mysql().connection(DATABASE)
    user = db.table('user').where({"name": name, "pass": password, "role": role}).find()
    print(user)
    if user is None:
        return jsonResponse(1, '账号或者密码错误')
    else:
        timestamp = time.time()
        token = md5(str(user["id"]) + user["pass"] + str(timestamp))
        db.table('user').where({"id": user["id"]}).save({"token": token})
        data = {
            "token": token,
            "user": user
        }
        return jsonResponse(0, '登录成功', data)


# 注册
def register(request):
    name = request.POST.get("username")
    password = request.POST.get("pwd")

    if len(password) > 10 or len(password) < 6:
        return jsonResponse(1, '密码位数应大于6小于10')
    db = mysql().connection(DATABASE)
    result = db.table('user').where({"name": name}).find()

    if result:
        return jsonResponse(1, '用户名已经注册')

    user = db.table('user').add({
        "name": name,
        "pass": password,
        "role": 1
    })

    if user:
        return jsonResponse(0, '注册成功')

    return jsonResponse(1, '注册失败')


# 上传文件
def upload(request):
    content = request.FILES.get("file", None)
    file_dir = os.path.join(UPLOAD_DIR, time.strftime('%Y%m%d'))

    if not os.path.exists(file_dir):
        os.makedirs(file_dir)

    file = os.path.join(file_dir, content.name)
    storage = open(file, 'wb+')
    for chunk in content.chunks():
        storage.write(chunk)
    storage.close()
    dir = '/static/uploads/{}/{}'.format(time.strftime('%Y%m%d'), content.name)
    return jsonResponse(0, '上传成功', dir)


# 使用pillow生成验证码
def verify(request):
    code = imageCode()
    code.getVerifyCode()
    image, text = code.getVerifyCode()
    # 图片以二进制形式写入
    buf = BytesIO()
    image.save(buf, 'jpeg')
    buf_str = buf.getvalue()
    request.session['verify'] = text
    return jsonResponse(0, '验证码生成成功', {"code": str(base64.b64encode(buf_str), 'utf-8'), "value": text})


def house(request):
    if request.method == "GET":
        page = request.GET.get("page", 1)
        limit = request.GET.get("limit", 10)
        keyword = request.GET.get("keyword")
        area = request.GET.get("area")
        price = request.GET.get("price")
        room = request.GET.get("room")
        type = request.GET.get("type")

        id = request.GET.get("id")
        condition = {}
        db = mysql().connection(DATABASE)

        if keyword:
            # 解码url中文参数keyword
            condition["city"] = ["LIKE", "%{}%".format(parse.unquote_plus(keyword)), "", "e"]
        if area:
            if "以上" in area:
                condition["room_area"] = ["GT", area.replace("以上", ""), "", "e"]
            else:
                min_area = area.split("-")[0]
                max_area = area.split("-")[1].replace("㎡", "").replace("以上", "")
                condition["room_area"] = ["BETWEEN", [min_area, max_area], '', 'e']
        if price:
            if "以上" in price:
                condition["price"] = ["GT", price.replace("万", "").replace("以上", ""), "", "e"]
            else:
                min_price = price.split("-")[0]
                max_price = price.split("-")[1].replace("/月", "")
                condition["price"] = ["BETWEEN", [min_price, max_price], '', 'e']
        if room:
            condition["room"] = ["LIKE", "%{}%".format(room.replace("以上", "")), "", "e"]
        if type:
            condition["type"] = type

        if len(condition) > 0:
            count = db.table('house').where(condition).count()
            data = db.table('house').where(condition).page(page, limit).order("id desc").select()
        elif id:
            data = db.table('house').where({"id": id}).find()
            return jsonResponse(0, 'success', data)
        else:
            count = db.table('house').count()
            data = db.table('house').page(page, limit).order('id desc').select()
        return jsonResponse(0, 'success', data, count)
    elif request.method == "POST":
        pass
    elif request.method == "PUT":
        pass
    elif request.method == "DELETE":
        # 删除数据
        db = mysql().connection(DATABASE)
        id = request.GET.get("id")
        result = db.table('house').where({"id": id}).delete()
        if result:
            return jsonResponse(0, '删除成功')
        return jsonResponse(1, '删除失败')


def news(request):
    db = mysql().connection(DATABASE)
    if request.method == "GET":
        page = request.GET.get("page", 1)
        limit = request.GET.get("limit", 10)
        keyword = request.GET.get("keyword")
        id = request.GET.get("id")
        category = request.GET.get("category")
        condition = {}
        db = mysql().connection(DATABASE)

        if id:
            uid = request.GET.get("uid")
            data = db.table("news").where({"id": id}).find()
            # 记录浏览量
            db.table("news").where({"id": id}).save({"view": data["view"] + 1})
            # db.table("news").where({"id": id}).setInc("view")

            word_list = get_words(data["title"])
            count = ",".join([i[0] for i in word_list])
        elif keyword:
            # 解码url中文参数keyword
            q = parse.unquote_plus(keyword)
            condition["title"] = ["LIKE", "%{}%".format(q), "", "e"]
            count = db.table('news').where(condition).count()
            data = db.table('news').where(condition).page(page, limit).order("view desc,reply desc").select()

        else:
            if category:
                condition["category"] = category
                count = db.table('news').where(condition).count()
                data = db.table('news').where(condition).page(page, limit).order('id desc').select()
            else:
                count = db.table('news').count()
                data = db.table('news').page(page, limit).order('id desc').order("view desc,reply desc").select()
        return jsonResponse(0, 'success', data, count)
    elif request.method == "POST":
        data = json.loads(request.body.decode('utf-8'))

        res = db.table('news').add(data)

        if res:
            result = {"code": 0, "msg": "添加成功"}
        else:
            result = {"code": 1, "msg": "添加失败"}

        return JsonResponse(result)
    elif request.method == 'PUT':
        data = json.loads(request.body.decode('utf-8'))
        id = data.get("id")

        res = db.table('news').where({"id": id}).save(data)

        if res:
            result = {"code": 0, "msg": "操作成功"}
        else:
            result = {"code": 1, "msg": "操作失败"}

        return JsonResponse(result)
    elif request.method == "DELETE":
        # 删除数据

        id = request.GET.get("id")
        result = db.table('news').where({"id": id}).delete()
        if result:
            return jsonResponse(0, '删除成功')
        return jsonResponse(1, '删除失败')

def data(request):
    '''
    分析数据
    '''
    db = mysql().connection(DATABASE)

    room = db.table("house").group("room").field("room as name,avg(price) as value").order("value desc").limit(
        10).group("room").select()

    address = db.table("house").field("name,price").select()

    address_list = [i["name"] for i in address]

    text = " ".join(address_list)

    keyword = get_words(text)

    room_area_line = db.table("house").field("room_area as name,count(*) as value").group("room_area").select()

    area = db.table("house").field("room as name,price as value").order("name asc").select()

    statis = db.table("house").field("name,statis as value").order("value desc").limit(10).select()

    room_type = db.table("house").field("room_type as name,count(*) as value").order("value desc").group(
        "room_type").limit(10).select()

    bj_area_price = db.table("house").where("city = '北京'").field("area as name,price as value").order(
        "value desc").select()

    bj_area_price = [[i["name"].split(",")[0], i["value"]] for i in bj_area_price]

    hot_city = db.table("house").group("city").field("city as name,count(*) as value").order("value desc").select()

    data = {
        "room": room,
        "keyword": keyword,
        "area": area,
        "statis": statis,
        "room_type": room_type,
        "bj_area_price": bj_area_price,
        "hot_city": hot_city,
        "room_area_line": room_area_line
    }

    return jsonResponse(0, '成功', data)


def user(request):
    db = mysql().connection(DATABASE)
    if request.method == "GET":
        page = request.GET.get("page")
        limit = request.GET.get("limit")
        key = request.GET.get("key")
        id = request.GET.get("id")
        keyword = request.GET.get("keyword")
        condition = {}
        if keyword:
            condition["name"] = ["LIKE", "%{}%".format(keyword), "", "e"]
            count = db.table('user').where(condition).count()
            data = db.table('user').where(condition).page(page, limit).order('id desc').select()
        elif id:
            count = db.table('user').where({"id": id}).count()
            data = db.table('user').where({"id": id}).order('id desc').find()
        else:
            count = db.table('user').count()
            data = db.table('user').page(page, limit).order('id desc').select()
        return jsonResponse(0, 'success', data, count)
    elif request.method == "PUT":
        data = json.loads(request.body)
        id = data.get("id")
        result = db.table('user').where({"id": id}).save(data)
        if result:
            return jsonResponse(0, '修改成功')
        return jsonResponse(1, '修改失败')
    elif request.method == "POST":
        data = json.loads(request.body)
        result = db.table('user').add(data)
        if result:
            return jsonResponse(0, '添加成功')
        return jsonResponse(1, '添加失败')
    elif request.method == "DELETE":

        id = request.GET.get("id")
        result = db.table('user').where({"id": id}).delete()
        if result:
            return jsonResponse(0, '删除成功')
        return jsonResponse(1, '删除失败')




5、源码获取方式

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32CubeMX教程11 RTC 实时时钟 - 入侵检测和时间戳

目录 1、准备材料 2、实验目标 3、实验流程 3.0、前提知识 3.1、CubeMX相关配置 3.1.1、时钟树配置 3.1.2、外设参数配置 3.1.3、外设中断配置 3.2、生成代码 3.2.1、外设初始化调用流程 3.2.2、外设中断调用流程 3.2.3、添加其他必要代码 4、常用函数 5、烧录验…

php ext-sodium 拓展安装 linux+windows

php编译安装(linux)&#xff0c;可以参考&#xff1a;php编译安装 一、windows soduim源码包自带&#xff0c;直接修改php.ini&#xff0c;取消extensionsodium注释即可 二、linux 1.安装依赖 apt-get install libsodium-dev2.进入源码目录 这里写自己的源码目录 cd /us…

【CASS精品教程】CASS11坐标换带方法(单点计算、批量计算)

参考阅读:【Pix4d精品教程】Pix4d中央子午线细化设置(测区跨两个分带) 文章目录 一、坐标换带概述二、CASS坐标换带1. 单点转换2. 批量转换三、应用场景一、坐标换带概述 坐标换带是将一个投影带的平面直角坐标系换算成另外一个投影带的平面直角坐标系的过程。这一过程主要…

【进阶】【Python网络爬虫】【19.爬虫框架】scrapy分布式采集,增量式,Redis数据库安装(附大量案例代码)(建议收藏)

Python网络爬虫 Scrapy分布式1. 分布式概述什么是分布式&#xff1f;scrapy分布式scrapy和scrapy-redis的区别 2. Redis数据库及可视化工具安装Redis是什么安装Redis数据库windowsLinuxMac电脑请参考如下教程 安装可视化工具Redis基本数据库语法 3. 编码流程&#xff08;重点&a…

控制障碍函数(Control Barrier Function,CBF) 一、定义

近年来&#xff0c;非线性系统的安全分析与控制已成为控制领域中的热门研究方向&#xff0c;而障碍函数则是该方向的一种重要工具&#xff0c;基于障碍函数的安全分析与控制方法具有计算效率高、鲁棒性强等优点。 由于篇幅限制&#xff0c;我们将介绍分为几个部分进行。 一、…

论文阅读:基于MCMC的能量模型最大似然学习剖析

On the Anatomy of MCMC-Based Maximum Likelihood Learning of Energy-Based Models 相关代码&#xff1a;点击 本文只介绍关于MCMC训练的部分&#xff0c;由此可知&#xff0c;MCMC常常被用于训练EBM。最后一张图源于Implicit Generation and Modeling with Energy-Based Mod…

三、C语言中的分支与循环—循环嵌套 (9)

嵌套循环指的是一个循环内部包含另一个循环。外层循环每执行一次&#xff0c;内层循环会执行完其所有的迭代。嵌套循环经常被用来处理多维数据结构&#xff0c;如多维数组&#xff0c;或者在进行复杂的算法操作时&#xff0c;如排序和搜索算法。 嵌套循环可以是任意类型的循环…

WeNet语音识别+Qwen-72B-Chat Bot+Sambert-Hifigan语音合成

WeNet语音识别Qwen-72B-Chat Bot&#x1f47e;Sambert-Hifigan语音合成 简介 利用 WeNet 进行语音识别&#xff0c;使用户能够通过语音输入与系统进行交互。接着&#xff0c;Qwen-72B-Chat Bot作为聊天机器人接收用户的语音输入或文本输入&#xff0c;提供响应并与用户进行对话…

光伏、储能一体化监控及运维解决方案 安科瑞 许敏

前言&#xff1a;今年以来&#xff0c;在政策利好推动下光伏、风力发电、电化学储能及抽水蓄能等新能源行业发展迅速&#xff0c;装机容量均大幅度增长&#xff0c;新能源发电已经成为新型电力系统重要的组成部分&#xff0c;同时这也导致新型电力系统比传统的电力系统更为复杂…

VS Code 远程连接云机器训练配置

VS Code 远程连接云机器 Visual Studio Code&#xff08;以下简称 VS Code&#xff09;是一个由微软开发的代码编辑器。VS Code 支持代码补全、代码片段、代码重构、Git 版本控制等功能。 安装 VSCode步骤简单且网上有很多教程&#xff0c;这里不过多重复了。 VS Code 现已支…

python3 识别人像照片并纠正照片正反

实现效果&#xff1a; 本程序可以将下图第二张照片进行人脸识别&#xff0c;发现相片是否是正向&#xff0c;如果不是就进行相片转正形成下图第一张图。 代码 安装配置 模型下载 首先在我的这篇文件下载相应的人脸识别模型&#xff0c;一般 64标记点就够用&#xff0c;当然…

1月2日代码随想录二叉树的最小深度及层序遍历总结

个人认为这么一个层序遍历的章节放这么多基本一样的题目算是很没意思的了 填充每个节点的下一个右侧节点和二叉树最大深度和前面的代码几乎完全一样&#xff0c;所以我就跳过了 代码随想录 (programmercarl.com) 代码随想录 (programmercarl.com) 111.二叉树的最小深度 给…

android开发百度地图api实现定位图标随手机方向转动

该功能的实现依赖于手机中的传感器元件如陀螺仪、加速度计等&#xff0c;具体开发详见android的官方开发文档&#xff1a; 传感器概览 | Android 开发者 | Android Developershttps://developer.android.com/guide/topics/sensors/sensors_overview?hlzh-cn要自定义一个传…

全网最详细的鼠标点击效果与禁用页面缩小放大

一、文章引导 #mermaid-svg-vObupkPcCxdB8hCq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-vObupkPcCxdB8hCq .error-icon{fill:#552222;}#mermaid-svg-vObupkPcCxdB8hCq .error-text{fill:#552222;stroke:#55222…

c语言:设计投票小程序|练习题

一、题目 设计一个投票小程序 如图&#xff1a; 二、代码图片【带注释】 三、源代码【带注释】 #include <stdio.h> #include<string.h> void win(int,int,int); int main() { char ch[5]; int countLili0; int countjp0; int countzx0; int …

代表团坐车 - 华为OD统一考试

OD统一考试&#xff08;B卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 某组织举行会议&#xff0c;来了多个代表团同时到达&#xff0c;接待处只有一辆汽车可以同时接待多个代表团&#xff0c;为了提高车辆利用率&#xff0c;请帮接待…

MongoDB vs MySQL:项目选择哪一个数据库系统?

由于市场上有各种可用的数据库&#xff0c;用户经常会就MongoDB与MySQL进行辩论&#xff0c;以找出更好的选择。 使用MySQL等关系数据库的组织在根据不断变化的需求管理和存储数据时可能会面临一定的困难。同时&#xff0c;新公司想知道选择什么数据库&#xff0c;这样他们就不…

微功耗遥测终端机RTU:守护城市生命线的智能卫士

在城市的繁华背后&#xff0c;隐藏着一套高效运转的“生命线”——排水系统。而在这条生命线上&#xff0c;微功耗遥测终端机RTU(MGTR-W4131U)发挥着不可或缺的作用&#xff0c;为城市的正常运转提供了坚实保障。 微功耗遥测终端机RTU(MGTR-W4131U)&#xff0c;顾名思义&#…

星友提问:本科与硕士的区别是什么?

本科阶段: 主要以学习成绩寄点为主&#xff0c;学习知识的来源更像“大锅饭”&#xff0c;所有同学一起上课&#xff0c;一起考试&#xff0c;以学习为主。硕士阶段: 论文实验科研为主&#xff0c;相对于本来说&#xff0c;成绩弱化的厉害&#xff0c;甚至导师直接说&#xff0…

信号量机制的实际使用-第二十九天

目录 回顾旧知 实现进程互斥 实现进程同步 实现进程的前驱关系 本节思维导图 回顾旧知 1、一个信号量对应一种资源 2、信号量的值 该种资源的剩余数量&#xff08;信号量值小于0&#xff0c;说明此时有进程在等待这种资源&#xff09; 3、P(S)&#xff1a;申请一个资源S&…