AI智能
改变未来

Airbnb 北京地区数据可视化——用户篇


1 项目摘要

Airbnb成立于2008年8月,是一个旅行房屋租赁社区,用户可发布、搜索度假房屋租赁信息并完成在线预定。2015年,Airbnb正式进入中国市场,在国内掀起了一波城市民宿的热潮。本项目基于Airbnb公开数据集,从用户角度出发,对Airbnb在北京地区的运营数据进行可视化处理,制作数据面板以探索北京地区的房源分布、价格趋势以及用户评价。

2 分析思路

需求理解——发掘用户关注点

假设一个从没到过北京的新用户访问了Airbnb北京地区的网页,TA首先希望了解的可能是该地区的房源分布、房屋类型,以便决定自己要住在哪里、有哪些房型可供选择,因此展示不同地段的房源分布和房型是有必要的;其次TA通常会看看各地区不同房型的租金,考虑是否符合自己的预算,那么我们需要提供房源价格的相关信息;接下来TA可能想进一步了解各种房源的评价,寻找一处舒心的居所或是避免踩坑,所以我们应该附上房源相关的评价信息……综上,可视化中需要包含的要素可以归纳如下

  • 地理位置
  • 房屋类型
  • 房源价格
  • 房源/房主评价

除了提供相关信息之外,考虑到需要呈现的数据量,采取何种方式聚合以及呈现数据也是需要斟酌的问题。在下文中将会结合使用的数据具体描述数据的呈现方式。

数据理解

Airbnb提供的数据集由6个表组成,包括39,732个房屋id及其对应的14,234个房东id,涵盖了地理位置、房源概况、住宿条件、预订要求、房东评价等方面的内容。主要表结构如下:

表名称 功能与结构
listings_detail.csv 房源的基本概况。用id和host_id区分每个房源及其房主,一条记录对应一个房源id,id具有唯一性。
reviews_detail.csv 住客的评价信息。Listing_id对应listings表中的房屋id,每一行代表一位用户对一个房源的评价。
calendar.csv 未来365天的房源预订信息。listing_id对应listings表中的id项,对于每个唯一的listing_id均有365条记录,表示该房源在未来365天内的每日预订信息。
neighbourhoods.geojson 提供了北京各区的地理位置信息

其中,listings表和reviews表分别有一个子表项,用于快速展示部分字段内容;
listings_detail表由106个字段构成,记录了39,732个房源的基本情况,提供了制作数据面板的主要信息;reviews_detail表由298,807个带有6个属性的评论组成,提供了listings表中的超过2W条房源的评价详情;
calendar表提供了39,732个房源在未来365天内的详细预定信息,共计14,502,180条。包括日期,价格,最大/最小起订天数。
neighbourhoods表提供了geojson格式的地理位置信息,可以用于绘制各区域的地图。

围绕上述可能的用户关注点,结合所拥有的数据,选择需要展现的字段,然后就可以开始进入数据准备与可视化的阶段了。

3 数据准备

Airbnb提供的数据源主要为.csv格式,且数据量较大,为保证结果的准确可靠以及展示质量,在可视化之前需要检查数据完整性并筛选出需要的数据以避免不必要的资源消耗。本项目使用postgreSQL进行数据的预处理。

数据导入和导出

由于数据量较大,使用INSERT语句插入数据耗时漫长,且容易出错;采用postgreSQL提供的COPY语句将.csv文件的内容复制到相同结构的空表中,可以大大提升数据导入导出的效率*。代码实现示例如下:

--COPY语句导入csv内容(.csv文件要放在data文件夹下的tmp路径中)COPY calendar(listing_id, date, available, price, adjusted_price, minimum_nights, maximum_nights)FROM \'E:\\...\\calendar.csv\'WITH csv HEADER;

*实测在主流家用机配置(i5 7代 16+256G SSD)下,使用COPY语句导入7*1400W+条记录用时<90s,而使用INSERT语句插入相同规模数据耗时30min以上

数据清洗

去重
主要核查房源id和listing_id,未发现重复字段。

缺失值处理
Calendar表中的price和adjusted_price字段存在空值1095条和0值2247条,其中6个listing_id没有任何price记录,直接予以删除;考虑到Calendar表对应的每个listing_id均有365条记录,因此取其平均值用于填充空字段。

格式同一化
数据源中的price字段采用货币格式存储数据,且单位为美元$(结合物价实际,实际价格单位应为RMB),需要将其格式修改为数值型NUMERIC以便排序:

