爱彼迎纽约房源公开数据

Airbnb为人们游玩出差提供了一种新的租房选择,该公司公布了其2019年以前的部分纽约房源租赁数据。对这些数据进行分析,尝试得到消费者的一些信息以帮助公司增加盈利。

目录:
1 数据预处理
2 分类特征对于房间价格和房源数量的影响
3 分类特征对其他数字特征的影响
4 数字特征之间的影响
5 位置(经纬度)对各项属性的的影响
6 建立RFM 模型分析

1 数据预处理

1.1导入库和数据
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
pd.set_option('display.width',None)
pd.set_option('display.max_columns',None)
df=pd.read_csv(r'E:\project\myproject\project2\AB_NYC_2019.csv')
1.2获取数据基本信息

该数据源包含以下字段,分别意义如下:
id:挂牌号
name:挂牌房源标题
host_id:户主ID
host_name: 户主名
neighbourhood_group: 区域
neighbourhood :地区
latitude : 纬度
longitude:经度
room_type: 房间类型
price:价格/每晚
minimum_nights:最少预定天数
number_of_reviews: 评论数量
last_review: 最近评论时间
reviews_per_month:每月评论数量
calculated_host_listings_count:房主拥有的房间数
availability_365: 可以预定的天数

df.room_type.unique()
输出:
array(['Private room', 'Entire home/apt', 'Shared room'], dtype=object)
房屋类型主要分三种:单人间,整租,共享房屋
df.neighbourhood_group.unique()
输出:
array(['Brooklyn', 'Manhattan', 'Queens', 'Staten Island', 'Bronx'],dtype=object)
区域一共有五种类型,分别对应纽约市五个区

1.3缺失值补全
#查询数据源基本信息
 df.info()
image.png

数据有缺失的部分为:
hostname:由于户主名对分析没有帮助,因此删除此列
name存在空值,用0填充
last_review和reviews_per_month 也存在部分空值,这些空值用0填充,表示无评论

df.drop('host_name',axis=1,inplace=True)
df=df.fillna(0)
1.4时间格式标准化
#将时间标准化
df['last_review']=pd.to_datetime(df.last_review,format='%Y-%m-%d')


#计算出距今时间(假设最后一个评论的时间是今天日期)
df['last_review_to_today']=(df.last_review.max()-df.last_review)/np.timedelta64(1,'D')
df.last_review.min()  
#由此可知,该数据库最早的记录为1970-01-01,为异常值,应剔除这些数据
df=df.query('last_review_to_today!=18085')

2 分类特征对于房间价格和房源数量的影响

2.1 房价

本数据库中,分类特征主要包含房源类型和区域类型,先研究他们对房源数量和价格的影响。
查看各个区域房价描述统计情况
df.groupby('neighbourhood_group').price.describe().T

image.png

可以看出,

  • 房源主要集中于曼哈顿区和布鲁克林区,共40000套,而其他区域总计7000套左右。
  • 各区域出租房源的均价在100-200美元左右,而极值是10000美元。少数偏离正常价格的数据影响了分析过程。考虑距离平均值2倍标准差以内的值为正常值,对数据做过滤
df_filtered=df.loc[
((df.neighbourhood_group=='Bronx')&(df.price<299))|
((df.neighbourhood_group=='Brooklyn')&(df.price<496))|
((df.neighbourhood_group=='Manhattan')&(df.price<778))|
((df.neighbourhood_group=='Queens')&(df.price<433))|
((df.neighbourhood_group=='Staten Island')&(df.price<668))]
2.1.1 区域对房价的影响

首先采用提琴图分析每个区域价格的总体情况
sns.violinplot(x='neighbourhood_group',y='price',data=df_filtered)

image.png
2.1.2 房间类型对房价的影响

由于不同房间类型的价格也有明显区别,因此绘制箱线图时,将不同房间类型也作为一个维度加以区别。

sns.boxplot(x='room_type',y='price',hue='neighbourhood_group',data=df_filtered,showfliers=False)
image.png

从图中可以看出

  • 曼哈顿区价格明显高于其他区域,反映了其商业中心的定位。
  • 曼哈顿和布鲁克林区提琴形状偏高瘦,房源价格分布较广,而其他三个区域价格较集中。
  • 整租价格大于单人间大于共享房屋,符合常理。且各区域之间相比,共享房屋(低端需求)的价格差别不大,整租的房间(高端需求)价格差别较大,各区域之间的价格差异也主要体现在这里。
  • 布鲁克林和斯塔恩岛价格箱线图中,中位数都较低,说明大部分房源价格较低。
2.2房源数量的影响因素
pic3=df_filtered.pivot_table(index='neighbourhood_group',columns='room_type',values='price',aggfunc='count').plot.bar()
pic3.set_xlabel('Neighbourhood_group')
pic3.set_ylabel('Num of listings')
pic3.set_title('Num of listing by Room Type across zone',fontweight='bold')
pic3.set_xticklabels(pic3.get_xticklabels(),rotation=45)
plt.show()
image.png

