天善學院的數據分析框架css
思考:
1.任何一個公司都是以盈利爲目的,這裏天善做爲一個線上學習平臺,核心應該是用戶,以用戶學習付費課程而盈利html
2.以用戶爲核心,就涉及了用戶生命週期,適用於AARRR框架mysql
下面是基於AARRR框架畫出來的天善學院的數據分析框架:sql
此做業內容在第三週excel博客中也有詳細介紹。框架
1.全國點評數最高的飯店是哪家?函數
答:方法一:能夠用函數公式解決,在邏輯函數學習那裏已經介紹過了學習
=VLOOKUP(MAX(D:D),IF({1,0},D:D,C:C),2,0)
excel
或者爲=INDEX(C:C,MATCH(MAX(D:D),D:D,0))
code
方法二:其實按照秦老師說的排序方法應該更簡潔。orm
2.哪一個城市的飯店人均口味最好?
答:方法一:使用數據透視表處理,選擇地區爲行標籤,值爲口味設置爲求平均值。要獲得口味最好的店能夠用函數進行查找,也能夠對口味列進行降序排列。
方法二:使用AVERAGEIF函數解決,先把城市這列複製到M列,而後使用刪除重複項功能,在N2輸入函數公式:=AVERAGEIF(A:A,M2,F:F),最後再排序便可獲得。
3.哪一個類型的餐飲評價最好?
答:這裏餐飲評價具體指哪一個指標, 在這裏我姑且認爲是口味,環境,服務三者的平均值,因此應該插入一列名爲餐飲評價,而後在創建數據透視表。選擇類型爲行標籤,值爲餐飲評價求平均值。(另外一種方法與第二題同樣的,注意這裏由於茶館和酒吧都沒有評價數據,因此使用函數計算會報錯,可是不影響結果。)
4.類型爲川菜的店中,有多少個帶「辣」字,又有多少個帶「麻」字?
答:首先類型是川菜,而後還須要店名帶辣(麻)字,這裏有兩個條件而且是求個數,那麼可使用函數countifs。
=COUNTIFS(B:B,"川菜",C:C,"*辣*")
=COUNTIFS(B:B,"川菜",C:C,"*麻*")
5.口味、環境、服務,三個評價都在8.0以上的飯店有幾家?它們在哪一個城市的佔比最多?
答:這裏的第一問就是三個條件求個,一樣的是countifs函數。
=COUNTIFS(F:F,">=8.0",G:G,">=8.0",H:H,">=8.0")
第二問也是差很少,它多了個條件就是城市。作法是:先複製城市列到J列,而後刪除重複項,再K2中輸入函數公式:
=COUNTIFS(A:A,J2,F:F,">=8.0",G:G,">=8.0",H:H,">=8.0")/456
再對K列進行降序排列便可。
6.上海地區中,各個類型飯店服務前五名?
答:先對數據源進行篩選出上海地區,而後按類型的升序排序再按服務的降序排序,插入輔助列寫出排名並篩選出前五名便可。
7.沒有評價的飯店有幾家?
答:求飯店的家數,確定要用到計數函數,這裏有兩種寫法。
=COUNTIF(D2:D5864,"")
或者爲=COUNTA(C2:C5864)-COUNT(D2:D5864)
8.將人均價格劃分紅0~50,50~100,100~150,150~200,200+這幾個檔次, 各個城市分別有幾家?其中佔比又是多少?
答:這裏按人均價格劃分檔次,有部分是人均價格爲空值默認爲零劃爲第一檔(固然把這些清楚也能夠)。
作法是:在L1處創建一個檔次表,而後用以下公式肯定檔次
=LOOKUP(E2,$L$1:$L$6,$N$1:$N$6)
或者=VLOOKUP(E2,$L$1:$N$6,3,1)
再利用數據透視表進行肯定各城市的家數以及佔比。
9.將點評、人均、口味、環境、服務這幾個指標加工出一個綜合評價係數,而且計算哪十家店是最好的(開放題)。
答:這裏的評價係數就是秦老師以前講的指數法,主要考慮的是這些指標如何進行計算肯定係數,其中口味、環境、服務是相似的指標能夠用線性加權,點評與人均數值上相差比較大,應該用log的方法進行處理。在處理以前應該先清除空值。
10.對上海地區的日本料理,作一次描述性分析(開放題)
答:描述性分析是數據選項卡中數據分析裏的描述統計,包含統計的一些指標如最大值,最小值,平均數,中位數,方差等。
首先清楚空白數據,接着篩選出上海地區的日本料理,而後對數據區域進行描述統計。
此做業內容在第五週mysql博客中也有詳細介紹。
1.統計不一樣月份的下單人數
分析:首先應過濾出成功購買的數據便是已支付的,而後考慮統計不一樣月份是按月份分組須要用到groupby關鍵字,統計人數是計數須要用count函數,這裏要注意一個問題由於有的人有屢次購買行爲,因此統計人數時要去重。
語句:
select date_format(paidTime,"%y-%m") as M,count(distinctuserId)
from data.order
where isPaid = "已支付"
group by M
2.統計用戶三月份的回購率和復購率
分析:回購率=本月和下月都購買的人數÷本月購買人數
復購率=購買屢次的人數÷總購買人數
(1)回購率要統計本月和下月都購買的人數,在一張表裏是無法作到的,須要把表用join關聯起來,而後再進行統計
語句:
select t1.M,count(t1.userId),count(t2.userId), count(t2.userId)/count(t1.userId) as 回購率 from ( selectuserId,date_format(paidTime,"%Y-%m-02") as M from data.order where isPaid = "已支付" group by userId,M) as t1 left join ( selectuserId,date_format(paidTime,"%Y-%m-02") as M from data.order where isPaid = "已支付" group by userId,M) as t2 on t1.userId=t2.userId and t1.M = date_add(t2.M,interval -1 month) group by t1.M
(2)復購率應該分別統計出總購買人數,至少購買兩次的人數,而後再去求比值,其實這裏能夠按月份分組把每月的復購率都求出來而不用單獨把三月份數據過濾出來求復購率
語句:
select M,count(t.userId),count(if(tc>1,1,null)), count(if(tc>1,1,null))/count(t.userId) as 復購率 from ( SELECTdate_format(paidTime,"%y-%m") as M,userId,count(userId) as tc FROMdata.order where isPaid = "已支付" group by M,userId) as t group by M;
3.統計男女用戶的消費頻次是否有差別
分析:消費頻次是指在一段時間內每人的消費次數,計算式子爲
消費頻次 = 總消費次數 ÷ 總消費人數
按題目要求須要統計男女用戶則須要對sex進行分組,性別和消費在不一樣的表裏則須要用join關聯表,order表中未支付以及user表中性別的空值都須要過濾,而後在進行統計
語句:
select sex,count(t1.userId),count(distinct t1.userId), count(t1.userId)/count(distinct t1.userId) as 消費頻次 from (select * from data.orderwhere isPaid="已支付") as t1 inner join (select * from data.userwhere sex!="") as t2 on t1.userId=t2.id group by sex
4.統計屢次消費的用戶,第一次和最後一次消費間隔是多少?
分析:統計的是屢次消費的用戶,須要先把這些數據過濾出來,按用戶統計則須要對用戶進行分組,第一次消費時間和最後一次時間能夠分別用min、max函數計算出來,而後求間隔用日期時間函數
語句:
select userId,max(paidTime),min(paidTime), datediff(max(paidTime),min(paidTime)) as 消費間隔(天) from data.order where isPaid="已支付" group by userId
5.統計不一樣年齡段,用戶的消費金額是否有差別?
分析:首先應把已支付的人過濾出來,而後在此基礎加上按年齡段的分組,使用case……when……then語句。
語句:
select t2.ageGroup,sum(t1.price),count(distinct t1.userId), sum(t1.price)/count(distinct t1.userId) as 平均消費額 from ( select * fromdata.order where isPaid="已支付") as t1 inner join ( select id,timestampdiff(year,birth,now()) as age, case whentimestampdiff(year,birth,now()) <=20 then "0-20" when timestampdiff(year,birth,now()) <=30 then "20-30" when timestampdiff(year,birth,now()) <=40then "30-40" when timestampdiff(year,birth,now()) <=50 then "40-50" when timestampdiff(year,birth,now()) <=60 then "50-60" else "60+"end as age Group from data.user where birth >"0000-00-00") as t2 on t1.userId=t2.id group by ageGroup
6.統計消費的二八法則,消費的top20%用戶,貢獻了多少額度
分析:因爲limit後面不能夠接select語句,因此這題要分兩步解決。
第一步,先用select語句查詢出支付人數的20%和資金總額
第二步,再把查詢的人數寫到limit後面
語句:
select round(count(distinct userId)*0.2),sum(price) from data.order where isPaid="已支付" select sum(ts) as 消費額 from ( select userId,sum(price) as ts from data.order where isPaid="已支付" group by userId order by sum(price)desc limit 17130) as t