Airbnb是AirBed and Breakfast(“Air-b-n-b”)的缩写,爱彼迎是一家联系旅游人士和家有空房出租的房主的服务型网站,它可以为用户提供多样的住宿信息。我们现在对数据进行分析。

一,对数据处理

1.因为price里面的数据有’$‘和’,’,我们要替换成空格,便于我们之后的运算

calendar['price'] = calendar['price'].str.replace(r"[$,]","").astype(np.float32)
calendar.head()

并且转换浮点类型。

同理,对adjusted_price进行相同操作,再对date进行时间序列转换,得到结果。

如图所示,我们发现类型还是object,再修改一下。

完成了,现在是datetime类型。

2.用时间序列我们可以很轻松地返回商品的相关时间

calendar['weekday']=calendar['date'].dt.weekday
calendar['month']=calendar['date'].dt.month
calendar['year']=calendar['date'].dt.year
calendar['year']

会返回商品交易的年份,非常方便。做出柱状图我们可以看到商品月份的波动。

可以看出,3到8月份房屋价格递增,8月份达到峰值。

二,对listing_detail进行分析
listing_detail数据比较多。足足有106列

元素比较多,这里有个小技巧
我们可以用
listings_detaile.columns.values.tolist()
对每一列的元素进行查看

1.我们要对这一列的数据价格进行同样的处理,去掉不必要的符号便于运算

2.然后要求出最低消费,便于我们后边模型的建立

listings_detailed['minimum_cost']=(listings_detailed['cleaning_fee']+listings_detailed['price'])*listings_detailed['minimum_nights']

最低消费是费用加消费乘以最低天数。

3.要添加一个新字段。包含设施的数量,设施的数量与价格有直接关系

我们可以看到,设施用一个大括号括起来,我们可以用切片提取里面的数值,再用split分割逗号。

listings_detailed['accommodates_type']=pd.cut(listings_detailed['accommodates'],bins=[1,2,3,5,100],include_lowest=True,right=False,labels=['Single','Couple','Family','Group'])

4.再把剩余需要的数据提取,整合到新的df里边

listings_detailed['neighbourhood_group_cleansed'].head()
listings_detailed['review_scores_rating'].head()
listings_detailed_df=listings_detailed[['id','host_id','listing_url','room_type','neighbourhood_group_cleansed','price','cleaning_fee','amenities','n_amenities','accommodates','accommodates_type','minimum_nights','minimum_cost']]
listings_detailed_df.head()

得到一个新df,用来方便之后的运算

.二,对房间类型和社区类型进行初步分析

用饼图和柱状图对房间类型进行分析

room_type_counts=listings_detailed_df['room_type'].value_counts()
fig,axes = plt.subplots(1,2,figsize=(10,5))
axes[0].pie(room_type_counts.values,autopct='%.2f%%',labels=room_type_counts.index)
sns.barplot(room_type_counts.index,room_type_counts.values)
plt.tight_layout()

我们能看出entrie home即是整套房间,占比最高

然后对社区类型进行分析

neighbourhood_counts = listings_detailed_df['neighbourhood_group_cleansed'].value_counts()
sns.barplot(y=neighbourhood_counts.index,x=neighbourhood_counts.values,orient='h')

可以看出社区类型排名,都是一些比较专业的名,萨拉曼卡什么的。

三,对房东进行相关分析

host_number=listings_detailed_df.groupby('host_id').size().sort_values(ascending=False)
sns.distplot(host_number[host_number<10])


可以看出,拥有一套房的房东数量居多。把拥有的房屋数量划分下等级得出下图,

四,评论数量与时间分析
读取reviews文件的时候可以直接把date的类型进行转换

reviews=pd.read_csv('./reviews_detailed.csv',parse_dates=['date'])

对时间序列进行相关处理

reviews['year']=reviews['date'].dt.year
reviews['month']=reviews['date'].dt.month

查看下年份的分布情况:

reviews.groupby('year').size()


可以看的出,评论的数量在每年递增,知道2018年到顶峰,2019年有所下降。

说明用户的活跃度也越来越高。
我们再按照月份来分:

n_reviews_months=reviews.groupby('month').size()
sns.barplot(n_reviews_months.index,n_reviews_months.values)

得到

可以看出,4到7月用户的活跃度最高。

再做一个折线图,把历年评论数量整合在一起。
把历年评论数整合在一个表格

year_month_reviews=reviews.groupby(['year','month']).size().unstack('month').fillna(0)


然后把2016到2019的代码整合到一张图

