【python案例】基于Python 爬虫的房地产数据可视化分析设计与实现

  • 研究背景与意义

房地产行业在我国属于支柱性产业,在我国社会经济发展中一直扮演着重要角色。房价问题,尤其是大中城市的房价问题,一直是政府、大众和众多研究人员关注的热点。如何科学地预测房价是房价问题的研究方向之一。随着互联网时代的来临,如今越来越多的民众选择通过网络获取房源信息并进行选房购房,如何尽可能多角度的呈现房源信息帮助民众选房成为一个值得深人研究的课题

为此,本研究使用爬虫技术获取温州二手房的房源信息,然后使用数据处理模块采用去重、分组、填补缺失值等处理方法,并根据处理的结果,找出各个变量之间的线性或者非线性关系,从而找出影响房价的因素。在房价数据抓取阶段使用Python爬虫技术,该方法获取的房价数据与传统从政府信息网站获取的房价数据相比更加丰富并具有时效性。在房价数据处理时使用pandas库和正则表达式对房源信息进行处理在利用热力图找出各个变量和房价直接的关系,从而找出影响房价的原因。在房价数据展示部分利用pyechart实现房源统计信息可视化展示,包括呈现房价排名、房价区间等等可视化图表,可以帮助消费者更加高效了解房源信息,更快更清晰地选房、购房。

  • 主要研究内容

本研究主要实现一个基于Python 爬虫的房地产数据可视化分析系统。此系统实现了beautifulsoup框架进行数据采集、pandas数据处理、MySQL进行数据存储、以及使用pyechart进行数据可视化等部分。主要研究内容分为以下五点:

1、基于beautifulsoup框架的房源信息采集,爬取目标数据包括基本信息、房屋属性、交易属性等

2、伪装请求头和使用ip代理、设置采集频率等方式对抗反爬虫

3、pandas库和正则表达式对房源数据进行处理。对爬取数据进行查数据一致性,处理无效值和缺失值等操作目的在于删除重复信息、纠正存在的错误,并提供数据一致性。

4、mySQL持久化存储数据。

5、Pyecharts数据可视化展示。可视化模块对数据进行可视化的呈现,使消费者更直观的观察各地区价格户型之间差异。

  • 论文结构
  • 引言;剖析研究背景和意义,说明研究的内容。
  • 开发技术;代码主要使用了python技术,beautifulsoup爬虫框架和myspl数据库,并对此做了介绍。
  • 需求分析;囊括需求功能、流程图进行了分析。
  • 功能需求设计;包括爬虫功能模块、数据处理模块、可视化模块和数据库进行详细设计。
  • 功能需求实现;对需求和功能实现和描述。
  • 功能测试。包括爬虫、和数据处理、数据库等模块进行测试
  • 总结心得;在论文最后结束章节总结了开发这个系统和撰写论文时候自己的总结、感想,包括致谢

二、开发技术

(一)Python语言

Python语言的编程风格与C语言非常接近,它继承了C++面向对象技术的核心,它面世之后发展迅速,非常流行,对高级C语言形成了很大的冲击。业内人士称之为“一次编译、到处执行”。当然python也有缺点,在每次执行编译后,字节码都需要消耗一定的时间,在某些程度上降低了性能。但是这并不影响python成为此次设计语言的选择。

表2-1 Python优势

序号

优势

1

Python面向对象技术,有四个特点:封装、继承、多态、抽象。

2

Python通用性强,在任何平台上,只要有Python虚拟机,Python代码都能运行

3

Python对内存的访问都必须通过对象的实例变量来实现,避免了指针中出现的错误

4

Python提供了多线程功能,利用编程实现同一时间同时工作的功能。

(二)MySQL数据库

因为MySQL是源代码对外开放的,所以任何人都可以通过相应的方法下载,并根据个性化需求进行修改。 由于MySQL的速度,可靠性和适应性,MySQL受到重视。

(三)beautifulsoup爬虫框架

是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。利用它我们不在需要编写正则表达式就可以方便的实现网页信息的提取。

MySQL数据库安装

本系统的数据使用的是MySQL,所以要将MySQL安装到指定目录,如果下载的是非安装的MySQL压缩包,直接解压到指定目录就可以了。然后点击C:\Program Files\MySQL\bin\winMySQLadmin.exe这个文件其中C:\Program Files\MySQL是MySQL安装目录。输入winMySQLadmin的初始用户、密码(注:这不是MySQL里的用户、密码)随便填不必在意,确定之后右下角任务的启动栏会出现一个红绿灯的图标,红灯亮代表服务停止,绿灯亮代表服务正常,左击这个图标->winnt->install the service 安装此服务,再左击这个图标->winnt->start the service 启动MySQL服务。

