房屋租赁数据分析(房屋租赁数据分析)

1 分析目标

这次分析的数据来自kaggle,是一份名叫“家在上海”的房屋租赁网站上的出租房屋的数据。这份数据中的出租房屋包含一些老洋房、新式里弄、老公房等独具上海地域特色的房子。

上海2021年出租房屋数据​www.kaggle.com/datasets/lescardone/shanghai-lane-house-rentals-2021

下面我们将以python为工具,先进行数据处理后,再从区域、面积、户型、楼层、建筑类型、使用类型和房屋设施各方面来进行分析,深入了解这个网站上的出租房屋的主要特征。详细的数据处理和分析代码可点击这里查看。

2 数据处理

导入python常用的包后,再导入数据。

# 导入python常用包 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns plt.style.use("fivethirtyeight") sns.set_style({font.sans-serif:[simhei, Arial]}) plt.rcParams[axes.unicode_minus]=False %matplotlib inline # 导入数据 df0 = pd.read_csv(jiazaishanghai.csv)

然后查看数据集的情况。

先做一些基础的处理,包括去除重复项和取出数据中要用来分析的列。

# 去除重复项 df = df0.drop_duplicates().copy() # 取出数据中要用来分析的列 columns = [district, use_type, building_type, floor, layout, sqmeters, price, amenities] df = df[columns]

处理完后的结果如下图所示。

下面我们将依次处理数值型数据和文本型数据,为后面的数据分析做准备。

2.1 数值型数据处理

楼层

楼层这一列的数据都是*/32层这样的形式,需要把它们处理成数值格式。同时楼层数据中出现了0层和一千多层的异常数据,综合考虑,移除了0层的数据和80层以上的数据。

# 移除*/0层的数据 df = df[df[floor] != */0层] # 将楼层信息转换成数值格式 # 为了方便移除异常楼层信息,先把‘整栋’换为0来表示 def get_floor(x): if */ in x: return int(x[2:-1]) else: return 0 df[floor] = df.floor.apply(get_floor) # 移除80层以上的数据 df = df[df[floor]<80] # 再将0替换成‘整栋’ df.loc[df[floor]==0, [floor]] = 整栋

查看处理完后的楼层信息。

面积

为了方便后面计算每平米租金价格,将面积信息转换成了数值格式。为了移除面积异常的数据,移除了3平米以下的数据和1500平米以上的数据。

# 将面积信息转换成数值格式 def get_sqmeters(x): return int(x[:-2]) df[sqmeters] = df.sqmeters.apply(get_sqmeters) # 移除3平米以下和1500平米以上的数据 df = df[(df[sqmeters]>3)&(df[sqmeters]<1500)]

查看处理完后的面积信息。

租金

先通过租金和面积信息计算出每平米租金价格。

为了移除租金部分异常的数据,移除了总体租金低于300元和高于150000元的数据,以及每平米租金低于10元/平米和高于800元/平米的数据。

# 计算每平米的租金 df[price_sqmeter] = (df[price] / df[sqmeters]).round(1) # 移除租金低于300和租金高于150000的数据 df = df[(df[price]>300)&(df[price]<150000)] # 移除租金低于10元/平米和租金高于800元/平米的数据 df = df[(df[price_sqmeter]>10)&(df[price_sqmeter]<800)]

查看处理完后的租金信息。

2.2 文本型数据处理

区域

查看区域列,发现区域列信息基本由两部分组成。此外,其中还出现了2100这样的异常信息。

先将区域信息为2100的数据移除。再将区域列信息的两部分分开,取前面的静安、徐汇等区域。

# 移除区域信息中值为2100的异常数据 df = df[df[district]!=2100] # 将district的两部分分开,取前面部分的静安、徐汇等区域 def get_district(x): return x.split(-)[0] df[district] = df.district.apply(get_district)

处理完后结果如下,总共有15个区的信息。

建筑类型和使用类型

查看建筑类型和使用类型两个列的信息,发现这两个列中都有空值。

原本我想移除建筑类型或使用类型为空值的数据,后来发现这样操作会移除掉一些有价值的信息,于是我决定将空值替换为“未知”。

# 建筑类型中有一些空值,把这部分的数据改为‘未知’,方便后面分析 df[building_type] = df[building_type].fillna(value=未知) # 使用类型中有一些空值,把这部分的数据改为‘未知’,方便后面分析 df[use_type] = df[use_type].fillna(value=未知)

使用类型中有商铺和商用两种类型,查看后发现这两种类型没有明显区别,于是把两种类型合并为商铺。

# 把商用和商铺这两种类型合并为商铺 df.loc[df[use_type]==商用, [use_type]] = 商铺

查看处理完后的建筑类型和使用类型信息。

房屋设施

房屋设施这一列的信息包含了多种设施。为了方便分析,我把暖气、空调、阳台等设施提取出来,每种设施单独新设置一列。如果一条出租信息中包含某种设施,那么该设施所在列的取值就是1,反之则为0。

之后再计算一下每条租房信息所包含的设施的总数量。

