当前位置:   article > 正文

链家网北京市租房数据分析(二)——基于python的数据可视化_python爬取链家租房图片信息

python爬取链家租房图片信息

本次分析的数据为爬取链家网租房首页的3000余条整租房源数据。数据量较小,分析结果难免存在偏差,本分析报告仅作为实战项目展示。本报告中所描述的平均租金指单套房源租金的中位数

数据源可至百度网盘提取,永久有效。
链接:https://pan.baidu.com/s/1EqfsnGlb63HeUlKlQfGEgg
提取码:i20b

本项目分为两部分,数据清洗、可视化探索。本文为第二部分,第一部分可前往查看。
链家网北京市租房数据分析python实战——数据清洗

以下是可视化探索的正文内容,大部分图是jupyter截图或导出图片。

导入数据

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
plt.style.use('ggplot') 

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

data = pd.read_csv('data_cleaned.csv', index_col=0)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
data['区商圈'] = data['行政区'] + ' ' + data['商圈'] # 增加一列区商圈

  • 1
  • 2

数据概览

data.info()
  • 1

在这里插入图片描述

data.describe()
  • 1

在这里插入图片描述

data[data['租金']==data['租金'].max()]
data[data['租金']==data['租金'].min()]
data[data['单价']==data['单价'].max()]
data[data['单价']==data['单价'].min()]
  • 1
  • 2
  • 3
  • 4

爬取的数据源,经过清洗和整理,得到2934条整租房源信息。

面积最大为156平方米,最小为8平方米。 月租金最高为6800元/套,有3套房源,分别位于东城区、朝阳区;最低为460元/套,是位于昌平区鼓楼大街的一处地下室。 单套房源的月租金单价最高为437.5元/平方米,位于海淀区苏州桥,面积只有8平方米;最低为14.4元/平方米,是位于房山区良乡的一处地下室。

1. 房源租金

本节是对得到的2934套房源数据进行分析,得出结论。

北京市整体

从箱型分布看出,全市整租房源的租金主要分布在2500-5500元/套左右,平均租金为3850元/套。

plt.figure(figsize=(6, 10))
ax = plt.subplot()

sns.boxenplot(y='租金', data=data)

ax.set_ylabel('租金(元/月)', fontsize=15)
ax.set_title('房源租金分布', fontsize=18)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述

不同区域

把从区域租金按照价格高低分成三个不同的级别

第一级别:海淀区、朝阳区、西城区、东城区,平均租金在4500-5000元/套。

第二级别:亦庄开发区、丰台区、石景山区,平均租金在3500-4000元/套。

第三级别:房山区、通州区、顺义区、门头沟区、昌平区、大兴区、密云区,平均租金在2400-3000元/套。

plt.figure(figsize=(14,10))
ax = plt.subplot()

sns.boxenplot(x='行政区', y='租金', data=data)
ax.set_xlabel('区域', fontsize=18)
ax.set_ylabel('租金(元/月)', fontsize=18)
ax.set_xticklabels(ax.get_xticklabels(), rotation=25)
ax.tick_params(labelsize=16)
ax.set_title('不同区域租金分布', fontsize=20)

plt.savefig('不同区域租金分布.png')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

2. 房源数量

从租房客户群的选择倾向考虑,首要关注的几个因素是房屋的租金、位置(区域+商圈)、户型、面积等。

一般租房的心路历程:
依据工作地点、通勤时间、熟悉程度,会大致划分出一片意向租房区。
然后通过中介、论坛等途径来找房源,在权衡租金、位置、户型、面积等因素后,对待选房源的朝向、装修、楼层、是否有电梯等特征,及水电燃气采暖性质等基础配套进行对比。
最终选择出一套合适的房源。

本节对2934套房源数据进行概览,找出要切入的点,在下一节深入分析。

2.1 首要因素

1. 在北京市房屋租赁市场中,整租房源数量最多的行政区是朝阳区,排名前3的商圈分别是顺义区顺义城、房山区良乡、朝阳区定福庄。

