Python——租房信息数据分析

Python——线性回归模型

数据源:在百度网盘喏,自行下载。
在这里插入图片描述
链接:https://pan.baidu.com/s/1bJbwmBza9KAmWMmXi4se7A
提取码:ru68

1 题目:租房信息数据分析

“data”文件夹中有一文件“house_info.csv”保存了租房信息数据,以该文件作为数据源,按以下要求进行分析:

  1. 导入数据并对数据进行预处理;
  2. 分析各行政区的房源分布情况,选择合适的图表对各行政区的房源分布情况进行可视化,并总结分析结果;
  3. 以小区为单位,分析各小区的房源数量,选择合适的图表对小区房源数量TOP10进行可视化,并总结分析结果;
  4. 对整个租房数据的户型进行分析,统计户型TOP10,并选择合适的图表进行可视化,并总结分析结果;
  5. 分析租房数据的租金分布情况,选择合适的图表进行可视化,并总结分析结果。

2. 导入数据

import pandas as pd
import numpy as np
detail = pd.read_csv(r".\house_info.csv", encoding="utf-8")
# print(detail.head())
print("清洗前缺失值的数目:\n",detail.isnull().sum())
# 删除detail的缺失值
d1 = detail.dropna(axis=0, how="any") # 以d1 为数据源
# print(d1)
print("清洗后缺失值的数目:\n",d1.isnull().sum())

# 从前向后查找和判断是否有重复值
print("重复值:",d1.duplicated().sum())

在这里插入图片描述

3. 各行政区房源分布

选用合适的图表,以行政区为单位,对比分析各行政区房源数量分布情况,并对可视化结果进行简单的总结。

area = set(d1["位置1"]) # 统计多少个行政区
print(area)
# 创建一个DataFrame 对象,筛选需要数据{行政区,房源数量}
d2 = pd.DataFrame({'行政区':d1["位置1"].unique(),'房源数量':[0]*len(area)})
print(d2)
print('-'*20)

# groupby统计房源数量,并从小到大排序
groupby_area = d1.groupby(by="位置1").count()  
print(groupby_area)
d2["房源数量"] = groupby_area.values
d2 = d2.sort_values(by=["房源数量"],ascending=True)
print(d2)

在这里插入图片描述

# 绘图
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParams['axes.unicode_minus']=False

X = d2["行政区"]
print(X)
Y = d2["房源数量"]
print(Y)
plt.figure(figsize=(8,6),dpi=300)
plt.bar(X, Y, width=0.5, linewidth=2)
for i,j in zip(X, Y):
    plt.text(i, j, "%d" % j, fontsize=16)
plt.xlabel("行政区")
plt.ylabel("房源数量")
plt.title("各行政区房源分布图")
plt.show()

在这里插入图片描述
在这里插入图片描述
从数据可以看出:从行政区的福田区到龙岗区,房源的数量是逐渐增加的。

4. 小区房源数量TOP10

选用合适的图表,以居住小区为单位,对比分析各小区房源数量分布情况,并对TOP10进行可视化,对分析结果进行简单的总结。

area_small = set(d1["小区"]) # 统计多少个小区
# print(area_small)

# 创建一个DataFrame 对象,筛选需要数据{小区,小区房源数量}
d_samll = pd.DataFrame({"小区":d1["小区"].unique(),"小区房源数量":[0]*len(area_small) })
print(d_samll)
print('-'*40)

# groupby统计小区房源数量,并从大到小排序
groupby_area = d1.groupby(by="小区").count()  
# print(groupby_area)
d_samll["小区房源数量"] = groupby_area.values
d_samll = d_samll.sort_values(by=["小区房源数量"],ascending=False)
print(d_samll)
d_top10 =  d_samll.head(10) # 取前十
print("小区房源数量TOP10是:\n",d_top10)

在这里插入图片描述

# 绘图
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParams['axes.unicode_minus']=False

X = d_top10["小区"]
print(X)
Y = d_top10["小区房源数量"]
print(Y)
plt.figure(figsize=(8,6),dpi=300)
plt.bar(X, Y, width=0.5, linewidth=2)
for i,j in zip(X, Y):
    plt.text(i, j, "%d" % j, fontsize=12)