BEGIN TRANSACTION;UPDATE calendarSET price = ROUND(CAST(REPLACE(REPLACE(REPLACE(price, \'$\' , \'\'), \'.\', \'\'), \',\', \'\') AS NUMERIC)/100,2),adjusted_price = ROUND(CAST(REPLACE(REPLACE(REPLACE(adjusted_price, \'$\' , \'\'), \'.\', \'\'), \',\', \'\') AS NUMERIC)/100,2);COMMIT;

异常值处理
在reviews_detail表中发现comments字段内存在系统自动评价,系因住客取消预订产生,需要去除。共计3435条无效评论,涉及2909个listing_id:

--查找系统自动好评SELECTCOUNT(*) AS illegal_com,COUNT(DISTINCT listing_id) AS cnt_idFROM reviews_detailWHERE comments LIKE \'%This is an automated posting%\';

可视化处理

根据前文归纳的用户关注要素,从清理后的数据集中提取以下特征进行可视化展示,数据导入Tableau中绘制可视化图表:

地理位置
首先对北京各城区的房屋均价、房屋数量及房主数量结合地理位置信息进行展示,以便用户了解基本情况。考虑到展示对象可能包含初次到访北京的用户,在neighbourhoods表中为各区增加了details字段,其内容为对北京各个城区的旅游信息简介。利用在Tableau中生成地图信息并插入注释框,通过右侧的筛选器可以查看各个地区的概况。

房源分布
在地理位置的基础上,按房型分类统计各区房源数量,通过饼图直观地展示了各类型房源的占比。同时,利用图形大小反映各区房源数量差异,间接体现了房源密度分布情况。具体数据以注释的方式添加到图表中,移动鼠标到相应图形上即可显示,避免直接呈现的信息量过载。

价格与评分差异
延用相同的逻辑,按区域展示各个房源的价格与评分差异。注意到房源价格差异较大,从几十元一晚的合租房到大几万元的整租不等,而大部分房价则集中于千元以下的范围内。因此,考虑使用对数价格以展示完整的价格分布趋势,并通过箱线图的形式便于用户看出价格的分散性。

此外,每个数据点对应一个房源ID,可以用颜色标记各房源的评分情况。由于房源评分集中于70~100区间,故设置颜色的分界线为70分数段,以突出显示低于一般评价水平的房源,有利于用户避坑。同样地,出于减少信息过载的考量,将具体评价内容以及价格、评分等数据以注释的形式嵌入数据点,可通过移动鼠标展示。

最后,将制作完成的各个图表整合为数据面板(Dashboard),添加必要的筛选器和图例,完成发布。

4 结果展示

制作完成的数据面板由5部分组成,整体布局如下图所示:

各区简介模块主要展示了区域旅游资源概况、房源数量以及均价水平;
Airbnb时间线模块以时间轴为线索展示了各区域的评论变动。朝阳区是Airbnb最早进入的领地,而在2017年后,Airbnb的经营范围已遍布北京各区;
Airbnb房型模块展示了各区的房型分布以及房源密度情况。目前房源主要集中于主城区,以全屋整租(Entire Home)为主,合租房的占比很小;
Airbnb房东模块以气泡图的展示了各区房源的归属情况,每个气泡代表一位房东,而气泡大小则对应房东名下房源的数量多少;
Airbnb房源均价模块展示了各区房源的价格与评分的差异。

用户可以根据自己的需求和兴趣探索相应模块提供的细节信息。例如,将房源均价模块中的坐标调整至线性,范围设定在0~5000,可以对比各区域房价的离散性,如下图所示。相较于对数坐标,线性坐标能够更直观地反映价格分布的差异,图中显示了怀柔区房源价格离散程度最大,其房价中位数达到了985RMB/晚,明显高于平均水平;而下四分位数为542,甚至超过了大部分城区75%的房源价格;与其邻近的延庆县也出现了类似情况,结合房型模块中给出的房源分布数据可以得出结论,Airbnb在北部郊区房源密度较低,价格差异大,需要慎重选择。

小结
本项目从Airbnb官网获取了北京地区的公开数据集,并使用SQL对其进行了清理和筛选;从用户需求角度出发,分析了用户关注点,从地理位置、房屋类型、房源价格、房源评价等维度呈现了用户选择房源可能考虑的问题;通过叠加地图、气泡图、箱线图等图表对数据进行了可视化处理,并汇总为数据面板以供用户根据自己的需求和兴趣探索相关信息。后续可利用本项目提供的数据展示进行运营方向的探索,利用不同维度的组合与聚合发掘更多洞察,提升用户的居住体验,帮助用户避坑。

参考与致谢

数据来源: Inside Airbnb
作品发布: Tableau Public – Project of Airbnb Beijing

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Airbnb 北京地区数据可视化——用户篇