滴滴打車數據分析(SQL+Excel)

1. 數據說明

數據來源於滴滴打車的數據,爲了方便,只截取了一部分數據。現有四張表,分別是“司機數據”表,“訂單數據”表,“在線時長數據”表,“城市匹配數據”表。

  • 司機數據表
    在這裏插入圖片描述
  • 訂單數據表
    在這裏插入圖片描述
  • 在線時長數據表
    在這裏插入圖片描述
  • 城市匹配數據表
    在這裏插入圖片描述

2. 業務需求

2.1 分析出2020年8月各城市每天的司機數、快車訂單量和快車流水數據

思路:

2020年8月”,可以用where + between and 函數來對時間進行條件限制
各城市”,城市在“城市匹配數據“表中,可以用“城市“來分組(group by)
每天的XX”, 對於“每天”這樣的問題,用“日期“來分組(group by),統計可以用sum/ count函數

2.1.1 2020年8月各城市每天的司機數

select 
	b.城市名稱, 
	a.日期, 
	count(distinct 司機id) as 司機數
from 
	司機數據 as a
	left join 
	城市匹配數據 as b
	on a.城市id=b.城市id
where 
	日期 BETWEEN '2020-08-01' and '2020-08-31'
group by 
	a.城市id, 
	a.日期

運行結果
在這裏插入圖片描述

2.1.2 2020年8月各城市每天的快車訂單量

select 
	c.城市名稱,
	a.日期,
	count(a.訂單id) as 快車訂單量
from 
	訂單數據 as a
	left join 
	司機數據 as b
	on a.司機id=b.司機id
	left join 
	城市匹配數據 c
	on b.城市id= c.城市id
where 
	a.日期 between '2020-08-01' and '2020-08-31'
	and a.產品線id=3
group by 
	c.城市名稱,
	a.日期

運行結果:
在這裏插入圖片描述

2.1.3 2020年8月各城市每天的快車流水

select 
	c.城市名稱,
	a.日期,
	sum(a.流水) as 快車流水
from 
	訂單數據 as a
	left join 
	司機數據 as b
	on a.司機id=b.司機id
	left join 
	城市匹配數據 c
	on b.城市id= c.城市id
where 
	a.日期 between '2020-08-01' and '2020-08-31'
	and a.產品線id=3
group by 
	b.城市id,
	a.日期

運行結果:

在這裏插入圖片描述

2.2 分析出2020年8月和9月,每個月的北京市新老司機(首單日期在當月爲新司機)的司機數、在線時長和TPH(訂單量/在線時長)數據

2.2.1 2020年8月和9月,每個月的北京市新司機的司機數

通過遞進的方式求解,先求 每個月的司機數,再求 新司機

  • 每個月的司機數
select 
	month(日期) as 月份 ,
	count(司機id) as 司機數 
from 
	司機數據
group by 
	month(日期) 

運行結果
在這裏插入圖片描述

  • 從表中找到新司機,添加篩選條件
select 
	month(日期) as 月份 ,
	count(司機id) as 新司機數 
from 
	司機數據
where 
	year(首次完成訂單時間)=year(日期)
	and month(首次完成訂單時間)=month(日期)
	and( 日期 between '2020-08-01' and '2020-08-31'
				or 日期 between '2020-09-01' and '2020-09-31')
	and 城市id='100000'
group by 
	date_format(日期,'%Y-%m')

運行結果:
在這裏插入圖片描述

2.2.2 2020年8月和9月,每個月的北京市新司機的在線時長

對於在線時長的計算,用到 “ 在線時長數據” 表。“每個月”按月份分組(group by),在線時長的總長利用sum(在線時長)來計算。新司機表中並沒有在線時長數據,

select 
	date_format(a.日期,'%Y-%m') as 年月,
	sum(b.在線時長) as 新司機在線時長
from
	(select 
		*
	from 
		司機數據
	where 
		year(首次完成訂單時間)=year(日期)
		and month(首次完成訂單時間)=month(日期)
		and( 日期 between '2020-08-01' and '2020-08-31'
					or 日期 between '2020-09-01' and '2020-09-31')
		and 城市id='100000'
	) as a
	left join 在線時長數據 as b
	on a.司機id=b.司機id
group by 
	年月