# 将原始数据amenities列中的各种设施提取出来,放入单独的列(暖气、空调等),方便后面分析 amenities = [heat, ac, balcony, wifi, outdoor_space, bathtub] amenities2 = [暖气, 空调, 阳台, WIFI, 户外空间, 浴缸] i = 0 for item in amenities: def get_result(x): if amenities2[i] in x: return 1 else: return 0 df[item] = df.amenities.apply(get_result) i += 1 # 计算每个房屋的设施总数量 df[amenities_sum] = df[[heat,ac, balcony, wifi, outdoor_space, bathtub]].sum(axis=1)

处理完后,移除原始的amenities列。

最后再查看一下处理完的数据的情况。

# 移除原始的amenities列 df = df.drop(amenities, axis=1) # 查看处理完的数据 df.head()

下面就可以开始我们的数据分析部分了。

3 数据分析

区域

各区域出租房屋数量分析各区域出租房屋价格分析各区域出租房屋每平米租金分析df_count = df[price].groupby(df[district]).count().sort_values(ascending=False).to_frame().reset_index() df_price = df[price_sqmeter].groupby(df[district]).mean().sort_values(ascending=False).to_frame().reset_index() fig, [ax1, ax2, ax3] = plt.subplots(3, 1, figsize=(20, 20)) sns.barplot(x=district, y=price, palette=Purples_d, data=df_count, ax=ax1) ax1.set_title(各区域出租房屋数量分析) ax1.set_xlabel(区域) ax1.set_ylabel(房屋数量) sns.boxplot(x=district, y=price, data=df, ax=ax2) ax2.set_title(各区域出租房屋价格分析) ax2.set_xlabel(区域) ax2.set_ylabel(价格) sns.barplot(x=district, y=price_sqmeter, palette=Blues_d, data=df_price, ax=ax3) ax3.set_title(各区域出租房屋每平米租金分析) ax3.set_xlabel(区域) ax3.set_ylabel(每平米租金) plt.show()

可以看出,徐汇区的出租房屋数量最多,其次是静安区和黄浦区。奉贤区的出租房屋数量最少。

从总体租金来看,15个区的房屋租金的中位数都在两万以内。奉贤、嘉定、宝山、松江这四个区的房屋的总体租金偏低。

每平米租金方面,静安和徐汇两个区的每平米租金最高,超过了175元/平米,嘉定、松江、奉贤的每平米租金最低,低于75元/平米。

面积

出租房屋面积总体情况分析各区域出租房屋面积分析fig, [ax1, ax2] = plt.subplots(2, 1, figsize=(20, 15)) sns.kdeplot(df[sqmeters], shade=True, label=面积, ax=ax1) ax1.set_title(出租房屋面积总体情况分析) ax1.set_xlabel(面积) sns.boxplot(x=district, y=sqmeters, data=df, ax=ax2) ax2.set_title(各区域出租房屋面积分析) ax2.set_xlabel(区域) ax2.set_ylabel(面积) plt.show()

从出租房屋面积分布情况看,面积为60平米左右的房屋的数量最多。大部分出租房屋的面积都在200平米以内,与此同时,也有一些面积高达八百乃至上千平米的出租房屋。

各个区的出租房屋的面积没有特别明显的差异。相对而言,青浦区面积偏大的房源的占比较高,宝山区面积较小的房源的占比较高。

户型

出租房屋户型分析#出租房屋户型情况分析,列出了主要的前30种户型的数量 fig, ax1 = plt.subplots(figsize=(20, 20)) sns.countplot(y=layout, order=df[layout].value_counts().iloc[:31].index, data=df, ax=ax1) ax1.set_title(出租房屋户型分析) ax1.set_xlabel(户型数量) ax1.set_ylabel(户型) plt.show()

出租房屋最多的户型是1室1厅1卫,此外3室2厅2卫、2室2厅1卫、2室2厅2卫也是比较主流的户型。

楼层

出租房屋楼层情况分析fig, ax1 = plt.subplots(figsize=(20, 20)) sns.countplot(y=floor, order=df[floor].value_counts().index, data=df, ax=ax1) ax1.set_title(出租房屋楼层情况分析) ax1.set_xlabel(数量) ax1.set_ylabel(楼层) plt.show()

由图可知,出租房屋最常出现的楼层是3层,其次6层和整栋也比较常见。

建筑类型