朝阳区面积470.8平方千米,在城六区中居首位,分析结果较为准确。 下一节主要分析朝阳区的商圈价格,看哪一片的房源又多又便宜。

根据一般认知,房源数量的第二位应该是海淀区,可能是因为数据源仅为链家租房首页的3000余条数据,结果可能与实际存在一些偏差。对此不进行深入探讨。

2. 主要户型是2室1厅1卫,1室1厅1卫,1室0厅1卫。多数房源的面积是在30-60平方米这个区间内。

1室的户型还是有很大的市场,也是很多单身人士的首选。所以我想关注这一户型房源的位置,配套,主要是价格。

1室1厅1卫的面积多在30平方米,1室0厅1卫价格也是2000-4000不等。 2室1厅1卫、2室2厅1卫的区别在于餐厅、客厅的区别。

fig, axes = plt.subplots(2, 2, figsize=(20, 18)) # 绘制2*2多子图
fig.subplots_adjust(hspace=0.5, wspace=0.1) # 设置子图的间距

area = data['行政区'].value_counts()
# area.plot.bar(ax=axes[0, 0], rot=50)
sns.barplot(area.index, area, palette='Blues_d', ax=axes[0, 0])
axes[0, 0].tick_params(labelsize=15) # 设置轴刻度文字大小,两个轴同时设置
axes[0, 0].set_xticklabels(axes[0, 0].get_xticklabels(), rotation=35) # 设置轴刻度文字方向,旋转角度
axes[0, 0].set_xlabel('区域', fontsize=18)
axes[0, 0].set_ylabel('房源数量', fontsize=18)

trade_top20 = data['区商圈'].value_counts()[:20]
sns.barplot(trade_top20.index, trade_top20, palette='Blues_d', ax=axes[0, 1])
axes[0, 1].tick_params(labelsize=15) 
axes[0, 1].set_xticklabels(axes[0, 1].get_xticklabels(), rotation=70) 
axes[0, 1].set_xlabel('Top20商圈', fontsize=18)
axes[0, 1].set_ylabel('')

type_top10 = data['户型'].value_counts()[:10]
sns.barplot(type_top10.index, type_top10, palette='Blues_d', ax=axes[1, 0])
axes[1, 0].tick_params(labelsize=15)
axes[1, 0].set_xticklabels(axes[1, 0].get_xticklabels(), rotation=30)
axes[1, 0].set_xlabel('Top10户型', fontsize=18)
axes[1, 0].set_ylabel('房源数量', fontsize=18)

# 现在一般认知中,90㎡以下是小户型,zhidao90-144平米的就是中户型,144以上属于大户型。根据对业务理解,划分面积区间。
bins = [7, 15, 30, 60, 90, 125, 156] 
size = pd.cut(data['面积'], bins).value_counts()
sns.barplot(size.index, size, palette='Blues_d', ax=axes[1, 1])
axes[1, 1].tick_params(labelsize=15)
axes[1, 1].set_xticklabels(axes[1, 1].get_xticklabels(), rotation=0)
axes[1, 1].set_xlabel('面积区间', fontsize=18)
axes[1, 1].set_ylabel('')

plt.suptitle('房源数量分布总览', fontsize=25) # 多子图加总标题
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

在这里插入图片描述

6层板楼一般属于老旧小区,这类房源最多,远远多于其他楼层的房子。

既然数量多,那价格会与普通房源有差别吗?下一节会重点分析6层老房的价格,及其所处的商圈。

fig = plt.figure(figsize=(15, 8))
ax = plt.subplot()

total_floor = data['总楼层'].round().value_counts()
sns.barplot(x = total_floor.index, y = total_floor, palette='Blues_d') # palette修改调色板
ax.tick_params(labelsize=15)
ax.set_xlabel('总楼层', fontsize=18)
ax.set_ylabel('房源数量', fontsize=18)
ax.set_title('房源所在楼栋总层高', fontsize=20)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

2.2. 房源特征

从2934条信息来看房源的基本特征:
常见的朝向有南北朝向、朝南、朝西、朝东、朝北。
简装修的房源占比较多,为73.42%
楼层高度分布均匀,有1.64%的地下室出租
有电梯的房源占比为40.35%