修改MySQL数据库的root密码。用cmd进入命令行模式输入如下命令:

cd C:\Program Files\MySQL\bin

MySQLadmin -u root -p password root

回车出现Enter password: ,这是要输入原密码. 刚安装时密码为空,所以直接回车,此时MySQL 中账号 root 的密码被改为 root 安装完毕。

系统运行环境

上述目标来分析本系统的硬件如下:

inter的处理器;

内存是 4G;

硬盘是120G;

操作系统是Window 10;

Pycharm社区版

MySQL8.0

Navicat12

三、需求分析

(一)技术可行性分析 

本系统开发选择python技术,python技术是一个完全面向对象的语言,为开发者提供了丰富的类库,大大减少了使用windows编程的难度,减少开发人员在设计算法上的难度,作为python技术开发 pycharmo更是一个必不可少的角色,它友好的界面,以及强大的功能,给程序开发人员带来了很多方便,加上环境简单,转移方便,无疑使此系统最佳的选择。

(二)经济可行性分析

Python是一款开源免费的脚本语言,Pycharm开发环境也有免费的社区版,而且MySQL也是一款优秀的免费的数据库。因此开发成本几乎可以忽略不计,因此经济可行性非常高。

(三)操作可行性分析

本系统的开发符合国家法律进行,也不会触犯到任何人,任何集体的法律权益。只要开发过程中遵纪守法就完全符合法律要求,并且使用计算机的用户都会具有一定的计算机基础,并且本系统操作方法简单,分析的均为计算机相关方面的人才,所以用户绝对能够熟练使用该系统,并且普通会使用计算机的人群也能使用。因此社会可行性很高。

需求功能分析

基于Python 爬虫的房地产数据可视化分析,要求实现数据爬取模块,数据清洗模块,数据可视化模块以及数据存储模块。实现对温州链家二手房网站房源数据采集、经过pandas库清洗处理后MySQL数据库中,结合Pyecharts组件,实现数据到可视化图表的转换,帮助消费者更加高效了解房源信息,更快更清晰地选房、购房。本研究的结构设计如图3-3-1所示

图3-3-1房地产数据可视化分析结构设计图

四、功能需求设计

需求功能模块设计

1.数据爬取模块

程序模拟浏览器访问温州链家二手房网获取响应信息,提取其中所有房源数据,包括房源名称、地址、单价、总价、面积、户型等,下面是数据爬取流程图,如图3-4-1所示。

图4-1-1 数据爬虫流程图

2.数据处理模块

爬虫提取其中所有房源数据后,经过正则表达式的清洗,将空格还有一些特殊符号去掉,在存到数据库当中,下面是数据处理流程图,如图3-5-1所示。

图4-1-1数据处理流程图

3.数据存储模块

爬虫运行之前,我们先将数据库和数据表建立,其中先通过mysql.py建立一个浙江房地产数据库和一张房地产数据表,爬虫提取清洗其中所有房源数据后,经过pymysql库,存到数据表当中,实现持久性存储。

  1. 数据可视化模块

要做房地产数据分析就要使用可视化操作,在keshihua.py中先通过pandas库处理数据,经过分组、转换数据类型、去重、求和之后,经过pyechart库和matloplit库的渲染,生成可视化图表,可视化流程图如图4-1-2所示。

图4-1-2可视化流程图

  • 数据库设计

1.数据库概念设计

概念模型是对现实中的问题出现的事物的进行描述,ER图是由实体及其关系构成的图,通过E-R图可以清楚地描述系统涉及到的实体之间的相互关系。实体图如图4-2所示:

图4-2 房地产数据实体图

  1. 数据库物理模型设计

表4-2:房地产数据表

字段名称

类型

长度

字段说明

主键

默认值

索引

int

主键

主键

title

varchar

标题

pisition

varchar

100

地址

tag

varchar

100

标签

followinfo

varchar

100

信息

vr

varchar

200

Vr看房

info

varchar

详细信息

总价

varchar

总价

单价(rmp)

varchar

单价

关注人数

varchar

关注人数

发布时间

varchar

发布时间

几室

varchar

几室

几厅

varchar

几厅

面积

varchar

面积

楼层

varchar

楼层

五、功能需求实现

