基于 Python 的二手房房价分析与预测系统:从数据采集到在线估价的完整实战
有需要本项目的代码、文档、完整资源,或者需要部署调试的朋友,可以私信博主。

图 1 项目整体流程与资料包结构展示
一、前言
最开始做这个项目,是因为重庆的二手房市场很有代表性。重庆不是简单的平面城市,山地地形、组团式城区、江景资源、轨道交通和商圈分布都会影响房价。很多房源看起来距离相近,实际通勤体验可能完全不同;同样是高楼层,有的楼盘能看到江景,有的只是普通视野。这种复杂性让我觉得,单靠人工经验去判断价格,很容易遗漏隐藏在数据里的规律。
我希望把二手房平台上的公开房源数据整理成一套可以运行、可以分析、可以预测、可以展示的系统。它不是简单爬一些数据,也不是只画几张图,而是把数据采集、数据清洗、MySQL 存储、Pyecharts 可视化、机器学习建模和 Flask Web 系统整合成一条完整链路。最终打开浏览器,就能看到重庆主城区二手房的价格分布、区域差异、户型结构、装修影响和在线估价结果。
这类项目适合放在数据分析、机器学习、Web 开发和毕业设计展示场景里。对于初学者,它能串起 Python 数据科学工具链;对于想做作品集的同学,它有比较完整的系统闭环;对于关注房价的人,它也能提供一个相对直观的市场观察窗口。
二、项目资料包里包含哪些内容
这次整理的资料不只是一篇说明文档,资源包里还包含了较完整的工程文件。能看到数据爬虫脚本、数据清洗 notebook、可视化分析 notebook、包含多模型对比的预测建模 notebook,以及分区域采集的 CSV 数据文件。
系统工程部分分成两个方向:一个是可视化大屏工程,里面有 Flask 后端、ECharts 前端脚本、静态样式、地图资源和大屏页面;另一个是完整 Web 系统工程,包含登录注册、用户管理、数据管理、可视化页面、在线预测页面等模块。资料包里还保留了模型评估图、特征重要性图、相关系数热力图和预测展示图,便于后续复现或二次修改。
从项目完整度来看,它已经具备“数据来源 - 数据治理 - 可视化洞察 - 模型预测 - Web 应用”的主线。后续想继续扩展也比较方便,例如增加地图 POI、轨道站点距离、商圈标签、学区标签,或者把模型解释部分补成 SHAP 分析。
三、数据采集:从列表页到详情页的两阶段抓取
数据采集阶段,我把目标放在重庆链家二手房公开房源页面。房源信息并不是一次性全部出现在列表页里,列表页主要展示标题、基础价格和详情链接,真正有价值的字段往往藏在详情页,比如建筑面积、套内面积、户型结构、楼层、建成年代、装修情况、建筑类型、电梯情况、产权属性、抵押信息、小区名称等。因此爬虫采用两阶段方式:先从列表页获取详情页链接,再逐个访问详情页解析完整字段。
请求层面主要使用 requests,页面解析使用 XPath。为了减少因为页面结构波动造成的中断,每个字段提取都加入了容错处理。如果某个房源缺少“建成时间”或“装修情况”,程序不会直接崩溃,而是把该字段记录为空值并继续抓取下一条。实际运行时,这种容错机制非常重要,因为房产平台上的房源信息并不总是完整统一。
反爬处理也做了专门设计。程序会监测响应内容中是否出现人机验证相关关键词,一旦识别到异常页面,就触发提醒并暂停等待,避免继续无效请求。采集过程使用随机间隔、分批追加写入和增量存储。每抓取一批数据就落到 CSV,避免程序中途退出导致前面采集的数据全部丢失。这个设计看起来简单,但对长时间采集任务非常实用。

