👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉公众号👈:测试开发自动化【获取源码+商业合作】
👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。
【python】Python二手房住房数据抓取可视化(源码+数据集+论文)【独一无二】
目录
- 【python】Python二手房住房数据抓取可视化(源码+数据集+论文)【独一无二】
- 一、设计要求
- 爬取部分
- 可视化部分
- 二、设计思路
- 1. 设置请求参数
- 2. 发送请求并获取网页内容
- 3. 提取数据
- 4. 保存数据到 CSV 文件
- 三、可视化分析
- 户型与总价的柱状图分析
- 朝向的分布饼状图分析
- 面积与单价的散点图分析
一、设计要求
爬取部分
本项目旨在从安居客网站上抓取郑州东新区的房产信息,主要包括以下字段:标题、户型、面积、朝向、楼层、建造时间、小区名称、小区地址、总价和单价。为了实现这一目标,首先使用 requests
库发送 HTTP GET 请求,获取目标网页的 HTML 内容。为了模拟浏览器访问,需设置合适的请求头信息。然后解析 HTML 内容,构建 XPath 查询对象。通过循环遍历每个房产信息块,使用 XPath 表达式提取各个字段的内容,并将结果存储在列表中。最后,使用 csv
模块将提取的数据写入 CSV 文件,方便后续的数据分析和处理。
可视化部分
数据爬取完成后,需对数据进行可视化分析,以更好地理解和展示房产市场的特点和趋势。使用 pandas
库读取 CSV 文件中的数据,并使用 matplotlib
库进行可视化操作。首先,绘制总价和单价的箱线图,通过箱线图展示房产价格的分布情况。其次,绘制面积与总价的折线图,展示房产面积与总价之间的关系。接着,绘制户型与总价的柱状图,分析不同户型的平均价格分布。再者,绘制朝向的分布饼状图,展示不同朝向房产的比例。最后,绘制面积与单价的散点图,分析房产面积与单价之间的关系。所有图表均需设置合适的标题和标签,以便清晰地传达数据分析结果。通过这些可视化图表,可以直观地展示房产市场的各种特征,为进一步的市场分析和决策提供数据支持。
二、设计思路
-
设置请求参数
- 定义目标网页的 URL 和请求头信息,伪装成浏览器进行访问。
-
发送请求并获取网页内容
- 使用
requests
库发送 HTTP GET 请求,获取目标网页的 HTML 内容。
- 使用
-
解析网页内容
- 使用
lxml
库的etree
模块解析 HTML 内容,构建 XPath 查询对象。
- 使用
-
提取数据
- 定义一个空的列表
message
用于存储提取的房产信息。 - 使用循环和 XPath 查询提取每个房产的详细信息,包括标题、户型、面积、朝向、楼层、建造时间、小区名称、小区地址、总价和单价。
- 每个房产的信息被追加到
message
列表中。
- 定义一个空的列表
-
保存数据到 CSV 文件
- 使用
csv
模块将提取的数据写入到 CSV 文件中,方便后续的数据分析和处理。
- 使用
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 安居客 ” 获取,拿来即用,只回复文字哦。👈👈👈
1. 设置请求参数
import csv
import requests
from lxml import etree
# 代码略(至少十行)...
# 代码略(至少十行)...
分析:
- 导入必要的库:
csv
用于数据存储,requests
用于发送 HTTP 请求,lxml.etree
用于解析 HTML 内容。 - 定义目标网页的 URL 和请求头信息,使用请求头信息来模拟浏览器访问 。
2. 发送请求并获取网页内容
response = requests.get(url, headers=headers)
etree = etree.HTML(response.text)
分析:
- 使用
requests.get
方法发送 GET 请求,获取网页内容。 - 使用
etree.HTML
方法将网页内容解析为 HTML 文档对象,便于后续使用 XPath 进行数据提取。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 安居客 ” 获取,拿来即用,只回复文字哦。👈👈👈
3. 提取数据
message = [["标题", "户型", '面积', '朝向', '楼层', '建造时间', '小区名称', '小区地址', '总价', '单价']]
for i in range(1, 84):
# 代码略(至少十行)...
# 代码略(至少十行)...
message.append([room_title, room_type, room_area, room_forward, room_fnum, room_time, room_name, room_addr, total_price, single_price])
分析:
- 初始化
message
列表,包含数据列的标题。 - 使用 for 循环遍历每个房产信息块,范围为 1 到 83(假设总共有 83 个房产信息块)。
- 使用 XPath 表达式提取各个字段(如标题、户型、面积等)的内容,并将结果转换为字符串,去除多余的空格和换行符。
- 提取的每个字段依次打印出来(用于调试),然后将每个房产信息追加到
message
列表中。
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 安居客 ” 获取,拿来即用,只回复文字哦。👈👈👈
4. 保存数据到 CSV 文件
with open("data.csv", encoding="utf-8", mode="w", newline="") as f:
row = csv.writer(f)
row.writerows(message)
分析:
- 使用
with open
语句以写模式打开 CSV 文件data.csv
。 - 使用
csv.writer
创建 CSV 写入对象row
。 - 使用
writerows
方法将message
列表中的所有数据写入 CSV 文件。
总结:
这段代码的主要目的是从指定的网页中抓取房产信息并将其保存到 CSV 文件中,以便后续进行数据分析。具体步骤包括发送请求获取网页内容、解析 HTML 提取数据、存储数据到 CSV 文件。这种方法可以有效地自动化数据收集过程,为数据分析提供原始数据来源。
三、可视化分析
大大节省了人工收集的时间和成本,提高了数据的准确性和时效性。通过将数据存储在CSV文件和MySQL数据库中,不仅便于本地备份,还能支持更复杂的数据查询和分析。利用pandas和matplotlib进行数据分析和可视化,使数据的分布情况能够直观地展示,为用户提供有力的决策支持。
本程序可以广泛应用于房地产市场分析、商品价格监控、新闻舆情分析等领域,展示了现代数据处理技术在实际业务中的巨大潜力。通过自动化数据采集与分析,本程序能够为各类业务场景提供强有力的技术支持和数据分析能力,为用户带来更高效、更精准的服务体验
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 安居客 ” 获取,拿来即用,只回复文字哦。👈👈👈
户型与总价的柱状图分析
户型与总价的柱状图展示了不同户型房屋的平均总价。通过对比不同户型的平均总价,可以了解不同户型在市场上的价格定位。从图中可以看到,3室2厅2卫的房屋平均总价明显高于3室2厅1卫的房屋。这表明,户型在一定程度上决定了房屋的市场价值,带有更多房间和卫生间的户型一般价格较高。柱状图的高度代表了不同户型的平均总价,柱子的颜色和长度帮助我们直观地对比不同户型的价格差异。这种可视化方式非常适合用于比较分类数据的平均值,可以清晰地展示不同类别(户型)之间的差异,从而帮助我们做出更明智的购房决策或市场分析。
# 户型与总价的柱状图
plt.subplot(2, 2, 2)
df.groupby('户型')['总价'].mean().plot(kind='bar', color='skyblue')
plt.title('户型与总价的柱状图')
plt.xlabel('户型')
plt.ylabel('平均总价 (万元)')
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 安居客 ” 获取,拿来即用,只回复文字哦。👈👈👈
朝向的分布饼状图分析
朝向的分布饼状图展示了各房屋朝向在总数据中的占比。通过这张图,可以直观了解不同朝向房屋的分布情况。图中,不同颜色的扇形代表不同朝向的房屋,扇形的面积表示该朝向房屋在总数据中的比例。从图中可以看出,南向和南北向的房屋占据了大部分市场份额,说明这些朝向的房屋更受欢迎。南向房屋由于光照条件好,通常被认为更适合居住,而南北通透的户型则兼具通风和采光的优点,因此这两种朝向的房屋比例较高。饼状图的好处在于能够直观地展示数据的组成部分及其比例,适合用于展示分类数据的分布情况。这种图表非常适合用于市场调查、消费者偏好分析等领域,帮助我们快速了解市场分布和消费者喜好。
面积与单价的散点图分析
面积与单价的散点图展示了各房屋面积与单价之间的关系。每个点代表一套房屋,X轴表示房屋的面积,Y轴表示房屋的单价。通过这张图,可以观察面积与单价之间是否存在某种趋势或模式。从图中可以看出,面积较小的房屋单价较高,而面积较大的房屋单价相对较低,这表明在同一区域内,小户型房屋的单价普遍较高。这可能是因为小户型房屋总价较低,更容易被首次购房者或投资者接受,因此市场需求较大,导致单价较高。而大户型房屋由于总价较高,购房者相对较少,单价也相对较低。散点图的好处在于能够展示两个变量之间的关系及其分布情况,通过观察散点的分布,可以识别出数据中的异常点或趋势。这种图表非常适合用于探索性数据分析,帮助我们发现数据中的潜在模式或关系。
# 面积与单价的散点图
plt.subplot(2, 2, 4)
plt.scatter(df['面积'], df['单价'], color='purple')
plt.title('面积与单价的散点图')
plt.xlabel('面积 (㎡)')
plt.ylabel('单价 (元/㎡)')
👉👉👉 源码获取 关注【测试开发自动化】公众号,回复 “ 安居客 ” 获取,拿来即用,只回复文字哦。👈👈👈