(一)爬虫功能实现

1.确定url

通过网页发现温州链家二手房网页地址可以用下面的公式来表示:https:// + 城市名称拼音缩写 + .lianjia.com/ershoufang/pg +页码+/,根据此规律,就可以获得温州链家二手房的所有网页的网址。

2.添加伪装浏览器的请求头

获取了url之后,我们需要利用函数requests.get() 来得到该网页下html的内容。但是直接利用requests.get()函数获取html的内容会报错,服务器拒绝访问。大部分网站都有反爬虫的机制,但链家官网的反爬虫机制比较简单,只需要添加网页的headers从而模仿人为使用浏览器访问链家二手房网页。

  1. beautifulsoup解析

第二步只是简单获取了文本参数,还需要对html的内容进行解析。这个时候,就可以在程序中导入BeautifulSoup,作为解析html内容的工具。当然过程中发现中间掺杂了大量标签, 而结果只需要文字。就只能通过正则表达式等方式去除标签去标签提取文本内容的结果,结果如图5-1爬虫结果所示

5-1爬虫结果

(二)数据处理功能实现

获取了数据之后,需要首先对数据进行预处理,本论文中的预处理操作比较简单,利用pandas库,直接采用astype()包含对数据类型进行转化、dropna()清除空值、对异常的数据进行筛选和删除、groupy()数据列的拆分(将一列数据拆分为多列数据)等操作结果如图5-2 数据处理结果。

5-2 数据处理结果

(三)数据存储实现

在爬取数据后,就可以对数据进行存储,这里使用的是pymysql库进行创库建表操作,然后在利用pymysql的connect方法往数据表中实现insert操作,结果如图5-3 数据存储结果。

图5-3 数据存储结果

(四)数据可视化实现

1.户型特征分析

户型特征分析,是基于二手房的户型特征,对二手房的数量进行统计分析。通过户型特征分析,可以看到二手房中几室几厅的二手房最受欢迎。这里使用的是pyechart库的pie模块,对筛选的户型数据进行渲染,生成饼图。结果如图5-4-1 户型分析

图5-4-1 户型分析

2.区域特征分析

区域特征分析,是基于小区,对二手房进行统计,通过此操作,可以看到,哪个小区的二手房数量最多。这里使用的是pyechart库的bar模块,对筛选的小区数据进行渲染,生成柱形图。结果如图5-4-2 区域特征分析

图5-4-2 区域特征分析

3.面积特征分析

面积特征分析,是基于二手房面积,对二手房进行统计分析。将二手房面积划分不同的区间,同时,结合二手房价格,验证二手房面积越大,价格是否越昂贵。这里使用的是pyechart库的bar和scatter模块,对筛选的面积数据进行渲染,生成面积分布图和面积和总价散点图。结果如图5-4-3 面积分布图和图5-4-4面积总价散点图

图5-4-3 面积分布图

图5-4-4面积总价散点图

  1. 装修特征分析

装修特征分析,是基于二手房装修类型,结合二手房每平米售价进行分析。这里使用的是pyechart库的line模块,对筛选的装修特征数据进行渲染,生成装修特征分析图。结果如图5-4-5 装修特征分析图

图5-4-5 装修特征分析图

  1. 楼层分析

楼层分析是基于二手房的所在楼层,对不同楼层的二手房进行统计作图,更能直观的看到不同楼层二手房的数量。这里使用的是pyechart库的bar模块,对筛选的楼层数据进行渲染,生成楼层分析图。结果如图5-4-6楼层分析图

图5-4-6楼层分析图

  1. 热力图分析

通过前面的分析,要找出影响房价的因素有哪些,就要利用热力图展示各个变量和房价之间的关系,当然先要对可能影响房价的所有变量求相关系数,利用corr()方法求出,再利用seaborn中的heatmap函数绘制热力图。结果如下图5-6-1热力图

图5-6-1热力图

功能测试

(一)测试内容

基于Python爬虫的房地产信息可视化分析主要是房地产数据采集和处理,以及持久化存储,对数据进行可视化产生,所以我们主要测试系统是否能采集、数据处理是否成功,存储是否实现,可视化是否正常。所以选择开发人员手工执行测试用例的方式进行。以下是对基于Python爬虫的房地产信息可视化分析系统进行的详细说明。基于Python爬虫的房地产信息可视化分析系统测试用例,如表6-1所示。

表6-1 基于Python爬虫的房地产信息可视化分析系统测试用例

测试名称:基于Python爬虫的房地产信息可视化分析系统测试

