深圳骏域网站建设专家88,创意响应式网站建设,建设香帅摩托车官网,专业团队歌曲文章目录#x1f4da;引言#x1f4d6;数据加载以及基本观察#x1f4d1;缺失值观察及处理#x1f516;缺失值观察以及可视化#x1f516;缺失值处理#x1f4d6;用户数据探索#x1f4d1;什么时间预定酒店将会更经济实惠#xff1f;#x1f4d1;哪个月份的酒店预订是…
文章目录引言数据加载以及基本观察缺失值观察及处理缺失值观察以及可视化缺失值处理用户数据探索什么时间预定酒店将会更经济实惠哪个月份的酒店预订是最繁忙的商家数据探索按市场细分的不同预定情况是怎样的什么样的人更容易取消预订数据编码特征筛选构建模型并预测根据特征重要性得出结论总结引言 ♂️作者简介生鱼同学大数据科学与技术专业硕士在读曾获得华为杯数学建模国家二等奖MathorCup 数学建模竞赛国家二等奖亚太数学建模国家二等奖。 ✍️研究方向复杂网络科学 兴趣方向利用python进行数据分析与机器学习数学建模竞赛经验交流网络爬虫等。 在有预定酒店的需求时你是否考虑过以下的问题
你是否曾想过每年什么时候是预订酒店房间的最佳时间为了获得最佳的每日价格最佳的逗留时间如果你想预测一家酒店是否有可能收到过多的特殊要求呢
在本文中我们就对Kaggle平台上的酒店需求数据集进行分析这个数据集包含了一家城市酒店和一家度假酒店的预订信息并包括诸如预订时间、逗留时间、成人、儿童和/或婴儿的数量以及可用的停车位数量等信息。话不多说我们开始吧。 本项目中的数据来源于Kaggle开放数据Hotel booking demand链接如下 Hotel booking demand 需要的小伙伴可以自行下载获取。 数据加载以及基本观察
在进行数据加载之前我们首先对数据的各个列进行解释具体情况如下表所示
列名表达含义hotel酒店H1度假酒店或H2城市酒店is_canceled表示预订是否被取消1或不被取消0的值。lead_time从预订进入PMS的日期到抵达日期之间的天数。arrival_date_year到达日期的年份arrival_date_month到达日期的月份arrival_date_week_number抵达日期的年份的周数arrival_date_day_of_month抵达日期当天stays_in_weekend_nights客人入住或预订入住酒店的周末晚数周六或周日。stays_in_week_nights客人入住或预订入住酒店的周夜数周一至周五。adults成人的数目children小孩的数目babies婴儿的数目meal预订的膳食类型。类别以标准接待餐包的形式呈现 未定义/SC–无餐包BB–床和早餐HB–半餐早餐和另外一餐–通常是晚餐FB–全餐早餐、午餐和晚餐。country国家。类别以ISO 3155-3:2013的格式表示market_segment市场细分的指定。在类别中TA 指 “旅行社”TO 指 “旅游经营者”。distribution_channel预订分销渠道。术语 TA 指 “旅行社”TO 指 “旅游经营者”is_repeated_guest表示该预订名称是否来自重复的客人1或不0的值。previous_cancellations在当前预订之前被客户取消的先前预订的数量previous_bookings_not_canceled在本次预订之前客户没有取消的先前预订的数量reserved_room_type保留的房间类型的代码。出于匿名的原因用代码代替名称。assigned_room_type为预订分配的房间类型的代码。有时由于酒店运营的原因如超额预订或客户要求分配的房间类型与预订的房间类型不同。出于匿名的原因用代码代替指定。booking_changes从预订被输入PMS到入住或取消的那一刻起对预订进行更改/修正的次数deposit_type指明客户是否支付了押金以保证预订。这个变量可以有三个类别 无押金–没有押金不退款–押金的价值相当于总住宿费用可退款–押金的价值低于总住宿费用。agent进行预订的旅行社的IDcompany进行预订或负责支付预订的公司/实体的ID。出于匿名的原因将出示身份证而不是指定的身份。days_in_waiting_list预订在确认给客户之前在等待名单中的天数customer_type预订的类型假设是四类之一 合同–当预订有一个分配或其他类型的合同与之相关时团体–当预订与一个团体相关时暂住–当预订不是团体或合同的一部分并且没有与其他暂住预订相关时暂住方–当预订是暂住的但至少与其他暂住预订相关时adr日均房价的定义是用所有住宿交易的总和除以总的住宿夜数。required_car_parking_spaces预客户需要的车位数量total_of_special_requests客户提出的特殊要求的数量如双床或高楼层。reservation_status预订的最后状态假设是三类中的一类 取消–预订被客户取消退房–客户已入住但已离开未入住–客户未入住但已通知酒店原因reservation_status_date最后一次设置状态的日期。这个变量可以和ReservationStatus一起使用以了解预订何时被取消或客户何时退房。
可以看到数据所给出的特征还是比较多的。接下来我们就基于上述数据来解决一些商业角度可能关心的问题本文解决的问题如下
首先是从用户的角度来看关心的问题
什么时间预定酒店将会更经济实惠哪个月份的酒店预订是最繁忙的
其次是商家更容易关心的问题
客人来自哪里按市场细分的不同预定情况是怎样的对酒店提出特殊要求的人有什么共同点什么样的人更容易取消预订
首先我们调用**info()**函数来对数据进行初步的观察。代码和结果如下 我们可以看到公司这列有明显的缺失情况。与此同时在这里我们也能了解到不同的数据类型。
缺失值观察及处理
缺失值观察以及可视化
首先提取所有缺失的列以及它们缺失的个数情况代码如下
data_missing data.isnull().sum()
data_missing data_missing[data_missing 0]
data_missing结果如下 接下来我们对数据的缺失值进行一些简单的柱状图可视化。代码如下
data_missing.plot.bar()缺失值处理
我们首先来看一下缺失值的实际意义代表情况如下
列名表达含义children小孩的个数country国家。类别以ISO 3155-3:2013的格式表示agent进行预订的旅行社的IDcompany进行预订或负责支付预订的公司/实体的ID。出于匿名的原因将出示身份证而不是指定的身份。
基于上述特征的实际意义我们对其进行如下的处理
children 缺失数据相对较少我们选择删除携带孩子缺失的数据行。country因为后续我们可能会用到该数据所以设置为‘Unknown’。agent预定的ID在本次数据分析中不太重要删除该特征。company公司的数据在本次数据中不太重要而且确实程度过大直接删除。
相关代码如下
# inplace表示是否在原数据进行填充
data.dropna(axis0, howany,subset[children], inplaceTrue)
# 用Unknown填充country为Nan的数据
data.fillna({country:Unknown}, inplaceTrue)
# 删除agent,company的列
data.drop([agent,company],axis1, inplaceTrue)用户数据探索
在进行了用户数据的基础探索后接下来就开始对其进行一些分析工作。
什么时间预定酒店将会更经济实惠
作为游客或者用户我们较为关注的通常是酒店是否经济实惠。在下面的工作中我们首先提取没有取消的那些订单作为我们分析的数据然后对其进行一些处理最后进行可视化代码如下
import seaborn as sns
# 提取没有取消订单的数据
data_no_canceled data[data[is_canceled]0]
# 算出人均价格
data_no_canceled[adr_deal] data_no_canceled[adr]/ (data_no_canceled[adults] data_no_canceled[children])
# 对结果进行可视化
ax sns.lineplot(datadata_no_canceled, x arrival_date_month,yadr_deal,huehotel)
# 设置图片尺寸
ax.figure.set_size_inches(12,6)结果如下 在图中我们可以发现在七月Resort Hotel价格最高而在其他时间City Hote的价格会稍高一些。另外在十一月以及十二月两种酒店的价格是全年最低的也就是最经济实惠的。
另外我还探究了不同房型的价格分布情况代码如下
# 提取数据并进行排序
roomtype data_no_canceled[[hotel, reserved_room_type, adr_deal]].sort_values(reserved_room_type)
# 绘制箱线图
ax_box sns.boxplot(data roomtype, x reserved_room_type,yadr_deal,huehotel)
ax_box.figure.set_size_inches(12,6)结果如下 可以看到在图中City Hotel的E房型价格偏高而Resort Hotel的F房型价格偏高。
哪个月份的酒店预订是最繁忙的
基于上述的分析我们进一步探索哪个月份的酒店预订是最繁忙的代码如下
# 提取用户们到达的日期并对其进行排序可视化
data_no_canceled[arrival_date_month].value_counts().sort_values(ascendingFalse).plot.bar()结果如下 在图中可以看到578月是最繁忙的时间而秋冬季节的酒店人数相对来说较少。
商家数据探索
作为商家较为关心的问题即用户的组成以便更好的提供服务。另外做为商家了解不同用户的订购渠道对于进一步的进行市场营销将会有积极的作用。
按市场细分的不同预定情况是怎样的
我们首先基于数据来探索预订酒店的不同国家的人数占比并进行可视化代码如下
import plotly.express as px
# 计算不同国家的百分比
country_data pd.DataFrame(data[country].value_counts())
country_data.columns [guest_num]
country_data[guest_persent] round(country_data[guest_num] / country_data[guest_num].sum() * 100,2)# 对小于一定比例的国家归类
country_data.loc[OTHER,guest_num] country_data[country_data[guest_persent] 2][guest_num].sum()
country_data.loc[OTHER,guest_persent] round(country_data.loc[OTHER,guest_num] / country_data[guest_num].sum(),2)
# 可视化
country_data.drop(country_data[country_data[guest_persent] 0.5].index, inplaceTrue)
fig px.pie(country_data,values guest_persent,names country_data.index)
fig.update_traces(textpositioninside, textinfovaluepercentlabel)结果如下 进一步的我们对不同预订酒店的渠道进行了统计代码如下
data_no_canceled[market_segment].value_counts().plot.bar()结果如下 从图中可以看到预订的主力军都是旅行社居多。另外在线预定远比线下预订的数目要多很多。针对商家可以对线上的广告推荐等进一步的进行策划营销。
什么样的人更容易取消预订
最后我们希望了解什么样的人更容易取消预订。商家可以针对这部分用户进行服务优化并进一步的改善酒店的经营模式。在这里我们准备基于数据进行机器学习模型的构建。
数据编码
在这一步中我们将对字符型的数据做编码处理从而更好的适应不同模型代码如下
from sklearn import preprocessing
data_to_ml data.copy()
# 因为我们预测的目标是是否取消了预订所以删除这两列
data_to_ml.drop([reservation_status,reservation_status_date], axis1, inplaceTrue)
# 对大部分特征进行编码处理
for col in [hotel,arrival_date_month,meal,country,market_segment,distribution_channel,customer_type,deposit_type]:encoder preprocessing.LabelEncoder()encoder.fit(data_to_ml[col])data_to_ml[f{col}_labeled] encoder.transform(data_to_ml[col])data_to_ml.drop([col], axis1, inplaceTrue)在这里我们有一个特殊的操作即我们根据现有的特征提取了一个新的特征即酒店预留的房间以及用户预定的是否是相同的。因为如果作为用户发现预定的房间和实际房间不同很可能会取消预订。具体代码如下
import numpy as np
data_to_ml[is_reserved_assigned_equal] np.where(data_to_ml[reserved_room_type]data_to_ml[assigned_room_type],1,0)
data_to_ml.drop([reserved_room_type,assigned_room_type], axis1, inplaceTrue)特征筛选
在这一步中我们对所有处理后的数据进行了皮尔逊相关分析并做了可视化代码如下所示
import matplotlib.pylab as plt
correlation data_to_ml.corr(pearson)f, ax plt.subplots(figsize (9, 9))
plt.title(Correlation of Numeric Features with,y1,size16)
sns.heatmap(correlation,square True, vmax0.8)结果如下 可以看到我们所挑选的特征自相关性不算太高可以接受。与此同时其针对我们所选定的目标is_canceled来说相关性也是可以接受的所以我们暂时不对其进行处理。
构建模型并预测
在这一部分中我们构建了主流的模型并使用10折交叉认证对其进行验证代码如下 from sklearn import svm
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn import model_selectionx_all data_to_ml.drop(is_canceled,axis1)
y_all data_to_ml[is_canceled]# 为了避免训练时间过长这里我选择了部分数据集
x_train x_all.loc[:19999,:]
y_train y_all[:20000]model_svm svm.SVC()
model_knn KNeighborsClassifier()
model_rf RandomForestClassifier()model_dict {SVM:model_svm,KNeighborsClassifier:model_knn,RandomForestClassifier:model_rf
}
# 训练模型
for model in model_dict:model_dict[model].fit(x_train, y_train)scores model_selection.cross_val_score(model_dict[model], Xx_train, yy_train, verbose1, cv 10, scoringf1)print(model, scores.mean())SVM 0.6480724503120129
KNeighborsClassifier 0.6577070795293697
RandomForestClassifier 0.7363861778481174可以看到随机森林的效果是可以接受的接下来我们对其特征重要性进行可视化。
根据特征重要性得出结论
调用随机森林中自带的特征重要性函数并对其进行了可视化代码如下
# 构建Series让特征重要性和特征名称一一对应
feature_importances_series pd.Series(list(model_rf.feature_importances_), index x_all.columns, )
# 对其进行排序
feature_importances_series feature_importances_series.sort_values(ascendingFalse)
# 进行可视化
sns.barplot(x feature_importances_series.values, y feature_importances_series.index, orienth)结果如下 如图所示用户取消预订和逗留时长、用户国籍、到达年份都有很强的相关性。另外我们提取的特征也是非常重要的即用户预定的房间和实际的房间不同时用户将会更容易取消预订。
总结
在本文中我们基于python对酒店预订需求进行分析并从多种角度对其展开了探索性的工作。这对于养成数据分析习惯有很大的帮助在实际工作或者学习中还需要不断练习。
感兴趣的朋友们可以自己按照上述步骤进行操作或在评论区与我讨论。
需要源码的朋友可以私信我进行索取我们下次再见。 文章转载自: http://www.morning.xkpjl.cn.gov.cn.xkpjl.cn http://www.morning.fbmjl.cn.gov.cn.fbmjl.cn http://www.morning.wmfmj.cn.gov.cn.wmfmj.cn http://www.morning.jbxfm.cn.gov.cn.jbxfm.cn http://www.morning.rmppf.cn.gov.cn.rmppf.cn http://www.morning.lxthr.cn.gov.cn.lxthr.cn http://www.morning.zpkfb.cn.gov.cn.zpkfb.cn http://www.morning.dfffm.cn.gov.cn.dfffm.cn http://www.morning.skbbt.cn.gov.cn.skbbt.cn http://www.morning.lffrh.cn.gov.cn.lffrh.cn http://www.morning.zrpbf.cn.gov.cn.zrpbf.cn http://www.morning.rdmn.cn.gov.cn.rdmn.cn http://www.morning.jbtlf.cn.gov.cn.jbtlf.cn http://www.morning.gqcsd.cn.gov.cn.gqcsd.cn http://www.morning.pmysp.cn.gov.cn.pmysp.cn http://www.morning.nrqtk.cn.gov.cn.nrqtk.cn http://www.morning.jpwkn.cn.gov.cn.jpwkn.cn http://www.morning.zdsqb.cn.gov.cn.zdsqb.cn http://www.morning.fdfdz.cn.gov.cn.fdfdz.cn http://www.morning.sryyt.cn.gov.cn.sryyt.cn http://www.morning.qlrwf.cn.gov.cn.qlrwf.cn http://www.morning.znqxt.cn.gov.cn.znqxt.cn http://www.morning.dskmq.cn.gov.cn.dskmq.cn http://www.morning.cjwkf.cn.gov.cn.cjwkf.cn http://www.morning.rjbb.cn.gov.cn.rjbb.cn http://www.morning.bzcjx.cn.gov.cn.bzcjx.cn http://www.morning.wnnlr.cn.gov.cn.wnnlr.cn http://www.morning.wfpmt.cn.gov.cn.wfpmt.cn http://www.morning.wmpw.cn.gov.cn.wmpw.cn http://www.morning.ptmsk.cn.gov.cn.ptmsk.cn http://www.morning.fbbpj.cn.gov.cn.fbbpj.cn http://www.morning.nlkm.cn.gov.cn.nlkm.cn http://www.morning.ymyhg.cn.gov.cn.ymyhg.cn http://www.morning.gyzfp.cn.gov.cn.gyzfp.cn http://www.morning.tdxnz.cn.gov.cn.tdxnz.cn http://www.morning.rqnml.cn.gov.cn.rqnml.cn http://www.morning.jyznn.cn.gov.cn.jyznn.cn http://www.morning.wttzp.cn.gov.cn.wttzp.cn http://www.morning.cnfjs.cn.gov.cn.cnfjs.cn http://www.morning.sgrwd.cn.gov.cn.sgrwd.cn http://www.morning.ytbr.cn.gov.cn.ytbr.cn http://www.morning.lffbz.cn.gov.cn.lffbz.cn http://www.morning.yhpl.cn.gov.cn.yhpl.cn http://www.morning.lchtb.cn.gov.cn.lchtb.cn http://www.morning.ngcsh.cn.gov.cn.ngcsh.cn http://www.morning.rbbzn.cn.gov.cn.rbbzn.cn http://www.morning.kqxwm.cn.gov.cn.kqxwm.cn http://www.morning.prlgn.cn.gov.cn.prlgn.cn http://www.morning.cmqrg.cn.gov.cn.cmqrg.cn http://www.morning.kyjpg.cn.gov.cn.kyjpg.cn http://www.morning.pslzp.cn.gov.cn.pslzp.cn http://www.morning.xtqr.cn.gov.cn.xtqr.cn http://www.morning.jrqbr.cn.gov.cn.jrqbr.cn http://www.morning.dbcw.cn.gov.cn.dbcw.cn http://www.morning.tlbdy.cn.gov.cn.tlbdy.cn http://www.morning.gwdkg.cn.gov.cn.gwdkg.cn http://www.morning.fmqng.cn.gov.cn.fmqng.cn http://www.morning.bhbxd.cn.gov.cn.bhbxd.cn http://www.morning.nsncq.cn.gov.cn.nsncq.cn http://www.morning.tclqf.cn.gov.cn.tclqf.cn http://www.morning.cdrzw.cn.gov.cn.cdrzw.cn http://www.morning.dsgdt.cn.gov.cn.dsgdt.cn http://www.morning.gydth.cn.gov.cn.gydth.cn http://www.morning.srbmc.cn.gov.cn.srbmc.cn http://www.morning.ldhbs.cn.gov.cn.ldhbs.cn http://www.morning.sqnrz.cn.gov.cn.sqnrz.cn http://www.morning.bmyrl.cn.gov.cn.bmyrl.cn http://www.morning.jrslj.cn.gov.cn.jrslj.cn http://www.morning.sqdjn.cn.gov.cn.sqdjn.cn http://www.morning.nswcw.cn.gov.cn.nswcw.cn http://www.morning.wpqcj.cn.gov.cn.wpqcj.cn http://www.morning.ykmg.cn.gov.cn.ykmg.cn http://www.morning.hymmq.cn.gov.cn.hymmq.cn http://www.morning.wtdyq.cn.gov.cn.wtdyq.cn http://www.morning.bsrp.cn.gov.cn.bsrp.cn http://www.morning.dskmq.cn.gov.cn.dskmq.cn http://www.morning.datadragon-auh.cn.gov.cn.datadragon-auh.cn http://www.morning.rshijie.com.gov.cn.rshijie.com http://www.morning.kybjr.cn.gov.cn.kybjr.cn http://www.morning.zmlnp.cn.gov.cn.zmlnp.cn