fig,ax=plt.subplots(figsize=(10,5))
for index in year_month_reviews.index:series = year_month_reviews.loc[index]sns.lineplot(x=series.index,y=series.values,ax=ax)ax.legend(labels=year_month_reviews.index)
ax.grid()
ax.set_xticks(list(range(1,13)))


我们可以很方便地从图中看出各年评论的数量趋势

五,预测房间价格
首先我们可以看下影响房间价格的因素

'host_is_superhost',#超级房东,在爱彼迎混的比较久,价格可能会稍高
'host_identity_verified',#房东是否经过认证
'neighbourhood_group_cleansed',#社区
'latitude',#经度
'longitude',#纬度
'property_type',#公寓类型
'room_type',#房间类型
'accommodates',#可容纳人数
'bathrooms',#浴室数
'bedrooms',#卧室数
'cleaning_fee',#小费
'minimum_nights',#最少居住晚
'maximum_nights',#最多居住夜晚数
'availability_90',#在90天内有多少天是可用的
'number_of_reviews',#评论数量
'review_scores_rating',#评分
'is_business_travel_ready',#是否做好商务,旅游服务
'n_amenities',#设施数
'price'#价格

清理完异常值后,分割特征值和目标值

from sklearn.preprocessing import StandardScaler
#分割特征值和目标值
features = ml_listing.drop(columns=['price'])
targets=ml_listing['price']
features.head()

处理完成后,进行one-hot编码和标准化

#对特征值进行处理
#针对离散型数据进行one-hot编码
disperse_columns = ['host_is_superhost','host_identity_verified','neighbourhood_group_cleansed','property_type','room_type','is_business_travel_ready'
]
disperse_features = features[disperse_columns]
disperse_features = pd.get_dummies(disperse_features)# 对连续性数据进行标准化(因为特征值之间相差并不是很大,所以标准化的可能对预测结果影响不是很大)
continuouse_features = features.drop(columns=disperse_columns)
scaler = StandardScaler()
continuouse_features = scaler.fit_transform(continuouse_features)
continuouse_features

对处理后的特征值进行组合

#对处理后的特征进行组合
feature_array = np.hstack([disperse_features,continuouse_features])
feature_array

导入模型,进行预测

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error,r2_scoreX_train,X_test,y_train,y_test = train_test_split(feature_array,targets,test_size=0.25)
regressor = RandomForestRegressor()
regressor.fit(X_train,y_train)
y_predict = regressor.predict(X_test)print("平均误差:",mean_absolute_error(y_test,y_predict))
print("R2评分:",r2_score(y_test,y_predict))

预测结果

R2评分越接近1,结果越准确。

六,评论数量预测
评论数量分析用到reviews数据集

ym_reviews=reviews.groupby(['year','month']).size().reset_index().rename(columns={0:"count"})
features = ym_reviews[['year','month']]
targets = ym_reviews['count']# X_train,X_test,y_train,y_test = train_test_split(features,targets,test_size=0.25)
# regressor = RandomForestRegressor(n_estimators=100)
# regressor.fit(X_train,y_train)# y_predict = regressor.predict(X_test)# print("平均误差:",mean_absolute_error(y_test,y_predict))
# print("R2评分:",r2_score(y_test,y_predict))

可以得出平均误差与R2值

R2值很接近1,证明这个模型很很合适。
代入2019年10到12月的值

regressor = RandomForestRegressor(n_estimators=100)
regressor.fit(features,targets)y_predict = regressor.predict([[2019,10],[2019,11],[2019,12]
])y_predict

得到的就是预测值,分别是array([18252.94, 18020.23, 17785.06])

再把新的值代入可视化

predict_reviews = pd.DataFrame([[2019,10+index,x] for index,x in enumerate(y_predict)],columns=['year','month','count'])
final_reviews = pd.concat([ym_reviews,predict_reviews]).reset_index()
years = final_reviews['year'].unique()fig,ax = plt.subplots(figsize=(10,5))
for year in years:df = final_reviews[final_reviews['year']==year]sns.lineplot(x="month",y='count',data=df)ax.legend(labels=year_month_reviews.index)
ax.grid()
_ = ax.set_xticks(list(range(1,13)))

得到

至此,爱彼迎的数据分析算是完成了