图 2 数据采集、容错处理、SQL 聚合与模型处理过程展示
四、数据清洗:把杂乱房源变成可分析数据
原始房源数据拿到之后,并不能直接进入模型。二手房数据里常见的问题很多:重复房源、缺失字段、面积格式不统一、楼层表达不一致、建成年代缺失、装修字段混杂、部分异常豪宅价格过高,还有一些明显错误的挂牌价格。清洗阶段主要围绕“能不能稳定计算、能不能稳定入库、能不能稳定建模”这三个目标展开。
价格、面积、楼层、房龄这类字段会被转换为数值型特征。户型结构会拆解出室、厅、卫等信息;楼层字段会提取低楼层、中楼层、高楼层以及总楼层;建成年代转换为房龄;装修情况、朝向、建筑类型、产权所属、抵押信息等文本字段则通过编码方式转成模型可以识别的输入。清洗后的数据同时保存为 CSV 和 MySQL 表,CSV 方便人工查看,MySQL 方便后续按区域、户型、装修、楼层等维度做统计查询。
在数据库层面,我把常用分析结果提前通过 SQL 聚合成结果表。这样可视化页面加载时不用每次都从原始表里重新计算,页面响应会更稳定。对于数据展示类系统来说,这种“原始数据表 + 聚合结果表”的组织方式很实用,既保留明细,又能提高图表展示效率。
五、可视化分析:让房价规律一眼能看出来
可视化部分主要使用 Pyecharts 和 ECharts。单页图表负责细分问题,比如不同建筑类型的平均成交价、不同装修情况的均价趋势、不同建筑类型出现次数、不同楼层平均成交价、房龄区间分布、区域价格对比等。每张图都不是孤立展示,而是围绕“哪些因素影响房价”来组织。

图 3 单页可视化图表组合展示
从图表结果可以看到,重庆二手房价格并不是只由面积决定。区域位置、户型结构、装修情况、楼层、建成时间和小区品质都会产生影响。比如装修更好的房源通常会有更高的成交价,核心区价格明显高于部分远郊区域,楼层差异在某些样本中也会体现出价格变化。热力图进一步把地区和户型结构放在一起对比,能更直观地看到不同区域、不同户型之间的价格梯度。
大屏页面则把多个关键指标集中在一个界面中展示,包括样本总量、平均成交价、最高成交价、在售房源数量、成交趋势、地区对比、户型结构、相关性分析和价格区间分布。相比单页图表,大屏更适合汇报和演示,也更像一个完整的数据产品界面。

图 4 重庆二手房房价多维度分析大屏展示
六、机器学习预测:把市场规律变成在线估价能力
完成可视化分析之后,我继续把数据用于房价预测。建模部分没有只尝试一个算法,而是对比了线性回归、随机森林、XGBoost、LightGBM 和 CatBoost 等模型。线性回归可以作为基础参照,随机森林适合捕捉非线性关系,XGBoost 和 LightGBM 在结构化表格数据上表现稳定,CatBoost 对类别特征也比较友好。
特征工程是预测效果的关键。输入特征包括建筑面积、套内面积、房间总数、楼总高、所在楼层、建筑类型、建筑结构、房龄、是否配备电梯、所在区域、小区名称、户型结构、朝向、装修情况、产权信息、抵押信息等。部分高维类别字段经过编码或平滑处理后进入模型,避免直接把原始文本扔给模型导致维度混乱。
模型评估主要关注 R²、MSE、MAE 等指标。对比结果显示,集成学习模型明显优于传统线性模型,其中 XGBoost 在测试集上取得了较好的表现,R² 达到约 0.835。这个结果说明,重庆二手房价格与多个因素之间存在明显的非线性关系,树模型更容易捕捉复杂组合特征。在线预测模块使用训练好的模型,用户填写房屋特征后即可返回估算价格,适合做演示和应用落地。
七、Web 系统:把分析和预测装进一个可操作平台
系统集成部分采用 Flask 作为后端框架,前端使用 Layui、HTML、CSS 和 ECharts。功能上分为普通用户端和后台管理端。普通用户可以注册登录、查看可视化图表、进入大屏页面,也可以使用在线房价预测功能。预测表单把面积、房型、区域、楼层、装修、建筑结构、电梯等字段做成输入项或下拉框,降低了使用门槛。

