博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python、大数据、人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌
🍅文末获取源码联系🍅
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
————————————————
计算机毕业设计《1000套》✌
PS:Java、Python、大数据、机器学习等,可以用源码,或者定制开发!
目录
1、项目介绍及开发技术
1.1 项目介绍
“基于 Hadoop 的南昌房价数据分析系统”面向南昌二手房市场,集数据获取、清洗、存储、分析与可视化于一体。系统每日自动爬取主流房产平台房源信息,利用 Hadoop 分布式文件系统(HDFS)实现 PB 级数据可靠存储;通过 Spark 分布式计算完成房价清洗、特征提取等,使用随机森林算法进行房价预测;后端采用 Django 提供 RESTful 接口与业务调度,MySQL 存储业务元数据与结果指标;前端基于 Vue + ECharts 构建响应式页面,支持区域均价、楼盘走势、单价热力图、户型/朝向价格对比、房价预测曲线等多维度可视化。管理员可在后台管理房源、模型与系统公告,普通用户可浏览房源、查看房价走势、提交购房意愿与在线交流。系统为政府、中介、购房者提供实时、可信的房价决策参考,也展示了大数据技术在房产领域的落地价值。
1.2 开发技术
系统以 Hadoop 存海量房源,Spark 负责清洗,随机森林算法进行房价预测,Django 提供 REST 接口,MySQL 存业务数据,Vue+ECharts 实现交互式可视化,前后端分离、部署 Docker 化,稳定高效。
序号 | 技术名称 | 类型 | 版本/备注 | 用途描述 |
---|---|---|---|---|
1 | Python | 编程语言 | Python 3.7.7 | 广泛用于Web开发、数据科学、AI等领域 |
2 | Django | Web框架 | Django2.0 | 高级Web框架,用于快速开发Web应用 |
3 | Flask | Web框架 | Flask2.0.0 | 轻量级Web框架,适合小型项目 |
4 | Scrapy | 爬虫框架 | Scrapy2.9.0 | 用于编写爬虫程序,快速抓取网页数据 |
5 | Hadoop | 大数据处理 | 分布式存储和计算框架,适合大数据存储和处理 | |
6 | Spark | 大数据处理 | pyspark3.3.2 | 快速、通用的集群计算系统 |
7 | MySQL | 数据库 | MySQL5.7+ | 关系型数据库,用于存储和管理数据 |
8 | Navicat | 数据库管理工具 | Navicat11+ | 数据库管理和开发工具,支持多种数据库 |
9 | DataGrip | 数据库管理工具 | 强大的数据库管理工具,支持多种数据库 | |
10 | PyCharm | 开发环境 | Pycharm2021 | Python IDE,提供代码编辑、调试等功能 |
11 | VSCode | 开发环境 | VSCode1.15.1 | 轻量级但功能强大的代码编辑器 |
12 | Node.js | 服务器端JS环境 | Node 14.15.0 | 用于构建高性能的服务器端和网络应用 |
2、系统功需求分析
UML是 Unified Modeling Language的缩写,又称统一建模语言。是开发者对客观事物进行建模的标记,同时也是为开发者了解系统需要什么样的功能和整个流程是什么样的做的前期工作。南昌房价数据分析系统的UML用例分析详情如下图所示。
图2-1 管理员用例图
图2-2 用户用例图
3、系统总体设计
3.1 系统功能模块设计
南昌房价数据分析系统在设计与实现时,采取了模块性的设计理念,把相似的系统的功能整合到一个模组中,以增强内部的功能,减少各组件之间的联系,从而达到减少相互影响的目的。
系统主要包括用户、南昌二手房、房价预测、举报记录、在线交流、论坛分类、系统管理、个人中心等功能。系统总体功能结构图如图3-1所示。
图3-1 系统总体功能结构图
3.2 系统数据库设计
(1)数据库概念设计
南昌房价数据分析系统的E-R图设计围绕核心实体来展开,主要实体包括“管理员、用户、南昌二手房、房价预测、房产资讯”等。各实体间通过关系相互联系,构建起全面管理南昌房价数据分析系统的数据库架构。本系统的整体E-R实体属性如图3-2所示。
图3-2系统总体E-R实体属性图
(2)数据库表设计
本系统所采用的数据库是MySQL,数据库中包含数据库表和表之间的关系。该系统数据库设计采用的是关系型数据库表。表结构如下列各表所示。
表3-1:房产资讯
表3-2:房价预测
表3-3:南昌二手房
表3-4:在线交流
表3-5:用户
4、系统实现截图
4.1 前台功能
南昌房价数据分析系统的前台功能主要包括四个核心部分:南昌二手房模块,用户可以浏览和搜索最新的二手房信息;在线交流模块,提供一个平台让用户讨论房产相关话题;房产资讯模块,发布最新的房地产市场新闻和政策解读;还可以进入个人中心模块进行操作。这些功能共同为用户提供了一个全面、互动的房产信息平台;系统首页界面如图4-1所示:
图4-1 系统首页界面
图4-2个人中心详细页面
4.2 后台功能
管理员主页面作为系统控制中心,提供全面的管理功能。页面通常详细列出所有管理模块,包括用户、南昌二手房、房价预测、举报记录、在线交流、论坛分类、系统管理、个人中心等,确保管理员能够高效地进行日常管理工作。整个页面布局清晰,功能模块化,便于管理员快速定位和操作。管理员主页界面如图4-3所示:
图4-3 管理员主界面
图4-4用户界面
图4-5 南昌二手房界面
图4-6 可视化大屏界面
图4-7房价预测界面
图4-8举报记录界面
图4-9在线交流界面
图4-10系统管理界面
5、关键代码
def forum_lists(request):
if request.method in ["POST", "GET"]:
msg = {"code": normal_code, "msg": mes.normal_code, "data":[]}
msg['data'],_,_,_,_ = forum.page(forum, forum, {})
return JsonResponse(msg, encoder=CustomJsonEncoder)
def forum_query(request):
'''
'''
if request.method in ["POST", "GET"]:
msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}
try:
query_result = forum.objects.filter(**request.session.get("req_dict")).values()
msg['data'] = query_result[0]
except Exception as e:
msg['code'] = crud_error_code
msg['msg'] = f"发生错误:{e}"
return JsonResponse(msg, encoder=CustomJsonEncoder)
def forum_list(request):
'''
前台分页
'''
if request.method in ["POST", "GET"]:
msg = {"code": normal_code, "msg": mes.normal_code, "data":{"currPage":1,"totalPage":1,"total":1,"pageSize":10,"list":[]}}
req_dict = request.session.get("req_dict")
#获取全部列名
columns= forum.getallcolumn( forum, forum)
if "vipread" in req_dict and "vipread" not in columns:
del req_dict["vipread"]
#表属性[foreEndList]前台list:和后台默认的list列表页相似,只是摆在前台,否:指没有此页,是:表示有此页(不需要登陆即可查看),前要登:表示有此页且需要登陆后才能查看
try:
__foreEndList__=forum.__foreEndList__
except:
__foreEndList__=None
try:
__foreEndListAuth__=forum.__foreEndListAuth__
except:
__foreEndListAuth__=None
#authSeparate
try:
__authSeparate__=forum.__authSeparate__
except:
__authSeparate__=None
if __foreEndListAuth__ =="是" and __authSeparate__=="是":
tablename=request.session.get("tablename")
if tablename!="users" and request.session.get("params") is not None:
req_dict['userid']=request.session.get("params").get("id")
tablename = request.session.get("tablename")
if tablename == "users" and req_dict.get("userid") != None:#判断是否存在userid列名
del req_dict["userid"]
else:
__isAdmin__ = None
allModels = apps.get_app_config('main').get_models()
for m in allModels:
if m.__tablename__==tablename:
try:
__isAdmin__ = m.__isAdmin__
except:
__isAdmin__ = None
break
if __isAdmin__ == "是":
if req_dict.get("userid"):
# del req_dict["userid"]
pass
else:
#非管理员权限的表,判断当前表字段名是否有userid
if "userid" in columns:
try:
pass
# 本接口可以匿名访问,所以try判断是否为匿名
req_dict['userid']=request.session.get("params").get("id")
except:
pass
#当列属性authTable有值(某个用户表)[该列的列名必须和该用户表的登陆字段名一致],则对应的表有个隐藏属性authTable为”是”,那么该用户查看该表信息时,只能查看自己的
try:
__authTables__=forum.__authTables__
except:
__authTables__=None
if __authTables__!=None and __authTables__!={} and __foreEndListAuth__=="是":
for authColumn,authTable in __authTables__.items():
if authTable==tablename:
try:
del req_dict['userid']
except:
pass
params = request.session.get("params")
req_dict[authColumn]=params.get(authColumn)
username=params.get(authColumn)
break
if forum.__tablename__[:7]=="discuss":
try:
del req_dict['userid']
except:
pass
q = Q()
msg['data']['list'], msg['data']['currPage'], msg['data']['totalPage'], msg['data']['total'], \
msg['data']['pageSize'] = forum.page(forum, forum, req_dict, request, q)
return JsonResponse(msg, encoder=CustomJsonEncoder)
def forum_save(request):
'''
后台新增
'''
if request.method in ["POST", "GET"]:
msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}
req_dict = request.session.get("req_dict")
if 'clicktime' in req_dict.keys():
del req_dict['clicktime']
tablename=request.session.get("tablename")
__isAdmin__ = None
allModels = apps.get_app_config('main').get_models()
for m in allModels:
if m.__tablename__==tablename:
try:
__isAdmin__ = m.__isAdmin__
except:
__isAdmin__ = None
break
#获取全部列名
columns= forum.getallcolumn( forum, forum)
if tablename!='users' and req_dict.get("userid")!=None and 'userid' in columns and __isAdmin__!='是':
params=request.session.get("params")
req_dict['userid']=params.get('id')
if 'addtime' in req_dict.keys():
del req_dict['addtime']
idOrErr= forum.createbyreq(forum,forum, req_dict)
if idOrErr is Exception:
msg['code'] = crud_error_code
msg['msg'] = idOrErr
else:
msg['data'] = idOrErr
return JsonResponse(msg, encoder=CustomJsonEncoder)
def forum_add(request):
'''
前台新增
'''
if request.method in ["POST", "GET"]:
msg = {"code": normal_code, "msg": mes.normal_code, "data": {}}
req_dict = request.session.get("req_dict")
tablename=request.session.get("tablename")
#获取全部列名
columns= forum.getallcolumn( forum, forum)
try:
__authSeparate__=forum.__authSeparate__
except:
__authSeparate__=None
if __authSeparate__=="是":
tablename=request.session.get("tablename")
if tablename!="users" and 'userid' in columns:
try:
req_dict['userid']=request.session.get("params").get("id")
except:
pass
try:
__foreEndListAuth__=forum.__foreEndListAuth__
except:
__foreEndListAuth__=None
if __foreEndListAuth__ and __foreEndListAuth__!="否":
tablename=request.session.get("tablename")
if tablename!="users":
req_dict['userid']=request.session.get("params").get("id")
if 'addtime' in req_dict.keys():
del req_dict['addtime']
error= forum.createbyreq(forum,forum, req_dict)
if error is Exception:
msg['code'] = crud_error_code
msg['msg'] = error
else:
msg['data'] = error
return JsonResponse(msg, encoder=CustomJsonEncoder)
6、论文目录结构
第一章绪论 1
1.1 课题背景与意义 1
1.2 国内外研究现状 2
1.3 本课题研究的主要内容 3
第二章关键技术介绍 4
2.1 Python简介 4
2.2 Django简介 4
2.3 Hadoop介绍 5
2.4 Scrapy介绍 5
2.5 MySQL数据库的运用 6
2.6 vue.js前端框架 6
2.7 B/S结构 7
第三章系统需求分析 8
3.1设计目标 8
3.2系统可行性分析 8
3.2.1技术可行性 8
3.2.2经济可行性 8
3.2.3操作可行性 8
3.3系统UML用例分析 9
3.4系统流程分析 9
3.4.1系统的流程图 9
3.4.2用户登录逻辑流程图 10
第四章系统设计 12
4.1系统功能模块设计 12
4.2数据库设计 12
4.2.1数据库概念设计 12
4.2.2 数据库表设计 13
第五章系统实现 19
5.1前台功能实现 19
5.2管理员功能实现 20
第六章系统测试 25
6.1测试目的 25
6.2测试方法 25
6.3系统测试用例 25
6.3.1系统登录模块的测试 25
6.3.2用户中心模块的测试 26
6.3.3用户管理模块的测试 27
结论 28
参考文献 29
致谢 30
更多源码:
6、源码获取
感谢大家的阅读,如有不懂的问题可以评论区交流或私聊!
喜欢文章可以点赞、收藏、关注、评论啦
→下方联系方式扫描获取源码←