活动背景
共享,通过让渡闲置资源的使用权,在有限增加边际成本的前提下,提高了资源利用效率。随着信息的透明化,越来越多的共享发生在陌生人之间。短租,共享空间的一种模式,不论是否体验过入住陌生人的家中,你都可以从短租的数据里挖掘有趣的信息。
活动采用了短租房源相关的公开数据,包括了结构化的表格数据、非结构化的文本和地图数据。可在统计分析、时间序列、关系网络分析、中英文自然语言处理、数据可视化以及数据应用等多角度进行探索。
数据说明
数据分为汇总版和明细版两类。可从汇总版入手熟悉后,进阶使用完整版挖掘更多信息。
listings 数据为短租房源基础信息,包括房源、房东、位置、类型、价格、评论数量和可租时间等等。明细版中包含更多房源相关细节。
calendar 数据为短租房源时间表信息,包括房源、时间、是否可租、租金和可租天数等等。
reviews 数据为短租房源的评论信息。汇总版中仅包括房源 listing_id 和评论日期,用来时间序列和数据可视化分析。明细版还包括评论相关的内容和作者信息。
neigubourhoods 数据为背景的行政区划。
数据来源:本次活动数据来自 Airbnb 于2019年4月17日公开的北京地区数据。数据均来源于Airbnb网站的公开信息,不包含任何个人隐私数据。
外部数据:赛题以数据挖掘和分析为出发点,不限制外部数据的使用,比如北京政府开放数据等。
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn import linear_model
from sklearn import preprocessing
plt.rcParams['font.sans-serif']='SimHei'
listings = pd.read_csv('/Users/zhangyugu/Downloads/data_mining/short_rent/listings.csv', encoding='utf8', index_col=0)
listings['neighbourhood_simple'] = listings.apply(lambda a: a['neighbourhood'].split(' /')[0], axis=1)
房间类型:
sns.countplot(x='room_type', data=listings)
plt.show()
房东持有房子数量:
host_count = listings.groupby(by='host_name')['host_name'].count()
host_count = host_count[host_count < host_count.quantile(0.9)] # 持有房子数,后90%的数据
sns.countplot(x=host_count)
plt.show()
listings = listings[listings['availability_365'] > 0] # 现在仍提供租用的房子
availability_365_bins = listings['availability_365'].value_counts(bins=20) # 可租用天数,划分为20个区间
availability_365_bins_10 = availability_365_bins.head(10) # 数量排行前10的数据
availability_365_bins_10 = availability_365_bins_10.sort_index() # 按照可租用天数从小到大排序
availability_365_bins_10.plot(kind='bar')
plt.show()
民宿分布区域占比:
neighbourhood_data = listings.neighbourhood_simple.value_counts()
label = neighbourhood_data.index
explode = {}
for i in label:
if i in ['东城区', '朝阳区', '海淀区']:
explode[i] = 0.05
else:
explode[i] = 0
plt.figure(figsize=(20, 20), dpi=80)
plt.pie(neighbourhood_data, labels=label, explode=explode.values(), autopct='%.2f%%', startangle=90, counterclock=False, colors=sns.color_palette('hls', n_colors=16))
plt.title('民宿分布区域占比图')
plt.show()
区域-房间类型:价格
data = listings.groupby(by=['neighbourhood_simple', 'room_type'])['price'].mean()
data_frame = pd.DataFrame()
for i in data.index:
data_frame.loc[i[0], i[1]] = data[i]
plt.figure(figsize=(30, 20), dpi=80)
sns.heatmap(data_frame, vmin=data.min(), vmax=data.max(), annot=True, cmap=sns.color_palette('hls', n_colors=10))
plt.title('区域-房间类型:价格图')
plt.show()