不同建筑类型的房屋的数量分析 不同建筑类型的房屋的租金对比 # 不同建筑类型的房屋各有多少 building_type_count = df[price].groupby(df[building_type]).count().sort_values(ascending=False).to_frame().reset_index() fig, ax1 = plt.subplots(figsize=(20, 13)) sns.barplot(x=building_type, y=price, data=building_type_count, ax=ax1) ax1.set_title(不同建筑类型的房屋的数量分析) ax1.set_xlabel(数量) ax1.set_ylabel(建筑类型) plt.show()# 不同建筑类型的房屋的租金分析 fig, ax1 = plt.subplots(figsize=(20, 13)) sns.kdeplot(df[df[building_type]==新公寓][price], shade=True, label=新公寓) sns.kdeplot(df[df[building_type]==新式里弄][price], shade=True, label=新式里弄) sns.kdeplot(df[df[building_type]==老公寓][price], shade=True, label=老公寓) sns.kdeplot(df[df[building_type]==老洋房][price], shade=True, label=老洋房) sns.kdeplot(df[df[building_type]==老公房][price], shade=True, label=老公房) sns.kdeplot(df[df[building_type]==别墅][price], shade=True, label=别墅) ax1.set_title(不同建筑类型的房屋的租金对比) ax1.set_xlabel(租金) plt.legend(fontsize = xx-large) plt.show()

从图中可以看出,除去有近两千套房屋类型未知之外,绝大部分房屋都是新公寓类型的。其次是新式里弄、老洋房、老公寓、老公房,这些类型的房屋都有一千多套。别墅类型的房屋最少。

价格方面,新式里弄、老公寓、老洋房、老公房类型的出租房屋价格较便宜,尤其是老公房中有较多便宜的房源。新公寓类型的房屋相对贵一些。最贵的是别墅类型的房屋。

使用类型

不同使用类型的房屋的数量分析 不同使用类型的房屋的租金对比 # 不同使用类型的房屋各有多少 use_type_count = df[price].groupby(df[use_type]).count().sort_values(ascending=False).to_frame().reset_index() fig, ax1 = plt.subplots(figsize=(20, 13)) sns.barplot(x=use_type, y=price, data=use_type_count, ax=ax1) ax1.set_title(不同使用类型的房屋的数量分析) ax1.set_xlabel(数量) ax1.set_ylabel(使用类型) plt.show()# 不同使用类型的房屋的租金分析 fig, ax1 = plt.subplots(figsize=(20, 13)) sns.kdeplot(df[df[use_type]==住宅][price], shade=True, label=住宅) sns.kdeplot(df[df[use_type]==工作室][price], shade=True, label=工作室) sns.kdeplot(df[df[use_type]==住宅/工作室][price], shade=True, label=住宅/工作室) sns.kdeplot(df[df[use_type]==商铺][price], shade=True, label=商铺) sns.kdeplot(df[df[use_type]==写字楼][price], shade=True, label=写字楼) sns.kdeplot(df[df[use_type]==厂房/仓库][price], shade=True, label=厂房/仓库) ax1.set_title(不同使用类型的房屋的租金对比) ax1.set_xlabel(租金) plt.legend(fontsize = xx-large) plt.show()

从使用类型来看,住宅类型的出租房屋占了绝大多数,有近一万四千套。住宅/工作室类型的房屋其次,有两千多套。工作室、商铺、写字楼、厂房/仓库类型的房屋都很少。

价格方便,住宅、住宅/工作室类型的房屋租金最便宜。工作室、厂房/仓库类型的房屋租金相对贵一些。最贵的是商铺和写字楼类型的房屋。

房屋设施

出租房屋设施数量分析出租房屋设施情况分析# 出租房屋设施数量分析 amenities_count = df[price].groupby(df[amenities_sum]).count().to_frame().reset_index() fig, ax1 = plt.subplots(figsize=(20, 8)) sns.barplot(x=amenities_sum, y=price, data=amenities_count, ax=ax1) ax1.set_title(出租房屋设施数量分析) ax1.set_xlabel(每个房屋的设施总数) ax1.set_ylabel(房屋数量) plt.show()amenities = {amenities:[暖气, 空调, 阳台, wifi, 户外空间, 浴缸], number:[5286, 10371, 4866, 3679, 6315, 5585]} amenities_df = pd.DataFrame(amenities) fig, ax1 = plt.subplots(figsize=(20, 8)) sns.barplot(x=amenities, y=number, data=amenities_df, ax=ax1) ax1.set_title(出租房屋设施情况分析) ax1.set_xlabel(设施类型) ax1.set_ylabel(设施数量) plt.show()

房屋设施方面,除了有三千多套房屋没有标注设施外,大部分房屋都只标注了1-2个设施。在已标注的设施中,空调是最多的被标注的设施。

4 总结

徐汇区的出租房屋数量最多,奉贤区的出租房屋数量最少。相对而言,静安区和徐汇区的房屋租金最贵,嘉定区、松江区和奉贤区的房屋租金最便宜。面积为60平米左右的房屋的数量最多,大部分出租房屋的面积都在200平米以内。1室1厅1卫是最主流的出租户型。出租房屋最常出现的楼层是3层、6层和整栋。从建筑类型来看,绝大部分房屋都是新公寓类型的。别墅类型的房屋租金最贵,老公房类型的房屋最便宜。从使用类型来看,绝大部分房屋都是住宅类型的。商铺和写字楼类型的房屋租金最贵,住宅、住宅/工作室类型的房屋最便宜。大部分标注了设施的房屋都只标注了1-2个设施。在已标注的设施中,空调是最多的被标注的设施。