测试目的:看可视化功能是否正确显示可视化图片,爬虫是否能正常爬取,数据库是否能政策存入数据。

前置测试:成功连接数据库,并可视化展示房地产可视化信息。

主要参与者:用户

功能模块

测试目的

测试步骤

预期结果

爬虫模块

尝试爬取前几页,观察是否能正常采集数据

输入测试页数6页

成功:运行界面出现了采集的房地产信息;错误:没有其他信息

数据处理

点击运行测试采集数据,观察是否能正常处理成我们想要的数据,包括去重、包括去空值等

点击运行spider.py和keshihus.py

成功:运行界面出现处理后的结果。

失败:数据不变

数据存储

运行mysql.py,查看是否能成功建表和存储测试数据

运行mysql.py

成功:数据库和数据表建立成功。

失败:数据表和数据库不能成功创建

数据可视化

选择测试数据,运行keshihua.py查看是否有可视化图片生成

运行keshihua.py

成功:可视化图表成功创建

失败:可视化图表不能显示

(二)测试结果

本系统的所有功能经过测试后已经完全满足要求。本系统满足了房地产数据信息爬取,房地产数据处理,房地产数据存储,房地产信息可视化图表展示。

、结论和总结

本次论文完成了对于基于Python爬虫的房地产信息可视化分析,基本上达到了任务要求,通过网络爬虫,根据需求获取海量房源数据,进行数据清洗,去重,入库,存表,数据可视化,把分析结果反馈给用户,并把数据结合数据库存储,以直观明了的可视化图表展示数据等功能,提高工作效率,提供令人满意的结果。

虽然本次设计已经完成,但是还有很多问题需要在今后的学习过程中解决。

其一,更充分的认识到Python的应用确实是当下较为容易入门和掌握的开发模式。可并没有能完全的掌握这种开发方式的优势,未能发挥其全部能力,甚至只是用的它的冰山一角。需要更深入的学习才能在今后的工作中有更好的发挥。

其二,在Python爬虫编程应用上必须通过进一步的研究来完善这一方面的知识,才能脱离现在只能对其进行浅层次的应用的现状,以实现更多更好的系统功能。


http://www.ppmy.cn/news/1503516.html

相关文章

Python标准库itertools模块

itertools.chain itertools.chain 是 Python 标准库 itertools 模块中的一个函数,用于将多个可迭代对象(如列表、元组、集合等)连接成一个单一的可迭代对象。这在需要在一个循环中处理多个序列时特别有用,而不需要先将它们连接成…

【.NET 8 实战--孢子记账--从单体到微服务】--编写服务端框架

框架是一个项目所必须的,是一组预先编写的代码库和工具,提供了一个可以复用的结构,以帮助开发者快速构建应用程。即使项目目前是一个单体应用,我们还是需要先设计框架的,但是我们不可能在项目的初期就编写出一个完美的…

45.二维数组练习:计算季度营业额和年总营业额

