Airbnb房源信息与价格分析—基于2019年纽约市数据

20年6月22日 · 裴晨雅 179 人阅读
摘要:
Airbnb是AirBed and Breakfast ("Air-b-n-b")的缩写,中文名:爱彼迎。爱彼迎是一家联系旅游人士和家有空房出租的房主的服务型网站,它可以为用户提供多样的住宿信息。其中,各类房源占比多少?价格与什么有关?房源分布有什么特点?房东在介绍自己的房子时更喜欢什么样的词汇?基于2019年纽约市Airbnb的房源数据,作者利用已有知识探究了以上问题,主要探究了价格与其他因素的相关性,利用Tk、pandas、numpy、matplotlib、wordcloud等模块,并以直观、可视化的形式得出了以下结论:1.房源类型一般分为三类:Private room,Entire room/apt和Shared room,前两类占比较大,后者略多,Shared room在市场中极少;2.价格与地理位置、房源类型关系较大,与评论数略呈反比但波动性较大,与营业时长无关;3.房源主要集中在纽约市中部和旁边岛屿,周围较少;4.在描述房子时,房东不仅会标出房子类型,还会提到close to…(临近…)、park、heart of(中心地段)、街区等信息表示自己地理位置优越,另外modern(现代的)、sunny(有阳光的)、spacious(宽敞的)、beautiful(环境优美的)、cozy(舒适的)等形容词也被提及较多。
一、研究目标
该程序面向想要查询、查看Airbnb数据的用户,同时为专业人员提供数据可视化。
要解决的数据可视化问题主要有:
各类房源占比多少?这个问题可以通过绘制饼状图显示。
价格与什么有关?这个问题可以通过绘制价格与地理位置(街区)、房源类型、评论数、营业时间的柱状图或直线图显示。
房源分布有什么特点?这个问题可以通过经纬度绘制散点图与纽约市地图对比来显示。
房东在介绍自己的房子时更喜欢什么样的词汇?这个问题可以通过房子介绍的文本绘制词云图来表示。
二、总体设计
(一)程序模块图
![]() |
(二)GUI界面
1. 总界面
![]() |
2. 打开文件
![]() |
3. 查询
![]() |
三、程序模块详细设计
(一)主程序
1. 导入相关第三方库。
2. 初始化filename和file_addressed,设置汉字和负数的显示。
3. 在界面设计label,button,combobox,entry,listbox和scrollbar:
lbl1显示Airbnb基本信息,btn1按钮打开数据,btn3按钮显示房源类型饼状图,btn4按钮显示价格相关因素的柱状图和折线图,btn5按钮显示房源分布图,btn6按钮显示词云图,lbl_seek划分区域,lbl_nei显示“街区”,box1可选择街区,lbl_typ显示“类型”,box2可选择房源类型,lbl_price显示“预算”,lbl_pun显示“~”表示区间,ent1和ent2分别接收用户输入的最小值、最大值,btn7按钮开始查询,list_box显示表格内容,scrolly和scrolly_两个滚动条分别在最右端和最下端控制显示内容。
(二)调用函数
1. sVar_l(sVar,data,l):
设置sVar变量,并用str.center()将每项居中。
2. file_open():
用askopenfilename()浏览文件夹,用pd.read_csv()打开文件,然后处理数据。AB_NYC_2019.csv的数据较多,共有45351条数据,信息有id(房屋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(一年中有多少天可用)共16条。数据处理完成后,file_addressed为True。
(1)数据读取。
使用pandas的read_csv()函数将csv文件读入DataFrame对象。
(2)数据精简。
使用drop()函数去除id, host_id, last_review这三条。
(3)去重复。
使用drop_duplicates()函数去除重复数据。
(4)处理缺失数据。
由于有些number_of_reviews为0,当计算reviews_per_month时需要除以运营时长(月),而0不能作为被除数,所以此时reviews_per_month缺失,表现为NaN,使用fillna()函数,将这一列缺失数据填充为0。使用dropna()函数将其他信息有NaN的数据删去。availability_365和calculated_host_listings_count为0表示此房源一年都不可租赁,可以认为是一条无效数据,使用isin()函数将这两条为0的数据删去。
(5)标准化。
将price列数据定义为整型,便于之后筛选。将data.index设置为从1开始的数字。使用to_csv将处理后的数据保存为result.csv,在之后数据可视化时,使用这个数据文件。
3. 可视化
(1)pie_show():
用饼图显示房源类型,前提是file_addressed为True,否则会出现警告。
(2)price_show():
用柱状图和折线图显示价格相关因素,前提是file_addressed为True,否则会出现警告。其中,运营时长由number_of_reviews除以reviews_per_month计算得来。
(3)map_show():
用散点图显示房源分布,前提是file_addressed为True,否则会出现警告。数据为经纬度,可视化结果可参考纽约市地图。
(4)wordcloud():
用词云图表示房源描述偏好,词云图保存为wordcloud.png。在词云图形成过程中,产生了image模块错误,限定在PIL库后正常运行。
4. seek():
通过用户选择和输入内容查询,在listbox显示符合条件的内容。同样,前提是file_addressed为True,否则会出现警告。
四、数据可视化和结论
(一)房源类型
![]() |
房源类型一般分为三类:Private room,Entire room/apt和Shared room,前两类占比较大,后者略多,Shared room在市场中极少。
(二)房源价格影响因素
![]() |
价格与地理位置、房源类型关系较大:Manhattan区房源价格最高,Entire home/apt类型房源价格最高。价格与评论数略呈反比但波动性较大,与营业时长无关。
(三)房源分布
![]() |
![]() |
房源主要集中在纽约市中部和旁边岛屿,周围较少。
(四)词云图
![]() |
在描述房子时,房东不仅会标出房子类型,还会提到close to…(临近…)、park、heart of(中心地段)、街区等信息表示自己地理位置优越,另外,modern(现代的)、sunny(有阳光的)、spacious(宽敞的)、beautiful(环境优美的)、cozy(舒适的)等形容词也被提及较多。
五、亮点
在本次大作业中,我借鉴公众号自学了词云图的制作,虽然结果图还有不清晰、图案不明显的问题,但是可视化效果有了很大的提高,在分析时直观了很多。
经过一个学期的学习,Tk等模块已经可以做到熟悉应用,在完成时也参考了很多大佬的想法,使程序更加高效。
六、反思
本次大作业中还存在很多问题,比如str.center()在Tk模块中依然有问题,箱图等高阶图表还需要更多练习,无法兼顾词云图的清晰度和大小,在字体调整上也遇到了很多问题。在解决其他问题时,我总是问问别人,参考一下网络上的教程,确实学到了很多。感谢老师和朋友们给了我很多帮助,让我明白谦虚永远是最好的品质;感谢一学年的Python课程,让我有了新的看世界的角度。
Python3Turtle