fig, axes = plt.subplots(2, 2, figsize=(14, 10))
plt.subplots_adjust(wspace=0.1, hspace=0.4)

deco = data['装修'].value_counts()  # fine decoration 装修
axes[0, 1].pie(deco, autopct='%.2f%%', explode=[0.01, 0.01], labels=['简装', '精装'], startangle=90)
axes[0, 1].set_title('装修', fontsize=16)

elebator = data['电梯'].value_counts() # elebator 电梯
axes[1, 1].pie(elebator, autopct='%.2f%%', explode=[0.01, 0.01], labels=['无', '有'], startangle=90)
axes[1, 1].set_title('电梯', fontsize=16)

loc = data['朝向'].value_counts()[:10] # 房屋朝向 location
sns.barplot(loc.index, loc, ax=axes[0, 0], palette='Blues_d')
axes[0, 0].set_title('Top10 朝向', fontsize=16)
axes[0, 0].set_xticklabels(axes[0, 0].get_xticklabels(), rotation=45, fontsize=12)
axes[0, 0].set_ylabel('房源数量')

floor = data['楼层位置'].value_counts() # 楼层 floor
axes[1, 0].pie(floor, autopct='%.2f%%', explode=[0.01, 0.01, 0.01, 0.01], labels=['高楼层', '中楼层', '低楼层', '地下室'], startangle=90)
axes[1, 0].set_title('楼层', fontsize=16)

plt.suptitle('房源特征', fontsize=20)

plt.savefig('房源特征.png') 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

在这里插入图片描述

2.3 基础设施

从房源的基础设施来看,有80%左右的房源分别提供民水、民电、燃气、集中供暖。

房源特征和基础设施部分,只做基础了解,后续暂不进行深入分析。

fig, axes = plt.subplots(2, 2, figsize=(10, 10))

water = data['用水'].value_counts()
axes[0, 0].pie(water, autopct='%.2f%%', explode=[0.01, 0.01, 0.01], labels=['民水', '暂无数据', '商水'], startangle=90, )
axes[0, 0].set_title('用水性质', fontsize=18)

electric = data['用电'].value_counts()
axes[0, 1].pie(electric, autopct='%.2f%%', explode=[0.01, 0.01, 0.01], labels=['民电', '暂无数据', '商电'], startangle=90)
axes[0, 1].set_title('用电性质', fontsize=18)

gas = data['燃气'].value_counts()
axes[1, 0].pie(gas, autopct='%.2f%%', explode=[0.01, 0.01, 0.01] , labels=['有', '无', '暂无数据'], startangle=90)
axes[1, 0].set_title('是否供燃气', fontsize=18)

heating = data['采暖'].value_counts()
axes[1, 1].pie(heating, autopct='%.2f%%', explode=[0.01, 0.01, 0.01], labels=['集中供暖', '自采暖', '暂无数据'], startangle=90)
axes[1, 1].set_title('采暖性质', fontsize=18)

plt.suptitle('房源基础设施', fontsize=20)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

在这里插入图片描述

3. 细分市场

目前我居住在朝阳区,近期会有重新租房的打算,重点想关注1室的房子。

结合个人情况,对位置、户型、总楼层做具体分析,给之后的租房计划提供参考信息,以求租到物美价廉的房子。

位置:朝阳区的商圈,房源数量、租金。

户型:1室1厅1卫、1室0厅1卫、1室0厅0卫、1室1厅0卫。

总楼层:6层

缩小范围后,最终做选择时,再对单价进行对比。
前期在大范围做单价对比是没有意义的,房子也不是按照平方米来出租的。

3.1 朝阳区商圈

朝阳区的房源有854套,对此进行分析,得出以下结论:
朝阳区各大商圈中,平均租金相对较低有首都机场、立水桥、双桥、豆各庄、管庄等,再结合房源数量来看,选择在双桥、管庄租房是一个不错的选择。