图 5 用户登录与管理员入口展示(已脱敏)
后台管理端主要负责用户和数据维护。管理员可以查看用户列表,对账号进行编辑、删除或升级;也可以进入数据管理页面,对房源记录进行检索、新增、修改和删除。这部分功能让项目不只是一个静态展示页面,而是具备了基本的信息系统形态。对于毕业设计或项目展示来说,后台管理模块能明显提升完整度。

图 6 在线预测、数据管理与后台维护页面展示(已脱敏)
我在界面设计上尽量采用通用后台系统布局:顶部导航、左侧菜单、中间内容区,用户能快速找到图表、大屏、预测和管理入口。可视化页面以 iframe 或路由方式集成,既能复用 Pyecharts 生成的静态 HTML,也能接入 Flask 接口动态渲染的数据大屏。
八、这个项目适合怎么继续扩展
如果只是作为课程设计或毕业设计,这个版本已经能覆盖核心要求。但如果想做得更像真实产品,还可以继续往三个方向扩展。第一是补充地理空间特征,比如小区到轨道站、医院、学校、商圈、公园的距离,重庆这种山地城市尤其适合加入空间特征。第二是增强模型解释能力,比如加入特征重要性、局部解释和误差分析,让用户知道为什么系统给出这个估价。第三是加入时间更新机制,把定期采集、定期训练和模型版本管理串起来。
前端层面也可以继续优化。比如把大屏做成多主题切换,把单页图表加上筛选器,让用户按区域、年份、户型、装修情况交叉筛选;预测页面可以返回不仅是单点价格,还可以返回参考区间和相似房源列表。这样系统会从“能预测”进一步升级为“能辅助决策”。
完整资源适合继续拆分为代码包、数据库脚本、运行说明、演示截图和部署文档。需要复现时,只要准备 Python 环境、MySQL 数据库、依赖库和模型文件,就可以按数据导入、后端启动、前端访问的顺序运行。
十、几个值得保留的实现细节
第一个细节是把“采集稳定性”放在很靠前的位置。很多数据项目失败不是因为模型不会写,而是数据还没采完整程序就中断了。这里通过随机等待、异常关键词监测、字段级 try-except、分批 CSV 追加和断点续采,让采集任务具备了比较强的恢复能力。后续换成其他城市或其他房源平台时,这套思路仍然能继续复用。
第二个细节是可视化和建模没有割裂。图表阶段先观察区域、户型、装修、楼层、建筑类型和房龄等变量与成交价格的关系,再把这些变量整理成模型输入特征。这样做的好处是,模型不是盲目堆字段,而是带着业务理解去做特征工程,预测结果也更容易解释。
第三个细节是系统端保留了普通用户和管理员两个角色。普通用户关注图表浏览和价格预测,管理员关注数据维护和账号管理。角色拆分后,系统结构更接近真实应用场景,也方便后续扩展权限控制、日志记录、模型版本切换和数据更新任务。
十一、写在最后
这个项目给我的最大感受是,数据分析不是把图画出来就结束了。真正完整的项目,需要从数据来源开始考虑稳定性,从清洗阶段考虑可复现,从分析阶段考虑业务问题,从建模阶段考虑泛化能力,最后还要把结果放到一个普通用户能打开、能操作、能理解的系统里。
重庆二手房房价分析与预测系统虽然只是一个区域性案例,但它背后的技术路线可以迁移到很多场景:租房价格预测、商铺租金分析、二手车估价、商品定价分析、城市公共资源评估等。只要有结构化数据,就可以用类似的方式搭建“采集 - 清洗 - 分析 - 预测 - 展示”的闭环。
每文一语:
遇事不决需有思而行
更多推荐



所有评论(0)