爱彼迎的数据分析与建模相关推荐

  1. 五十三、爱彼迎数据集分析建模

    爱彼迎数据集分析建模为本专栏的Python数据分析案例. 因为文件比较大,所以保存了百度云 链接:https://pan.baidu.com/s/1geUgsLejvpTKgBmcSMSIdQ 提取码 ...

  2. Airbnb(爱彼迎)用户数据分析——tableau可视化和MySQL分析

    本文利用Airbnb用户的注册.订单和日志行为等数据,从用户画像.营销渠道转化率.订单漏斗分析三方面进行分析.我们需要考虑以下3个问题: 爱彼迎的目标用户是什么样的人群?有什么特点? 这些人群接受信息 ...

  3. 爱彼迎数据分析报告(修改)

    效果展示 (修改:使用pyecharts重新画图,并生成html进行展示) 代码链接:https://github.com/guotianyi960531/Airbnb- 1.简介 1.1 原始数据来 ...

  4. kaggle经典案例:爱彼迎租房数据探索

    公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ Airbnb是AirBed and Breakfast ( "Air-b-n-b" )的缩写,中文名 ...

  5. Plotly+Seaborn+Folium可视化探索爱彼迎租房数据

    Airbnb是AirBed and Breakfast ( "Air-b-n-b" )的缩写,中文名称之为:空中食宿,是一家联系旅游人士和家有空房出租的服务型网站,可以为用户提供各 ...

  6. python requests+json爬取ajax加载 爱彼迎深圳所有房源

    目的: 爬取爱彼迎深圳所有房源的房主,价格,房源介绍等信息 步骤如下: step1:获取房源页面url 登陆爱彼迎网站,搜索深圳房源 https://zh.airbnb.com/s/homes?ref ...

  7. 美通企业日报 | 微软和宝马推出开放式制造平台;爱彼迎Plus在中国发展势头强劲...

    要闻 舍弗勒城市车辆转向系统研究完成,可实现全自动平行泊车 微软和宝马推出开放式制造平台,支持智能工厂解决方案开发 爱彼迎Plus在华推出一周年,将再扩展到30多个城市 宁夏慢阻肺数字化管理中心与葛兰 ...

  8. 爱彼迎产品分析(Python)

    一.项目背景与目的 1 背景 Airbnb是一个旅行房屋租赁社区,用户可通过网络或手机应用程序发布.搜索度假房屋租赁信息并完成在线预定程序,其社区平台在191个国家.65,000个城市为旅行者们提供数 ...

  9. 爱彼迎数据采集与预处理-图片色彩分析

    1 数据收集 爱彼迎的数据主要通过数据集和爬虫采集. 方法一:登录Inside Airbnb: Get the Data网站,下载需要的城市数据. 注:这个网址更新速度与周期不定,且更新后,上次的数据 ...

最新文章

  1. 多线程EXecutor 柜架示例
  2. react源码总览(翻译)
  3. java面试开发过程中用到的问题
  4. 内存不足 java.lang.OutOfMemoryError: Java heap space
  5. 均衡原理_干货什么是负载均衡?负载均衡原理详解
  6. Linux网络——一种强制门户技术
  7. 【腾讯出品】2019互联网行业趋势报告
  8. 如何从JavaScript对象中删除键? [重复]
  9. linux的manual手册不存在,在 Linux 命令行下使用“原力”
  10. Iocomp 工业仪表盘控件包详细介绍说明
  11. Oracle函数——日期函数
  12. Dll入口函数参数详解...
  13. Excel下的数据挖掘:学生成绩统计分析实战之一分三率和离均率
  14. HCL软件,堆叠工程尝试,S5820V2-54QS-GE
  15. Android设置透明状态栏,仿ios状态栏
  16. C++学习系列(三)—— 泛型编程(STL)
  17. SAP ABAP 检查物料账期函数
  18. 如何成为一位数据科学家
  19. [读后感-Cayden原创] 读《1-2年纪,塑造孩子一生的关键》有感
  20. 新飞飞不显示服务器,《新飞飞》官方网站-新资料片《异域远征军》-网易Q萌战斗网游...

热门文章

  1. php中rowcount 意思,SQL中@@ROWCOUNT函数
  2. Java用JNA调用dll : Invalid memory access
  3. javax.persistence.OneToMany.orphanRemoval()Z 解决办法
  4. (转)找完工作后的感受总结,用以共勉!(兰大的,呵呵)[辉]
  5. 如何使用Prettier管理好代码一致性
  6. WSAStartup详解
  7. 我国的 五岳 是哪五座山,分别在哪个省
  8. java 设计数据字典_下拉框“数据字典”设计
  9. 安卓子view的前后关系,z轴效果更改的一些思路
  10. Highly-Resilient, Energy-Effificient Multipath Routing in Wireless Sensor Networks阅读报告