可以看出

  • 共享房源的数量远少于其他种类的房源。
  • 曼哈顿和布鲁克林区的房源最多
  • 曼哈顿与其他区域的一个显著区别是其整租房源比单间房源数量多,这反映了商业中心人群的消费习惯和房源条件。

3 分类特征对其他数字特征的影响

3.1 区域对其他数字特征的影响
fig2=plt.figure()

ax1=fig2.add_subplot(2,2,1)
ax2=fig2.add_subplot(2,2,2)
ax3=fig2.add_subplot(2,2,3)
ax4=fig2.add_subplot(2,2,4)

sns.violinplot(x='neighbourhood_group',y='availability_365',data=df_filtered,ax=ax1)
sns.violinplot(x='neighbourhood_group',y='number_of_reviews',data=df_filtered[df_filtered.number_of_reviews<100],ax=ax2)
sns.violinplot(x='neighbourhood_group',y='calculated_host_listings_count',data=df_filtered[df_filtered.calculated_host_listings_count<8],ax=ax3)
sns.violinplot(x='neighbourhood_group',y='minimum_nights',data=df_filtered[df_filtered.minimum_nights<60],ax=ax4)
image.png

结论:

  • availability_365 其值较大表明该房源是出租房,而其值较小则表明房源性质为自住房间,只是短暂出租。一般情况下较少出现值取中间的情况。大多数区域的分布也确实呈现出两端分布较多,中间值较少的情况。
    在布鲁克林和曼哈顿区,大部分房源都是自住房间。而斯塔恩区大部分房源是出租房。
  • number_of_reviews 在布鲁克林和曼哈顿区主要集中在0-10之间。结合前面章节得出的各区域房源数量信息可知,由于这两个区域房源较其他区域更多,因此评论的分布更平均。而在房源较少的区域,如斯塔恩区,由于市场较小,一部分房源集中了较多数量的评论。
  • calculated_host_listings_count 除了从图中可以看出Brooklyn 和Manhattan 房源较多外,还可以看出这两个区域很多房主拥有多套住房出租。原因是在核心地段,有很多房主拥有大量固定资产。
    df.pivot_table(index='host_id',values='calculated_host_listings_count').calculated_host_listings_count.value_counts()
    由上查询可知,其中最多的一位房主在曼哈顿拥有327套房产出租
  • minimum_nights 主要分布集中于0-10天以内,这种情况实际上并未对求租方提出太多时限的要求,短租即可。但是曼哈顿区有部分房源分布在30左右,即要求最短租赁一个月。说明该区部分房屋有很强的议价权,为卖方市场。
3.2 房屋类型对其他数字特征的影响
fig3=plt.figure()

ax1=fig3.add_subplot(2,2,1)
ax2=fig3.add_subplot(2,2,2)
ax3=fig3.add_subplot(2,2,3)
ax4=fig3.add_subplot(2,2,4)

sns.violinplot(x='room_type',y='availability_365',data=df_filtered,ax=ax1)
sns.violinplot(x='room_type',y='number_of_reviews',data=df_filtered[df_filtered.number_of_reviews<100],ax=ax2)
sns.violinplot(x='room_type',y='calculated_host_listings_count',data=df_filtered[df_filtered.calculated_host_listings_count<8],ax=ax3)
sns.violinplot(x='room_type',y='minimum_nights',data=df_filtered[df_filtered.minimum_nights<60],ax=ax4)
image.png

结论

  • availability_365 该项数据中,独居和整租呈现相似的分布,可预订时间集中在30以内。而shared_room(共享寝室)可预订时间有很大一部分分布在300天左右。说明这类房间常常是长租的形式,对应的客户群体的特征是:相比于隐私性,他们更在意价格。
  • number_of_reviews 三者的分布没有明显差异
  • calculated_host_listings_count 在整租房源上集中于1附近,说明这类房主大多数只有一套房源。而Private_room则相对分散,这是因为这类户主将一个房间分成很多单间出租,导致其拥有可租房源较多。
  • minimum_nights 主要主要集中在0-10左右,30天附近也有集中。对于Private Room ,其客户主要是旅游或出差的短租客户,因此其0-10的集中较多。Entire room 和 Shared Room 虽然呈现相似的分布(30天附近分布较多),但是推测其原因却不相同。整租由于搬入搬出的清洁交接成本较高,限制最小租赁天数有助于减少边际成本提高利润率。而Shared Room 类型的房间由于很多是租给在意价格的长租客,因此很多也限制了最小租赁天数。

4 数字特征之间的影响

num_feature=['price','minimum_nights','number_of_reviews','last_review_to_today','reviews_per_month','calculated_host_listings_count','availability_365']
sns.heatmap(df[num_feature].corr(),annot=True,cmap=sns.diverging_palette(200, 20, as_cmap = True), fmt= '.3f')
plt.xticks(rotation=45)
plt.yticks(rotation=45)
plt.title('Correlation between Number Features')
#annot = True 在热力图上显示值 fmt 格式化值
image.png

结论:

  • 没有任何两个字段是强相关的
  • 相关性比较强的字段是last_review_to_today,review_per_month及number_of_reviews。即,最新评论距今时间越长,则每月评论数越少,总评论数也越少。