/* 某商场每个季度营业额如下,单位:万元 第一季度:22,66,44 第二季度:77,33,88 第三季度:25,45,65 第四季度:11,66,99 要求…

复制知乎文字内容

复制知乎文字内容 以edge浏览器为例: 以edge浏览器为例: 先点击F12(也就是鼠标右键->检查)再点击F1选择禁用Javascript 之后知乎的文字就可以正常复制了。 (注意:退出浏览器的时候记得把这一条恢复过…

Autoware.universe 高效学习系列

Autoware.universe 高效学习系列 1 说明2 正文 1 说明 2024 年上半年,我们使用 ubuntu22.04 ros2 humble 版本,系统学习了 ros2 ,并总结输出了 ROS2 高效学习系列。由于本人的行业属性,在完成 ros2 中间件的学习后,需…

【C++】实验十四

题目: 1、编写程序,输入a,b,c,检查a,b,c是否满足以下条件,如不满足,由cerr输出有关错误信息。 2、从键盘输入一批数值。要求保留3位小数,在输出时上下行小数…

健康小贴士丨中考考生怎么吃得好?

文章目录 引言三餐最佳的进食时间引言 中考正值初夏,气温急剧升高,食物易滋生细菌,发生食物中毒的风险也随之增加,医生建议 选择新鲜的食材,煮熟煮透,现吃现做,尽量不食用剩饭剩菜;不在路边露天摊点、不到无证和食品安全状况差的餐馆用餐;尽量减少在外就餐和点外卖的…

Netty必知必会(一)——零拷贝

一、什么是零拷贝?(OS层面、用户态和内核态) 9.1 什么是零拷贝? | 小林coding (xiaolincoding.com) 1.传统的文件传输 2.mmap write 实现零拷贝 mmap() 系统调用函数会直接把内核缓冲区里的数据「映射」到用户空间。 3.sendfi…

GPT-4o mini一手测评:懂得不多,但答得极快

在性能方面,GPT-4o mini 在 MMLU 上的得分为 82%,在 LMSYS 排行榜的聊天方面分数优于 GPT-4。 OpenAI 突然上线新模型 GPT-4o mini, 声称要全面取代 GPT-3.5 Turbo。 在性能方面,GPT-4o mini 在 MMLU 上的得分为 82%,在 LMSYS 排行榜的聊天方面分数优于 GPT-4。 在价格…

IT运维管理与ITSM:理论与实践

IT运维管理和IT服务管理(ITSM)在现代企业信息化过程中占据着举足轻重的地位。它们不仅是确保IT系统稳定运行和业务连续性的关键,还是推动企业数字化转型、提升竞争力的重要力量。本文将结合《IT运维管理和ITSM》文档的内容,深入探…

java的对象向上转型

对象向上转型,父类对象就可以调用子类重写父类的方法,这样当父类对象需要添加新的功能时,只需要添加一个子类,在子类中对父类的功能进行扩展,而不需要更改父类代码 向上转型,格式如下 父类类型 父类对象子…

二分查找概述

文章目录 二分法第一种写法二分法第二种写法题型查找某个值 target查找第一个大于(大于等于) target 的值查找第一个小于(小于等于) target 的值 条件: 只能对已经排序好的列表进行查找。 需求: 对搜索时间…

springboot校园商店配送系统-计算机毕业设计源码68448

摘要 本文详细阐述了基于Spring Boot框架的校园商店配送系统的设计与实现过程。该系统针对校园内的用户需求,整合了用户注册与登录、商品浏览与购买、订单管理、配送追踪、用户反馈收集以及后台管理等功能,为校园内的普通用户、商家、配送员和管理员提供…

【综合架构】总篇

设备信息 172.16.1.5 lb01 172.16.1.6 lb02 172.16.1.7 web01 172.16.1.8 web02 172.16.1.9 web03 172.16.1.10 web04 172.16.1.31 nfs01 172.16.1.41 backup 172.16.1.51 db01 172.16.1.61 m01模板机系统安装 http://t.csdnimg.cn/czgBb 模板机基础优化 http://t.csdnimg.…

从零开始的MicroPython(一) 软件安装及环境搭建

文章目录 MicroPython简介下载安装 ESP32(NodeMCU-32S)简介引脚注意事项 CH340下载安装 Thonny IDE下载 Python简介下载环境配置 MicroPython 简介 ​ MicroPython 是 Python 3 编程语言的精简高效的实现 其中包括 Python 标准库的一小部分,并且是经过优化&#x…

mysql case用法

根据状态统计不同的数值 SELECT CASE WHEN F_Status 01 THEN 空闲WHEN F_Status 02 THEN 出车END AS NAME ,COUNT(*) AS VALUE FROM wform_VehicleInfo a GROUP BY F_Status;

CRMEB-众邦科技 使用笔记

1.启动项目报错 Unable to load authentication plugin ‘caching_sha2_password’. 参考&#xff1a;http://t.csdnimg.cn/5EqaE 解决办法&#xff1a;升级mysql驱动 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</ar…

Python酷库之旅-第三方库Pandas(058)

目录 一、用法精讲 221、pandas.Series.interpolate方法 221-1、语法 221-2、参数 221-3、功能 221-4、返回值 221-5、说明 221-6、用法 221-6-1、数据准备 221-6-2、代码示例 221-6-3、结果输出 222、pandas.Series.isna方法 222-1、语法 222-2、参数 222-3、功…

unity2D游戏开发18导出游戏

点击File|build Settings 设置安装环境后&#xff0c;点击Build 选中文件夹 结果 运行 设置退出操作 在RPGGameManager类中加入代码 private void Update(){if (Input.GetKey(KeyCode.Escape)) { Application.Quit();}}

memory入门案例演示

from langchain.memory import ChatMessageHistory# 1.实例对象 history ChatMessageHistory() # 2. 添加历史信息 history.add_user_message("在吗") history.add_ai_message("有什么事吗&#xff1f;")print(history.messages)