chaoyang = data[data['行政区']=='朝阳']
chaoyang_group = chaoyang.groupby('商圈')['租金'].agg([('房源数量', 'count'), ('平均租金', 'median')])
chaoyang_price = chaoyang_group[chaoyang_group['房源数量'] > 9 ].sort_values(by='平均租金') # 筛选出超过10套房源的商圈,按照租金进行升序排序

# 可视化
fig, ax = plt.subplots(1, 1, figsize=(23, 10))
ax1 = ax.twinx()

chaoyang_price['房源数量'].plot.line(ax=ax1, color='green', linewidth=4) # 要先画折线图,后画柱状图
ax1.legend(('房源数量', ), loc='upper center', fontsize=20) # 图例要用元组才可以显示全 

chaoyang_price['平均租金'].plot.bar(ax=ax, color='blue', alpha=0.5) # 柱状图
ax.legend(('平均租金', ), fontsize=20)

ax.set_xlabel('朝阳区商圈', fontsize=23)
ax.set_ylabel('平均租金', fontsize=20)
ax.set_xticklabels(ax.get_xticklabels(), fontsize=23, rotation=30)
ax.tick_params(labelsize=20)

ax1.set_ylabel('房源数量', fontsize=20)
ax1.set_ylim(0, 90) # 设置y轴范围
ax1.tick_params(labelsize=20)

ax1.set_title('朝阳区各大商圈的平均租金与房源数量', fontsize=25)

plt.savefig('朝阳区各大商圈的平均租金与房源数量.png')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

在这里插入图片描述

chaoyang.describe()
  • 1

在这里插入图片描述

3.2 户型为1室的房源

户型为1室的房源共1511条,对此进行分析,得出以下结论:

对于想要选择户型为1室的租客,且首要考虑因素为价格的,可选择在郊区租房,如房山区的良乡、长阳商圈,昌平区的鼓楼大街商圈、顺义区的顺义城、后沙峪商圈。这些商圈房源的平均租金在3000元以下。

若想要在城六区租房(东城区、西城区、朝阳区、海淀区、丰台区、石景山区),从租金和房源数量综合考虑,可选择东城区东四、崇文门,朝阳区双桥、定福庄、潘家园。

整体来看,亦庄开发区也是一个不错的选择,距主城区不是很远,平均租金在3800元,房源数量27套。

type1 = data[data['户型'].isin(['1室1厅1卫', '1室0厅1卫', '1室0厅0卫', '1室1厅0卫'])] # 1室的房源共1511条
type1_group = type1.groupby('区商圈')['租金'].agg([('房源数量', 'count'), ('平均租金', 'median')]) # 按照区商圈分类,并计算count, median
type1_price = type1_group[type1_group['房源数量']>14].sort_values(by='平均租金') # 筛选出超过15套房源的商圈,按照租金进行升序排序

# 可视化
fig, ax = plt.subplots(1, 1, figsize=(23, 10))
ax1 = ax.twinx()

type1_price['房源数量'].plot.line(ax=ax1, color='red' ,linewidth=4)
# ax1.set_ylim(0, 70)
ax1.set_yticks([0, 20, 40, 60, 80]) # 设置y轴的刻度范围及标记,默认不从0开始
ax1.legend(('房源数量',), loc='upper center', fontsize=20)

type1_price['平均租金'].plot.bar(ax=ax, color='blue', alpha=0.5)
ax.legend(('平均租金',), fontsize=20)

ax.set_xticklabels(ax.get_xticklabels(), rotation=65)
ax.set_xlabel('')
ax.set_ylabel('平均租金', fontsize=20)
ax.tick_params(labelsize=20)
ax1.set_ylabel('房源数量', fontsize=20)
ax1.tick_params(labelsize=20)

ax.set_title('1室户型的平均租金与房源数量', fontsize=25)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

在这里插入图片描述

type1['租金'].describe()
  • 1

在这里插入图片描述

3.3 总楼层为6层的老房

对6层的老房和其他房源的平均租金进行对比,发现没有明显特征差异。

floor6 = data[data['总楼层']==6]
floor7 = data[data['总楼层']!=6]