plt.xlabel("小区")
plt.ylabel("小区房源数量")
plt.title("小区房源数量TOP10")
plt.xticks(rotation=335)
plt.savefig(r"C:\Users\锦樽\Desktop\小区房源数量TOP10.png",dpi=400)
plt.show()

在这里插入图片描述
在这里插入图片描述
从图可知,小区的房源数量从 丰湖花园到 名仕阁逐渐递减,而且丰湖花园小区房源是其他小区的两倍左右,丰湖花园的房源很多,在该竞争领域很大优势。

5. 户型TOP10分布

选用合适的图表,分析户型分布情况,并对TOP10进行可视化,对分析结果进行简单的总结。

house_type = set(d1["户型"]) # 统计多少个户型
print(house_type)

# 创建一个DataFrame 对象,筛选需要数据{户型,户型数量}
d_house = pd.DataFrame({"户型":d1["户型"].unique(),"户型数量":[0]*len(house_type) })
print(d_house)
print('-'*40)

# groupby统计户型数量,并从大到小排序
groupby_area = d1.groupby(by="户型").count()  
print(groupby_area)
d_house["户型数量"] = groupby_area.values
d_house = d_house.sort_values(by=["户型数量"],ascending=False)
print(d_house)
d_top10 =  d_house.head(10) # 取前十
print("户型数量TOP10是:\n",d_top10)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 绘图
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParams['axes.unicode_minus']=False

X = d_top10["户型"]
# print(X)
Y = d_top10["户型数量"]
# print(Y)
plt.figure(figsize=(12,8),dpi=300)
# plt.bar(X, Y, width=0.5, linewidth=2)
b = plt.barh(X, Y, height=0.6, linewidth=1)
for i in b:
    plt.text(i.get_width(),i.get_y()+0.2,i.get_width() )
plt.ylabel("户型")
plt.xlabel("户型数量")
plt.title("户型数量TOP10")
plt.savefig(r"C:\Users\锦樽\Desktop\户型数量TOP10.png",dpi=400)
plt.show()

在这里插入图片描述
从图可知,众多户型中 5室1卫户型数量远远超过其他户型,可以看出这个户型是很多购买者喜欢的。

6. 租金分布

选用合适的图表,分析租金的分布情况,对分析结果进行简单的总结。

house_rent = set(d1["价格"]) # 统计多少个价格
# print(house_rent)

# 创建一个DataFrame 对象,筛选需要数据{价格,价格数量}
d_rent = pd.DataFrame({"租金":d1["价格"].unique(),"价格数量":[0]*len(house_rent) })
print(d_rent)
print('-'*40)

# groupby统计价格数量,并从大到小排序
groupby_area = d1.groupby(by="价格").count()  
print(groupby_area)
d_rent["价格数量"] = groupby_area.values
d_rent = d_rent.sort_values(by=["价格数量"],ascending=False)
print(d_rent)
d_top10 =  d_rent.head(10) # 取前十
print("价格数量TOP10是:\n",d_top10)

在这里插入图片描述

# 对每个行政区,进行租金价格平均分析
# 新建一个DataFrame对象,设置房租总金额和总面积初始值为0
print(area)
avg_rent = pd.DataFrame({'行政区':d1["位置1"].unique(),'房租总金额':[0]*len(area),'总面积':[0]*len(area) })
print(avg_rent)
print('-'*40)

# 求总金额和总面积
sum_price = d1["价格"].groupby(d1["位置1"]).sum()
sum_area = d1["面积"].groupby(d1["位置1"]).sum()
avg_rent["房租总金额"] = sum_price.values
avg_rent["总面积"] = sum_area.values
print(avg_rent) 

# 计算各区域每平方米房租价格,并保留2位小数
avg_rent['每平方米租金(元)'] = round(avg_rent['房租总金额']/avg_rent['总面积'],2)
print(avg_rent)
print("*-"*25)
# 合并需要的数据
rent_merge = pd.merge(d2,avg_rent)
rent_merge
# print(rent_merge)

在这里插入图片描述

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
from matplotlib.font_manager import FontProperties
matplotlib.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParams['axes.unicode_minus']=False
num = rent_merge['房源数量']                  # 数量
price = rent_merge['每平方米租金(元)']    # 价格