運行結果
在這裏插入圖片描述

2.2.3 2020年8月和9月,每個月的北京市新司機的TPH(訂單量/在線時長)

在線時長已經求出,這裏只需求解訂單量了。訂單量的計算,會用到 “訂單數據” 表,用count(訂單id)來計算。


select 
	date_format(a.日期,'%Y-%m') as 年月,
	count(b.訂單id) as 訂單量
from
	(select 
		*
	from 
		司機數據
	where 
		year(首次完成訂單時間)=year(日期)
		and month(首次完成訂單時間)=month(日期)
		and( 日期 between '2020-08-01' and '2020-08-31'
					or 日期 between '2020-09-01' and '2020-09-31')
		and 城市id='100000'
	) as a
	left join 訂單數據 as b
	on a.司機id=b.司機id
group by 
	年月

運行結果:
在這裏插入圖片描述

2.2.4 如何求老司機人數

把等於換成不等於, and 換成 or

year(首次完成訂單時間) <> year(日期)
or month(首次完成訂單時間) <> month(日期)

2.3 分別提取司機數大於20,司機總在線時長大於2小時,訂單量大於1,乘客數大於1的城市名稱數據

2.3.1 司機數大於20的城市名稱

司機id 位於司機數據表中, 城市名稱位於城市匹配數據表中,
司機數大於20可以使用 having + sum函數


select 
	b.城市名稱,
	a.司機數
from 
	(
	select 
		城市id,
		count(司機id) as 司機數
	from 
		司機數據
	group by 
		城市id 
	having count(司機id)>20
	) as a
	left join  
	(
	select 
		城市id,
		城市名稱
	from 
		城市匹配數據 
	)as b
	on b.城市id=a.城市id

運行結果:
在這裏插入圖片描述

2.3.2 司機總在線時長大於2小時城市名稱

總在線時長位於在線時長數據表中,城市名稱位於城市匹配數據表中,這兩個表之間沒有交集,所以需要一箇中間表(司機數據表)來連接兩表。
時長大於2小時 可以使用having篩選,sum 函數求和。


select 
	a.司機id,
	a.總在線時長,
	c.城市名稱
from 
(
	(
	select 
		司機id,
		sum(在線時長) as 總在線時長
	from 在線時長數據
	group by 司機id
	having sum(在線時長)>2
	) as a

	left join 
	(
	select 
		司機id,
		城市id
	from 
		司機數據
	) as b
	on a.司機id=b.司機id 

	join 城市匹配數據 as c
	on b.城市id=c.城市id 
)

			

運行結果:
在這裏插入圖片描述

2.3.3 訂單量大於1的城市名稱

訂單量位於訂單數據表中,城市名稱位於城市匹配數據中,兩表沒有交集,需要中間表司機數據表

select 
	a.司機id,
	a.訂單量,
	c.城市名稱
from 
(
	(
	select 
		司機id,
		count(訂單id) as 訂單量
	from 
		訂單數據
	group by 
		司機id 
	having 
		訂單量>1
	) as a

	left join 
	(
	select 
		司機id,
		城市id
	from 
		司機數據
	) as b
	on a.司機id = b.司機id

	join 城市匹配數據 as c
	on b.城市id= c.城市id
)

運行結果:

在這裏插入圖片描述

2.3.4 乘客數大於1的城市名稱

乘客數可以從訂單數據表,通過count(乘客id)來計算,城市名稱位於城市匹配數據中,兩表沒有交集,需要中間表司機數據表

select 
	a.司機id,
	a.乘客數,
	c.城市名稱
from 
(
	(
	select 
		司機id,
		count(乘客id) as 乘客數 
	from 
		訂單數據
	group by 
		司機id 
	having 
		乘客數>1
	) as a

	left join 
	(
	select 
		司機id,
		城市id
	from 
		司機數據
	) as b
	on a.司機id = b.司機id

	join 城市匹配數據 as c
	on b.城市id= c.城市id
)

運行結果:

在這裏插入圖片描述

3 數據可視化(Excel)

對2中提取出的數據使用透視表,進一步可視化 ,

北京上海天津不同城市的司機數:
在這裏插入圖片描述
不同時間的司機人數
在這裏插入圖片描述
個城市司機人數佔比
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章