5 位置(经纬度)对各项属性的的影响

精确位置(经纬度)作为房源的一个特殊重要的属性,进行单独的分析

fig=plt.figure()
ax1=fig.add_subplot(2,2,1)
ax2=fig.add_subplot(2,2,2)
ax3=fig.add_subplot(2,2,3)
ax4=fig.add_subplot(2,2,4)

df_filtered.plot(kind='scatter',x='longitude',y='latitude',marker='.',c='price',cmap=plt.get_cmap('jet'),colorbar=True,ax=ax1)
df_filtered.query("number_of_reviews<100").plot(kind='scatter',x='longitude',y='latitude',marker='.',c='number_of_reviews',cmap=plt.get_cmap('jet'),colorbar=True,ax=ax2)
df_filtered.query("calculated_host_listings_count<15").plot(kind='scatter',x='longitude',y='latitude',marker='.',c='calculated_host_listings_count',cmap=plt.get_cmap('jet'),colorbar=True,ax=ax3)
df_filtered.query("minimum_nights<90").plot(kind='scatter',x='longitude',y='latitude',marker='.',c='minimum_nights',cmap=plt.get_cmap('jet'),colorbar=True,ax=ax4)
#cmap: 绘图颜色
#为了避免离群值对分析结果的影响,因此数据进行了过滤
image.png
  • 图一中,暖色代表价格高的区域,点的密度表示房源的密度。曼哈顿区房价最高,且房源数量最多。皇后区和布鲁克林区中,靠近曼哈顿区的房价较高,明显受到了曼哈顿区的溢出效应。而斯坦顿岛和布朗克斯区中,在地区中心有部分高价的房源,推测是区域的商业中心。
  • 图二中展示了评论数的分布情况。与图一对比可知,在房价高的区域,评论数较低。
  • 图三和图四中calculated_host_listings_count 和Minimum_nights 分布较为松散,没有明显规律。

6 RFM 模型分析

将每一个户主作为一个客户,套用经典的RFM模型进行分析。

host=pd.DataFrame()
host['id']=df.groupby('host_id').last_review_to_today.min().index
#R 最近消费时间。可用房主名下所有房源的最新评论时间来近似(消费后才有评论)
host['R']=df.groupby('host_id').last_review_to_today.min().values
#F 消费频率。如果消费后评论的比率稳定,则该值用每月评论次数来近似
host['F']=df.groupby('host_id').reviews_per_month.sum().values
#M 总消费。对于一个房间,房间单价*最短租赁时间为客单价,在乘以总评论数即该房间总消费额。因此对于一个户主,其总消费额即为其名下所有房间总消费额的加和。
host['M']=df.groupby('host_id').apply(lambda x: sum(x.price*x.minimum_nights*x.number_of_reviews)).values

#根据最新消费时间,消费频率和总消费额将户主分为8类,分别对应不同的营销策略。
#host 列表中新建label 列,用于储存客户类型分类
def label_func(x):
  #值越大越好时的判断逻辑
  level=x.apply(lambda x : '1' if x>=0 else '0')
  #值越小越好时的判断逻辑
  level_min=x.apply(lambda x : '1' if x<=0 else '0')
  label=level_min.R+level.F+level.M
  d={'111':'重要价值房主','011':'重要挽留房主','101':'重要保持房主','001':'重要发展房主','110':'一般价值房主','010':'一般挽留房主','100':'一般保持房主','000':'一般发展房主'}
  return d[label]

host['label']=host[['R','F','M']].apply(lambda x :x- x.mean()).apply(label_func,axis=1)

# 查看各类型户主贡献营业额的比重
plt.rcParams['font.sans-serif']=['SimHei']#中文显示设置
plt.rcParams['axes.unicode_minus']=True
host.groupby('label').sum().M.plot.pie()
plt.title('Revenue Composition Chart')
image.png

从图中可以看出,在通过AirBnb发布房源的房主人群中,为网站创造主要利润的群体主要分为三类:
一是房源单价高,出租频率高且最近有出租行为的‘重要价值房主’
二是房源单价高,最近有出租行为但是房源出租频率不高的‘重要保持房主’
三是是房源评论或消费频率很高,然而最近一次房源出租时间已经比较远的“重要发展房主”

其中前两类用户的营业额占据AirBnb网站营业额的68%。对这两类用户,绘制散点图分析他们房源的最近消费时间和消费频率

#在列表host中,增加color列,存储他们在图中的标注颜色
host.color='b'
host.loc[host.label=='重要价值房主','color']='g'
host.loc[host.label=='重要保持房主','color']='r'

#由于离群值偏离正常值较多,因此做过滤使散点图更清晰
list1=host.query('R<500&F<50')
list1.plot.scatter('F','R',c=list1.color)
plt.title('Scatter of host category')
plt.xlabel('Frenquency')
plt.ylabel('Recency')
image.png

根据对房源发布者的三个维度进行的分类,有助于网站针对不同类型的房源发布者制定不同的营销策略,鼓励他们完善自己的房源产品,增加出租天数,从而为网站缩减营销成本,增加利润。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351