数据分析项目实战——Airbnb数据分析
爱彼迎官网:
1、业务背景与分析目的
Airbnb是一款短租产品,作为旅行者和房东之间的媒介颠覆了酒店行业。目前,Aribnb作为短租产品的头部品牌,业务涉及到190+个国家的34,000+ 个城市。
在Airbnb发展如此迅速的同时,是否可以从数据中发现业务存在的问题?
目的:探索数据集,发现数据规律和异常数据,提出改进建议指导业务发展。
定义问题: 1、价格区间是否合理
2、Airbnb的用户画像
3、通过评论数据集查看Airbnb流量渠道情况
4、数据的分析与预测
数据源:https://www.kaggle.com/dgomonov/new-york-city-airbnb-open-data
2、calendar数据集分析(价格情况等)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as snscalendar = read_csv("./data/calendar.csv")
calendar.head()
去掉数据中的&和,符号,并将日期从字符串类型转化为日期类型:
calendar['Price'] = calendar['Price'].str.replace(r"[$,]","",regex=True).astype(np.float32)
calendar['adjusted_price'] = calendar['adjusted_price'].str.replace(r"[$,]","",regex = True).astype(np.float32)
calendar['date'] = pd.to_datetime(['date'])
calendar['date'].head()
添加星期和月的列:
calendar['weekday'] = calendar['date'].dt.weekday
calendar['month'] = calendar['date'].dt.month
根据月份将价格进行分组并求出平均值,绘出柱状图:
month_price = calendar.groupby('month')['price'].mean()
sns.barplot(month_price.index,month_price.values)
绘制价格小于300的直方图:
sns.barplot(calendar[calendar['price']<300]['price'])
3、listings数据集分析(房子情况)
将列转化成列表来查看所有数据情况:
listings = read_csv("./data/listings.csv")
listings.columns.values。tolist()
去掉数据中的&和,符号,并将小费中的空值替换为0:
listings['Price'] = listings['Price'].str.replace(r"[$,]","",regex=True).astype(np.float32)
listings['cleaning_fee'] = listings['cleaning_fee'].str.replace(r"[$,]","",regex=True).astype(np.float32)
listings['cleaning_fee'].fillna(0,inplace = True)
添加新字段,最低消费:
listings['minimum_cost'] = (listings['Price'] + listings['cleaning_fee'])*listings['minimum_nights']
listings['minimum_nights'].head()
设施数量:
listings['n_amenities'] = listings['amenities'].str[-1:1].str.split(",").apply(len)
根据可容纳的人数,添加一个新的列,用来表示类型:Single(1),Couple(2),Family(5),Group(100)
listings['accommodates_type'] = pd.cut(listings['accommodates'],bins=[1,2,3,5,100],include_lowest=True,right=False,labels='Single','Couple','Family','Group')
listings['accommodates_type']
房子所在区域与评分:
listings['neighbourhood_group_cleansed'].head()
listings['review_scores_rating'].head()
并先取出需要的数据:
查看房间类型的情况,并绘制出饼图和柱状图:
room_type_counts=listings['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()
房子类型数量的条形图:
neighbourhood_counts = lingtings['neighbourhood_group_cleansed'].values_counts()
sns.barplot(y = neighbourhood_counts.index,x = neighbourhood_counts.values,orient = 'h')
将数据分组并进行进一步的处理,去掉空值,并按行求出所对应的比例,并按第一列数据进行从大到小的排序:
neighbour_room _type = listings.groupby['neighbourhood_group_cleansed','room_type'].size() \
.unstack('room_type').fillna(0) \
.apply(lambda row:row/row.sum(),axis=1) \
.sort_values('Entire home/apt',ascending = False)
neighbour_room _type
绘制出比例条形图:
columns = neighbour_room _type.columns
plt.figure(figsize=(10,5))
index = neighbour_room _type.index
plt.barh(index,columns=neighbour_room _type[columns[0]])
left = neighbour_room _type[columns[0]].copy()
plt.barh(index,columns=neighbour_room _type[columns[1]],left=left)
left += neighbour_room _type[columns[1]].copy()
plt.barh(index,columns=neighbour_room _type[columns[2]],left=left)
left += neighbour_room _type[columns[2]].copy()
plt.barh(index,columns=neighbour_room _type[columns[3]],left=left)
plt.legend(columns)
房东房源数量分析
可以看出大多房东都只有一套房子,少部分有两套,超过两套的都很少
host_number = listings.groupby('host_id')
sns.distplot(hostnumber[host_number<10])
host_number_bins = pd.cut(host_number,bins=[1,2,3,5,100],include_lowest=True,right=False, \
labels=['1','2','3-4','5+']).value_counts()
plt.pie(host_number_bins,autopct="%.2f%%",labels=host_number_bins.index)
4、评论数据集分析
reviews = pd.read_csv("./data/reviews_detals.csv",parse_dates=['date'])
reviews.head()
增加年和月两列,根据年和月分别进行分组,计算出每一年,每一月的评论数量,并绘制出柱状图(2019年10月-12月无数据):
reviews['year'] = reviews['date'].dt.year
reviews['month'] = reviews['date'].dt.monthn_reviews_year = reviews.groupby('year').size()
sns.barplot(n_reviews_year.index,n_reviews_year.values)
n_reviews_month = reviews.groupby('month').size()
sns.barplot(n_reviews_month.index,n_reviews_month.values)
由上面价格图知道每年五六月份为销售价格增长期,也即销售增长期,所以评论数量也会随之增长,从上图中也能表现出来
将两组数据进行汇总,并绘制出折线图:
year_month_reviews = reviews.groupby(['year','month']).unstack('month').fillna(0)
year_month_reviews
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()
pic=ax.set_xsticks(list(range(1,13)))
之后可根据公司业务对上述图形进行分析,如2017-2018年评论数量增幅巨大,可能公司在这两年间做出了一些业务调整或业务拓展等等。
5、预测房间价格
导入相关模块
from sklearn.preprocessing import StandardScaler
对价格有影响的字段:
查看这些字段的详细信息:
ml_listings = listings_detailed[listings['price']<300][['host_is_superhost','host_identity_verified','neighbour_group_cleansed','property_type','room_type','is_business_travel_ready']
disperse_features=features[disperse_columns]]
ml_listings.info()
删除异常值,分割特征值和目标值:
ml_listings.dropna(axis=0,inplace=True)features=ml_listings.drop(columns=['price'])
targets=ml_listings['price']
针对其中的离散型数据进行one-hot编码:
disperse_columns=['host_is_superhost','host_identity_verified','neighbour_group_cleansed','property_type','room_type','is_business_travel_ready']
disperse_features=features[disperse_columns]disperse_feature=pd.get_dummies(disperse_features)
disperse_feature
对连续型数据进行标准化(因为特征值之间相差不是很大,所以标准化可能对预测的结果影响不是很大):
continuous_features=features.drop(columns=disperse_columns)
scaler=StandardScaler()
continuous_features=scaler.fit_transform(continuous_features)
对处理后的特征横向进行组合:
feature_array=np.hstack([disperse_features,continuous_features])
构建训练模型,并进行预测:
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
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=LinearRegression()
regressor.fit_transform(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))
模型准确度不太好,使用随机森林进行预测:
from sklearn.ensemble import RandomForestRegressorX_train,X_test,y_train,y_test=train_test_split(feature_array,targets,test_size=0.25)
regressor=RandomForestRegressor()
regressor.fit_transform(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))
6、评论数量预测
reviews.head()
ym_reviews=reviews.groupby(['year','month']).size().reset_index().rename(coiumns={0:'count'})
ym_reviews
构建模型,使用随机森林进行预测,并查看准确率:
features=ym_reviews[['year','month']]
targets=ym_reviews['count']X_train,X_test,y_train,y_test=train_test_split(feature_array,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))
由结果可看出模型预测准确率较好,因此对2019年10月,11月和12月的数据进行预测:
features=ym_reviews[['year','month']]
targets=ym_reviews['count']regressor=RandomForestRegressor(n_estimators=100)
regressor.fit(features,targets)y_predict=regressor.predict([2019,10],[2019,11],[2019,12])
y_predict
预测后结果为:
将预测值转换为DataFrame类型,并将预测值和源数据进行堆叠拼接,然后绘制出折线图:
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()
pic=ax.set_xsticks(list(range(1,13)))
数据分析项目实战——Airbnb数据分析相关推荐
- 【数据分析项目实战】Python爬取BOSS直聘岗位和数据分析
说明:这是一个数据分析项目全流程(附带项目实例),本篇教程来源于网络,胖哥对此进行了完整的梳理,并把用到的数据+代码完全奉上.如需数据+完整代码可以直接到文章最后获取. 这里面的数据,我只爬取了部分, ...
- 福布斯系列之数据采集 | Python数据分析项目实战
1 数据采集概述 开始一个数据分析项目,首先需要做的就是get到原始数据,获得原始数据的方法有多种途径.比如: 获取数据集(dataset)文件 使用爬虫采集数据 直接获得excel.csv及其他数据 ...
- 【项目实战】Python基于波动率模型(ARCH和GARCH)进行股票数据分析项目实战
说明:这是一个机器学习实战项目(附带数据+代码+文档+代码讲解),如需数据+代码+文档+代码讲解可以直接到文章最后获取. 1.项目背景 在衍生产品定价和风险管理中,对当前波动率是很感兴趣的,这是因为需 ...
- 数据分析项目实战项目一:CPC广告优化以及bilibili订单分析(下)
第一章:电商平台数据分析思路与bilibili会员购介绍 1.1互联网电商平台数据分析的一般思路 互联网电商平台数据分析的一般思路一般分为以下三步:找出问题,分析问题,解决问题.其中,找出问题包括描述 ...
- 数据分析项目实战day1
目录 针对股票数据的项目分析实战 1.数据预处理 2.调用to_dsv方法把数据保存到本地 3.删除unnamed列 4.找出所有收盘比开盘上涨超过3%的日期 5. 找出所有收盘比开盘 ...
- 福布斯系列之数据分析思路篇 | Python数据分析项目实战
福布斯每年都会发布福布斯全球上市企业2000强排行榜(Forbes Global 2000),这个排行榜每年发布的时候,国内外总有新闻会热闹的讨论一番,但很少见到比较全面的分析. 因此才有了这样一个想 ...
- 最新高清仿驴妈妈旅行网大数据分析项目实战
目录 第1章 大数据基本技能储备 1.1.项目介绍.mp4 1.2.hadoop介绍.mp4 1.3.SSH免密码登录.mp4 1.4.JAVA安装.mp4 1.5.Hadoop安装及验证.mp4 1 ...
- 数据分析项目实战项目二:入驻商用户画像体系
第一章:电商平台入驻商数据分析思路与亚马逊相关信息介绍 1.1 互联网电商平台入驻商数据分析的一般思路 互联网电商平台入驻商数据分析的一般思路一般分为以下三步:获得数据,分析业务需求,产生数据成果.其 ...
- 银行贷款客户拉新活动分析——数据分析项目实战
1.案例背景 Thera Bank是一家拥有不断增长客户群的银行.这银行中大多数客户的存款规模都是不一样的.由于贷款业务的客户数量很少,所以银行希望有效地将存款用户转化为贷款用户以此扩大贷款业务量的基 ...
- 大数据分析项目实战--天猫订单综合分析
天猫订单综合分析 分析订单转化率.销量趋势.地域分布统计等. 文章目录 天猫订单综合分析 一.数据背景 二.分析目的 三.读取数据 导入相关包 读取并查看数据 四.处理数据 规范字段名称 重复值与缺失 ...
最新文章
- HTML的标签分为哪几类?各标签语法格式是怎样的?
- 双边滤波+ 通俗自己理解
- mysql的学习笔记
- java基础----IO序列化Serializable
- how is SAP UI5 bindItems implemented
- oracle客户端改字符集没有用,ORACLE客户端乱码 修改Oracle客户端字符集
- oracle导出大数据
- 平安银行java面试_平安银行JAVA笔试题一.doc
- 安装和维护ImageJ
- 浏览器-Charset:Chrome浏览器升级后右键工具中的编码修改功能没有了的解决工具
- vc++之windows api
- 学信网学位认证报告在哪
- html属性 id去重,JS相关知识点总结
- 【测试】18.系统测试及类型
- 大一寒假培训(二)——快排与桶排
- 用于视觉问答的基于关系推理和注意力的多峰特征融合模型《Multimodal feature fusion by relational reasoning and attention for VQA》
- 微信小程序通过云函数进行微信支付
- php 获取姓名拼音首字母
- 实验0:了解和熟悉操作系统实验
- java符合规律的随机数_云风的 BLOG
热门文章
- dfasdfad大发
- python将xls文件转换xlsx
- 有一定基础的JAVA学习笔记_02(面向对象)
- 如何使用kindle看代码?linux下的简单方法
- 利用Exchange服务同步iOS和android中的联系人
- 策略模式Java实现
- 内核态的文件操作函数:filp_open、filp_close、vfs_read、vfs_write、set_fs、get_fs
- java pdf 水印_java 如何给pdf文件加水印
- 对接熊迈SDK工作记录之实时视频和云录像功能集成
- iPhone免越狱Git服务器搭建教程-iSH