Mysql数据分析1_酒店预定需求分析

MySQL数据分析1_酒店预定需求分析

本文所有数据来源于kaggle:Hotel booking demand
使用工具:MySQL,Excel

1.背景

您是否想过一年中什么时候预定酒店房间?还是为了获得最佳每日房价而获得的最佳停留时间?如果您想预测酒店是否可能收到过多的特殊要求,该怎么办?该酒店预订数据集可以帮助您探索这些问题!

2.提出问题

1)酒店运营分析(城市酒店和假日酒店预订需求和入住率比较、客流量趋势、渠道等角度)
2)用户分析(预定时长、入住时长、预定餐饮、特殊要求、用户类型等)
3)顾客一年中最佳预定酒店时间是什么时候?
4)酒店该怎样增加收入?

3.数据理解

Mysql数据分析1_酒店预定需求分析_第1张图片
Mysql数据分析1_酒店预定需求分析_第2张图片
以上两张图片是字段和部分数据截图,原始数据共32个字段,每个字段119390行
对每个字段理解如下:

字段 解释
hotel Hotel(H1 = Resort Hotel or H2 = City Hotel)
is_canceled 是否取消预定(取消(1),不取消(0))
lead_time 预定时长(从预定到入住的时间)
arrival_date_year 到达时间(年)
arrival_date_month 到达时间(月)
arrival_date_day_of_month 到达时间(日)
arrival_date_week_number 到达时间(在当年为第几周)
stays_in_weekend_nights 在周末的入住天数
stays_in_week_nights 在工作日的入住天数
adults 入住成人数
children 入住儿童数
babies 入住婴儿数
meal 预定餐饮类型(Undefined/SC – no meal package; BB – Bed & Breakfast; HB – Half board (breakfast and one other meal – usually dinner; FB – Full board (breakfast, lunch and dinner))
market_segment 细分市场( “TA” means “Travel Agents” and “TO” means “Tour Operators”)
distribution_channel 分销渠道
is_repeated_guest 是否为老客(是(1),否(0))
previous_cancellations 客户在当前预订之前取消的先前预订数
previous_bookings_not_canceled 客户在当前预订之前未取消的先前预订数
reserved_room_type 预定房间类型
assigned_room_type (酒店)安排的入住房间类型(房型可能会受时间等因素有所调整)
deposit_type 押金类型
agent 预定的旅行社ID
company 预定的公司ID
days_in_waiting_list 酒店方确认预定所需时长(从顾客下预定订单到酒店方确认订单所需时长)
customer_type 顾客类型(Contract - when the booking has an allotment or other type of contract associated to it; Group – when the booking is associated to a group; Transient – when the booking is not part of a group or contract, and is not associated to other transient booking; Transient-party – when the booking is transient, but is associated to at least other transient booking)
adr 日平均消费
required_car_parking_spaces 顾客要求提供的停车位数量
total_of_special_requests 顾客特殊需求的总数量
reservation_status 预定最终状态(Canceled – booking was canceled by the customer; Check-Out – customer has checked in but already departed; No-Show – customer did not check-in and did inform the hotel of the reason why)
reservation_status_date 预定最终状态确认时间

4.数据清洗

分为两个大方向,用户方向和酒店运营方向

用户方向

– 1.选择用户画像需要字段的子集,创建用户表。

CREATE table hotel_customer
    AS(SELECT hotel,lead_time,adults,children,babies,country,meal,stays_in_week_nights,stays_in_weekend_nights,booking_changes,customer_type,required_car_parking_spaces,total_of_special_requests
		FROM hotel_bookings)

– 2.清洗数据,检查数据完整性

SELECT count(hotel),count(lead_time),count(adults),count(children),count(babies),count(country),count(meal),count(stays_in_week_nights),count(stays_in_weekend_nights),count(booking_changes),count(customer_type),count(required_car_parking_spaces),count(total_of_special_requests)
FROM hotel_customer;

在这里插入图片描述
可以看到只有country字段有小部分记录缺失,考虑使用众数填充。

-- 先查询出众数
SELECT country
FROM hotel_customer
WHERE country IS NOT NULL
GROUP BY country
ORDER BY count(1) DESC
LIMIT 1
-- 使用众数进行填充              
UPDATE hotel_customer 
SET country=IFNULL(country,'PRT')

– 3.为便于后续分析,增加字段总人数,停留时间。检查字段数据格式,发现计算列皆为int,可以直接进行运算。

ALTER TABLE hotel_customer ADD COLUMN 总人数 INT NULL;
ALTER TABLE hotel_customer ADD COLUMN 停留时间 INT NULL;
UPDATE hotel_customer SET 总人数=adults+children+babies;
UPDATE hotel_customer SET 停留时间=stays_in_week_nights+stays_in_weekend_nights;
-- 检查数据
SELECT *
FROM hotel_customer

– 4.检查数据是否合法,查看是否有总人数为0的记录

SELECT *
FROM hotel_customer
WHERE 总人数=0;

Mysql数据分析1_酒店预定需求分析_第3张图片

发现存在总人数为0的记录,删除并重新检查数据

DELETE FROM hotel_customer WHERE 总人数=0;
SELECT *
FROM hotel_customer
WHERE 总人数=0;

完成用户表数据清洗

最终用户表的部分截图如下
Mysql数据分析1_酒店预定需求分析_第4张图片

酒店运营方向

– 1.选择酒店运营方向子集,建立表格,研究预定入住率、取消率、客户结构、房型、押金、客流量、渠道等。

CREATE TABLE hotel_business AS
(SELECT hotel,is_canceled,reservation_status,is_repeated_guest,customer_type,reserved_room_type,deposit_type,assigned_room_type,distribution_channel,arrival_date_year,arrival_date_month,arrival_date_week_number,arrival_date_day_of_month,market_segment,agent,adr,company
FROM hotel_bookings);

– 2.清洗数据,查看数据有无缺失

SELECT count(hotel),count(is_canceled),count(reservation_status),count(is_repeated_guest),count(customer_type),count(reservation_status),COUNT(deposit_type),COUNT(assigned_room_type),count(distribution_channel),count(arrival_date_year),count(arrival_date_month),count(arrival_date_week_number),count(arrival_date_day_of_month),count(market_segment),count(agent),count(adr),count(company)
FROM hotel_business;

结果发现agent和company字段存在空缺,如下图
Mysql数据分析1_酒店预定需求分析_第5张图片
company字段空缺过多,考虑删除字段。
agent缺失代表无旅行社,可以使用sc进行填充(这里不使用0进行填充是因为不确定agent的id是不是存在0的情况,所以直接使用英文字符进行填充)

-- 0填充agent,删除company字段
ALTER TABLE hotel_business DROP COLUMN company;
UPDATE hotel_business SET agent=IFNULL(agent,'sc');

– 3.将月份列的英文转化为数字,并将三列日期列合成为一列,删除之前的三列日期

-- 修改日期格式并把到达时间合称为一列,删除之前三列。
-- 新加一列month,将英文格式月份转为数字
ALTER TABLE hotel_business ADD COLUMN month VARCHAR(10) NULL;
UPDATE hotel_business SET month=month(STR_TO_DATE(arrival_date_month,'%M'));
-- 三列时间合一
ALTER TABLE hotel_business ADD COLUMN arrival_date VARCHAR(255) NULL;
UPDATE hotel_business SET arrival_date=CONCAT(arrival_date_year,'-',month,'-',arrival_date_day_of_month);
-- 删除之前三列时间数据
ALTER TABLE hotel_business 
DROP arrival_date_year,
DROP arrival_date_month,
DROP arrival_date_day_of_month,
DROP month;

– 4.查看adr(日平均消费)是否存在负值,若有删除记录

SELECT adr
FROM hotel_business
WHERE adr<0;

DELETE FROM hotel_business WHERE adr<0;

– 5.查看几个带选项的字段中是否存在不合法的值

SELECT reservation_status,count(1)
FROM hotel_business
GROUP BY reservation_status;

SELECT customer_type,count(1)
FROM hotel_business
GROUP BY customer_type;

SELECT distribution_channel,count(1)
FROM hotel_business
GROUP BY distribution_channel;

SELECT market_segment,count(1)
FROM hotel_business
GROUP BY market_segment;

发现distribution_channel和market_segment中都含有Undefined的值,删去

DELETE FROM hotel_business WHERE distribution_channel='Undefined' OR market_segment='Undefined';

酒店运营表数据清洗结束

5.数据分析

酒店订单分析

Mysql数据分析1_酒店预定需求分析_第6张图片

Mysql数据分析1_酒店预定需求分析_第7张图片
1.两酒店的预定取消率都非常高,酒店方需考虑取消率高的原因
2.城市酒店订单占比大,人们更喜欢住城市酒店
Mysql数据分析1_酒店预定需求分析_第8张图片

客人大多数都是新客,作为酒店是正常现象,但是酒店方可以使用适当方法提高用户复购率,如定期给老客发送优惠信息,增加售后咨询等。

客流量

Mysql数据分析1_酒店预定需求分析_第9张图片
Mysql数据分析1_酒店预定需求分析_第10张图片
1.结果表明,两酒店在第二、三季度收费都会增加,特别是度假酒店在第三季度收费会猛增;
2.城市酒店在每年的第二季度迎来客流量高峰期,之后客流量递减至次年的第一季度,城市酒店应该合理安排各个季度的人力物力,确保在高峰期时有足够的资源周转,在淡季时减少人力物力的投入,完成降本;
3.度假酒店客流量一直比较稳定,可以想办法增加客流量,比如在第二、三季度时收费不要提高过多。

预定与分房

顾客预定房型与入住房型对比如下
Mysql数据分析1_酒店预定需求分析_第11张图片
Mysql数据分析1_酒店预定需求分析_第12张图片
Mysql数据分析1_酒店预定需求分析_第13张图片

  1. A房型交付率较低,但是预定人数最多,再结合价格因素推测A房型是最高性价比房型,可能也是酒店为了吸引更多顾客的主推房型。
  2. CDEF房型交付率较高,可能是酒店最想让客人预定的房型,从价格来看也可以反映出这一点,这四种房型可能是酒店较为盈利的房型

分销渠道

Mysql数据分析1_酒店预定需求分析_第14张图片

Mysql数据分析1_酒店预定需求分析_第15张图片
Mysql数据分析1_酒店预定需求分析_第16张图片
Mysql数据分析1_酒店预定需求分析_第17张图片

  1. 结果表明人们大多会在线上预定酒店,其次为线下旅行社;
  2. 价格方面,线上预定价格是最高的,其次为酒店直接预定,线上预定价格贵可能与手续费有很大关系;
  3. 旅行社客流量对比显示,id为9号和240号的客流量相当多,酒店可以考虑给予这两个旅行社优惠力度,吸引更多顾客

用户预定分析

Mysql数据分析1_酒店预定需求分析_第18张图片
Mysql数据分析1_酒店预定需求分析_第19张图片

Mysql数据分析1_酒店预定需求分析_第20张图片
Mysql数据分析1_酒店预定需求分析_第21张图片

Mysql数据分析1_酒店预定需求分析_第22张图片
Mysql数据分析1_酒店预定需求分析_第23张图片

  1. 大多数顾客会提前三个月以上预定,其次为1周内预定,猜测一周内预定可能与出差有关,酒店给予合作公司一定的优惠力度来促进消费;
  2. 几乎所有人都会修改订单,大多数人会修改三次以内;
  3. 大多数人会预定单餐(早/晚餐),几乎所有人都会要求有一个停车位置;
  4. 大多数人会提出<=3个特殊需求,其中两个基本上为订餐和停车位需求,酒店可以重点关注下约11%的第三需求(如带婴儿的顾客需要婴儿床等),这方面可作为酒店的亮点服务,推出一些服务来满足这些顾客的需求,来提高用户留存或吸引顾客;
  5. 95%以上的顾客都只会住一周以内。

顾客类型分析

Mysql数据分析1_酒店预定需求分析_第24张图片
Mysql数据分析1_酒店预定需求分析_第25张图片

  1. 可以看出,96%以上的顾客都是临时用户
  2. PRT国籍的顾客占比高达41%,酒店方要维持住PET国籍的顾客订单量,同时可采取一些方式,如增加饮食菜系等来吸引其他国家的顾客。

6.总结

顾客一年中最佳预定酒店时间是什么时候?

  1. 对于用户而言,在每年的第一或者是第四季度预定度假酒店是最好的选择,在这段时间内,客流量是一年中最少的时候,酒店方安排的房型会和预定的房型的匹配程度会比较高,同时这是一年中预定价格最划算的时期;
  2. 若是个人出行,建议直接跟酒店预订,可以免去第三方线上机构预定的手续费;
  3. 若是跟团出行,建议线下预定,优先考虑id为9号的旅行社,因为该旅行社带给酒店的流量大,可能会有更多优惠。
  4. 鉴于大多数顾客都会有订餐或者车位需求,酒店可能会为了游客方便,在预定时默认选择一些增值服务(如餐饮),预定时要注意类似的选项。

酒店该怎样增加收入?

  1. 两酒店订单取消率都很高,建议酒店要寻求方法来提高预定入住率,如在顾客预定等待时期,定期发送提醒信息或者周边旅游推荐给顾客来吸引顾客;
  2. 建议酒店方使用适当方法提高用户复购率,如定期给老客发送优惠信息,增加售后咨询等;
  3. 建议酒店合理安排各个季度的人力物力,确保在高峰期时有足够的资源周转,在淡季时减少人力物力的投入,完成降本;
  4. 建议酒店给流量大的旅行社一定的优惠,从而继续保持相应旅行社的大流量;

你可能感兴趣的:(mysql,数据分析)