floor6_qu = floor6.groupby('行政区')['租金'].agg([('房源数量', 'count'), ('平均租金', 'median')])
floor7_qu = floor7.groupby('行政区')['租金'].agg([('房源数量', 'count'), ('平均租金', 'median')])

floor_merge = pd.merge(floor6_qu, floor7_qu, left_index=True, right_index=True)
floor_compare = floor_merge[['平均租金_x', '平均租金_y']].rename(columns={'平均租金_x': '6层老房', '平均租金_y':'其它'}).sort_values(by='6层老房')

#可视化
fig = plt.figure(figsize=(20, 10))
ax = plt.subplot()

floor_compare.plot.bar(ax=ax, alpha=0.8)
ax.legend(fontsize=20)

ax.tick_params(labelsize=20)
ax.set_xticklabels(ax.get_xticklabels(), rotation=30)

ax.set_xlabel('')
ax.set_ylabel('平均租金', fontsize=20)

ax.set_title('6层老房与其它房的平均租金对比', fontsize=25)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

在这里插入图片描述
6层的老房子有1317套,按照区商圈进行分组。
房山区良乡、顺义区顺义城、朝阳区的定福庄3个商圈在租的老房最多。
城六区中,石景山区苹果园、丰台区和义商圈的平均租金较低,可以作为选择范围。

floor6_group = floor6.groupby('区商圈')['租金'].agg([('房源数量', 'count'), ('平均租金', 'median')])
floor6_price = floor6_group[floor6_group['房源数量']>14].sort_values(by='平均租金')

# 可视化
fig, ax = plt.subplots(1, 1, figsize=(23, 10))
ax1 = ax.twinx()

floor6_price['房源数量'].plot.line(ax=ax1, color='yellow', linewidth=4 )
ax1.legend (('房源数量',), loc='upper center', fontsize=20)

floor6_price['平均租金'].plot.bar(ax=ax, color='blue', alpha=0.5)
ax.legend(('平均租金',), fontsize=20)

ax.set_xticklabels(ax.get_xticklabels(), fontsize=20, rotation=70)
ax.tick_params(labelsize=20)
ax.set_xlabel('')
ax.set_ylabel('平均租金', fontsize=20)
ax1.tick_params(labelsize=20)
ax1.set_ylabel('房源数量', fontsize=20)
ax1.set_ylim(0, 160)

ax.set_title('6层老房的平均租金与房源数量', fontsize=25)

plt.savefig('6层老房的平均租金与房源数量.png')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

在这里插入图片描述

4.总结

本次的链家网北京市租房数据分析python实战,在通过数据清洗、可视化探索后,得出了一些小结论。

  • 从房源数量看:

朝阳区在租房源最多,排名前3的商圈分别是顺义区顺义城、房山区良乡、朝阳区定福庄。
总楼层为6层的老房,在租房源远多于其它楼栋的房子,但是二者的租金并无较大差异。

  • 租房较常考虑的因素方面:

主要户型是2室1厅1卫,1室1厅1卫,1室0厅1卫。
多数房源的面积是在30-60平方米这个区间内。
常见的朝向有南北朝向、朝南、朝西、朝东、朝北。
简装修的房源占比较多,为73.42%
有电梯的房源占比为40.35%。
房源的相对楼层(高、中、低楼层)分布均匀,还有1.64%的地下室出租。
有80%左右的房源分别提供民水、民电、燃气、集中供暖。

  • 细分市场:

如果要在朝阳区租房,可以选择双桥、管庄商圈,房源数量多,平均租金相对较低为4400元。
如果要选择1室的户型,亦庄开发区是一个不错的选择,距主城区不是很远,平均租金在3800元,房源数量27套。

  • 本项目可改进之处:
  • 数据量较少,也不一定是均匀分布的数据。 后续可爬取更多数据,进行分析。
  • 在细分市场的分析较少。后续可对房源的不同特征进行组合,并设立评价指标,进行分析。

欢迎留言探讨更多可能性。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/375043
推荐阅读
相关标签
  

闽ICP备14008679号