X = rent_merge["行政区"]
print(X)
# Y = rent_merge["房源数量"]
# print(Y)
fig = plt.figure(figsize=(8,6))
axl = fig.add_subplot(111)
axl.plot(X, price,'or-',label = '价格')
axl.set_ylim([0,210])
axl.set_ylabel('价格')
for i,j in zip(X, price):
    plt.text(i, j, "%d" % j, fontsize=16)
plt.title("租金分布情况")
ax2 = axl.twinx()
plt.bar(X,num,width=0.4,color = 'green',label = '数量', linewidth=2)
ax2.set_ylabel('数量')
ax2.set_ylim([0,2000])
for i,j in zip(X, num):
    plt.text(i, j, "%d" % j, fontsize=16)
plt.title("租金分布情况")
plt.savefig(r"C:\Users\锦樽\Desktop\租金分布情况图.png",dpi=400)
plt.show()

在这里插入图片描述
从折线图可以看出,罗湖区与南山区 房源数量比较多,但是租金价格平均是高的,龙岗区的房源数量多而且租金相比其他行政区是价廉的,适合毕业生、求职者去租房。

  • 17
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 安居客出租房(武汉为例)爬虫+数据分析+可视化 这个爬虫是我前段时间在淘宝上做单子的时候遇见的一个客户需求。本来以为就是一个简单的爬虫项目。但后面客户加了数据清洗和数据分析的要求。而后又加了要详细代码解释的需求等等。直到最后客户坦白说这是他们大专的毕设.......但是这个单子坐下来只有200左右,我想了一下,感觉好亏啊。在淘宝上随便找一个做毕设的都要好多钱的,而且客户本身的代码能力、数学、逻辑能力都很差,导致我每行都给注释以及看不懂,在我交付代码后又纠缠了我一个多礼拜。反正总体做下来的感觉就是烦躁。头一次感觉到了客户需求变更带来的巨大麻烦。 总之这是一次不是很愉快的爬虫经历。但是作为我写爬虫以来注释最详细的一次,以及第一次真正使用像matplotlib这种数据分析库的代码,我认为还是有必要分享出来给大家当个参考的(PS:大佬轻拍~)。爬虫本身几乎没有什么难度,写的也比较乱,敬请见谅。 **功能** 爬取安居客上的出租房信息(武汉地区的),并通过爬取的数据进行数据清洗以及数据分析。给出四个不同层面的可视化图。最终结果如下图所示: ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/1.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/2.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/3.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/4.png) **环境** 1. Windows 10 2. python3.7 **使用方法** 首先声明该爬虫由于是特定情况下写的,所以本身的通用性特别差,仅可以对安居客网站上的武汉的出租房信息进行爬取,且需要自己手动更新cookie。同时在对数据进行分析及可视化的时候由于也是特别针对武汉出租房的进行的,所以针对性也比较强。如果别的需求需要自己进行更改。 1. 访问[安居客网址](https://wuhan.anjuke.com/),获取cookie。 > tip:获取cookie的方法可根据[此链接](https://jingyan.baidu.com/article/5d368d1ea6c6e33f60c057ef.html) 2. 在项目中找到`spider.py`的文件,将第12行的cookie换成你自己的cookie。 3. 运行`spider.py`,获取房源信息。运行后应会产生一个`武汉出租房源情况.csv`的文件。此文件为我们从安居客上爬取的房源信息,其中包含`房屋租住链接、房屋描述、房屋地址、房屋详情(户型)以及经纪人、房屋价格`五个属性。 4. 在获取了数据之后我们运行`matplotlib.py`文件。进行数据清洗,分析,可视化。运行后即可获得**功能**中展示四个图片。 **技术栈** 1. request 2. parsel 3. pandas 4. matplotlib **进步(相比之前)** 此次爬虫相比之前的技术上可以说有减无增。但其中注释相当详细,可谓是每行代码都有注释。所以对于初学者应该有一些用处。同时使用matplotlib进行了数据分析可视化等。对于数据处理的代码的注释也是几乎每行都有注释的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐樽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值