天天看點

某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總

本文資料集來源:Baby Goods Info Data

資料庫:MySQL

資料庫管理軟體:DataGrip

可視化分析軟體:Tableau

本文sql檔案、可視化分析源檔案位址:DataScience

文章目錄

  • 資料預處理與導入
    • 導入資料到資料庫
  • 資料探索:
    • Trade表
      • 統計缺失值資訊
      • 使用者數量:
      • 統計不同購買數量的使用者
      • 商品類别
      • 每次購買數量
      • 時間跨度
    • babyinfo表
      • 缺失值統計
      • 有資訊的使用者數量
      • 不同性别嬰兒的數量
  • 探索分析
    • 銷量資訊
      • 按天統計每天的銷量和活躍的使用者數量
      • 觀察銷量在一周内的變化
      • 分析按月購買的情況:
      • 2015年春節前後銷量詳細分析
        • 通過篩選器,觀察每年臘月初一到臘月十五的銷售額
        • 往年臘月的銷售額與同比增速
        • 觀察2014年和2015年臘月初一到臘月十五各産品大類的銷量與同比增速
        • 臘月每天的銷量變化
      • 對比每月新出生人數:
      • 銷量與季度
    • 産品類别分析
      • 每個大類奶粉的購買情況
      • 找到熱銷的子類資訊
    • 嬰兒階段分析
      • 每個年齡段的嬰兒數量和購買量:
      • 各年齡購買情況
    • 産品使用者畫像
      • **不同産品大類的使用者群體分布**
      • 不同使用者的産品購買比例
      • 不同産品子類的使用者群體分布
    • 複購情況分析
      • 建立複購使用者的視圖
      • 計算複購率
      • 查詢有重複購買行為使用者複購的是否是同一小類的奶粉
      • 查詢有重複購買行為使用者複購的是否是同一大類的奶粉
  • 分析結果彙總
    • 銷售趨勢分析
    • 春節銷量低谷分析
    • 銷售周期性分析
    • 不同類别産品銷量占比分析
    • 各年齡段銷售差異

資料預處理與導入

導入資料到資料庫

  1. 建立Trade表
create table trade
(
	user_id varchar(20) not null comment '使用者id',
	auction_id varchar(20) not null comment '購買行為編号',
	cat_id varchar(20) null comment '商品所屬的大類下的子類',
	cat1 varchar(15) null comment '商品所屬的大類',
	property text null comment '商品屬性',
	buy_mount int null comment '購買數量',
	day varchar(8) null comment '購買日期'
);

           
  1. 使用DataGrip将

    (sample)sam_tianchi_mum_baby_trade_history.csv

    導入trade表
  2. 建立babyinfo表
create table babyinfo
(
	user_id varchar(20) not null,
	birthday varchar(8) null,
	gender char null
);
           
  1. 使用DataGrip将

    (sample)sam_tianchi_mum_baby.csv

    導入babyinfo表
  2. 然後再在DataGrip修改日期資料的資料格式為date格式
    • 定義表格時,直接使用date格式,導入會出現錯誤
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總

資料探索:

Trade表

  • buy_mount (購買數量/銷量)
  • user_id(使用者id)
  • auction_id(購買行為編号)
  • cat1(商品所屬的大類)
  • cat_id(cat1的子類,是更細分的類别)
  • property(商品屬性)
  • day(購買時間)

統計缺失值資訊

select
       sum(user_id is null)
       ,sum(auction_id is null)
       ,sum(cat1 is null)
       ,sum(cat_id is null)
       ,sum(trade.property is null)
       ,sum(trade.buy_mount is null)
       ,sum(trade.day is null)
from trade;

           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 隻有144條記錄的商品屬性property有缺失

使用者數量:

select
       count(user_id)
      ,count(distinct user_id)
from trade;
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 29971條購買記錄中,卻有29944個使用者,說明隻有不到30個使用者購買超過兩次,說明奶粉類産品的複購率不是很高。

統計不同購買數量的使用者

select
buy_num
,count(user_id) as user_num
from
(
    select
    user_id
    ,count(user_id) as buy_num
    from trade
    group by user_id
    )as tem
group by buy_num
order by user_num;
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 99.92%的使用者都隻購買了一次

商品類别

select
       cat1,
       count(distinct cat_id) as 子類數量
from trade
group by cat1
order by 子類數量;
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 總共有六個大類,每個大類下面分别由數量不一的子類構成

每次購買數量

select
       buy_mount 每次購買數量
       ,count(user_id) 消費次數
from trade
group by buy_mount
order by 消費次數;
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總

時間跨度

select max(day),
       min(day)
from trade;
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 可以看到銷售資料從2012年7月開始,到2015年2月結束,其中2015年2月隻有5天的資料,資料不完整,在下面的聚類運算中,統計量會比較小

babyinfo表

  • user_id(使用者id)
  • birthday(出生日期)
  • gender:性别(0 男孩,1 女孩,2性别不明)

缺失值統計

select sum(user_id is null),
       sum(birthday is null),
       sum(gender is null)
from babyinfo;
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總

有資訊的使用者數量

select count(distinct user_id) -- 有資訊的使用者數量
from babyinfo;
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 雖然隻有3.2%的使用者有詳細的嬰兒年齡等資訊,但是考慮到資料抽樣的随機性,仍能反映出整體分布的一些規律資訊

不同性别嬰兒的數量

select gender, -- 不同性别的數量
       count(gender)
from babyinfo
group by gender;
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總

探索分析

銷量資訊

按天統計每天的銷量和活躍的使用者數量

  1. sql查詢語句
select day,
       sum(buy_mount) as 銷量,
       count(distinct user_id) as 使用者數量
from mytest.trade
group by day
order by day
           
  1. 使用tableau進行可視化
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 從圖中可以看到,在部分日期的銷量和使用者數量是平時資料幾千倍,可能會有異常,需要進行查明
  1. 查詢銷量異常記錄:
-- 查詢單次購買超過100的記錄數
select user_id,day,
       buy_mount
from trade
where buy_mount>100
order by buy_mount desc;
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 從結果中可以看到,有不少使用者的一次購買量超過了100罐,甚至有一次購買10000罐的,很有可能是批發商購買或者是刷單行為,需要對這些記錄進行篩選剔除
經調查:
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
嬰幼兒在0-1歲時,理論上一共需要81罐400g奶粉,假設使用者除“雙十一”、“618”外其他時間每次隻購買1罐,那麼兩個購物節平均需要承擔27罐奶粉,向上取整後,以單筆銷量超過30罐奶粉作異常值處理。
  1. 更改連接配接sql語句,剔除異常銷量資料,重新查詢後,銷量使用者數量圖如下:
select day,
       sum(buy_mount) as 銷量,
       count(distinct user_id) as 使用者數量
from mytest.trade
where buy_mount < 30
group by day
order by day
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 1 從銷量圖上可以看出,每年的銷量高峰是雙十一和雙十二購物期間
  • 2 在春節期間,銷量出現了明顯的低谷
  • 3 購物節的銷量呈現逐年增加的趨勢

觀察銷量在一周内的變化

-- 分析按星期的銷量,使用者量
select dayname(day) as D,
       sum(buy_num) as 銷量,
       sum(user_num) as 活躍使用者量
from
    (
        select
            day,
            sum(buy_mount ) as buy_num,
            count(distinct user_id) as user_num
        from trade
        where buy_mount<30
        group by day
        ) as tem
group by D,dayofweek(day)
order by dayofweek(day) ;

           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 可以看到周六日的銷量和活躍使用者數量都明顯小于工作日,很有可能是部分父母在周末需要帶孩子,而在工作日進行購買奶粉

分析按月購買的情況:

-- 分析按月購買的情況
select
       月份,
       max(if(年份 = 2012,buy_num,0)) as 2012年,
       max(if(年份 = 2013,buy_num,0)) as 2013年,
       max(if(年份 = 2014,buy_num,0)) as 2014年,
       max(if(年份 = 2015,buy_num,0)) as 2015年
from
    (
        select
        month(day) as 月份,
        year(day) as 年份,
        sum(buy_mount ) as buy_num,
        count(distinct user_id) as user_num
        from trade
        where buy_mount<30
        group by year(day), month(day)
        ) as tem
group by 月份
order by 月份;
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 在每年中,銷量主要呈現出兩個大的周期
    • 周期1:2-5月銷量上升,5-7月銷量下降
    • 周期2:7-11月銷量上升,11-2月份銷量下降
  • 主要可能影響因素:
    • 1 不同月份新生兒數量不同
    • 2 不同月份的促銷力度不同
  • 每年的1,2月份的銷量資料相對都比較低,可能是受到春節的影響,在後面需要對春節前後的銷量進行細緻分析,來采取2015年2月中後期的銷售決策

2015年春節前後銷量詳細分析

  • 2013年春節:2月9日-2月15日
  • 2014年春節:1月30日-2月6日
  • 2015年春節:2月19日-2月25日
  • 目前的資料隻截至到了2015年2月5日(臘月十七)
  • 可以通過調用往年臘月的銷售資料,來輔助2015年臘月的銷售決策

通過篩選器,觀察每年臘月初一到臘月十五的銷售額

某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 可以看到,2015年的臘月初一到十五的銷量雖然仍然很大,但是相比于去年的同比增速,今年的增速有所下降

往年臘月的銷售額與同比增速

某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 截至目前2015年2月5日(據春節還有14天),已完成銷量已經超過了去年的臘月銷量,但是要想超過去年的增長率,仍然有

    1029✖(1.7741)-1129= 696

    罐的銷售額需要完成,平均每天需要完成

    696/14=49.7

    罐的銷售目标。

觀察2014年和2015年臘月初一到臘月十五各産品大類的銷量與同比增速

某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 觀察可知,隻有28大類的銷售同比增速超過了去年,38大類産品增速基本與去年平均增速持平,二其他大類的增速都比較低于預期,需要詳細分析營銷政策。

臘月每天的銷量變化

某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 可以看到,臘月十五過後,銷量會逐漸下降,是以需要在接下來1-2周内,馬上采取一定的促銷活動,來保證本月的銷售量達到或超過去年的同比增速。

對比每月新出生人數:

  • 資料生成參考嬰兒資訊一節
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 通過與上圖比較可以看出,5月份的銷量高峰,很可能是受到8月份出生人數增加的影響,父母為了提前準備,進而提前購買了奶粉
  • 11月的銷量高峰,是受到打折促銷的影響

銷量與季度

某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 每年都是第一季度的銷量最少(春節影響),第二、第三季度銷量中等,第四季度銷量最高(打折促銷,為過年囤貨)。

産品類别分析

每個大類奶粉的購買情況

-- 每個大類奶粉的購買情況
select
       cat1 as 類别,
        sum(buy_mount) as 銷量,
       count(distinct user_id) as 使用者數
from trade
where buy_mount<30
group by cat1
order by cat1;
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 50008168、28、50014815都是銷量比較大的産品類别,相比而言,其他類别的銷量比較少
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 銷量排名基本與使用者數量相同,除了38産品,雖然銷量排名第四,但是使用者量卻比較少,可能是使用者單次購買量較大,或者店家的滿減促銷做的比較好,需要進一步調查。

找到熱銷的子類資訊

-- 尋找熱銷子類(銷量前十或使用者數量前十)
select
tem1.*,
使用者量排名, 使用者量
from
         (select cat_id,
                 @j := @j + 1 as 銷量排名,
                 銷量
          from (select @j := 0) as t,
               (
                   select cat_id,
                          sum(buy_mount) as 銷量
                   from trade
                   where buy_mount < 30
                   group by cat_id
                   order by sum(buy_mount) desc) as n
         ) as tem1

join
         (select cat_id,
                 @i := @i + 1 as 使用者量排名,
                 使用者量
          from (select @i := 0) as t,
               (
                   select cat_id,
                          count(distinct user_id ) as 使用者量
                   from trade
                   where buy_mount < 30
                   group by cat_id
                   order by count(distinct user_id ) desc) as m
         ) as tem2
on tem1.cat_id = tem2.cat_id
where 銷量排名<10 or 使用者量排名<10;
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 可以看到,銷量比較高的奶粉子類的銷量,都基本上都在逐年增加,其中50010558的銷量增長迅速,可以在今年進行優先推廣。
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 通過tableau可以清晰地檢視不同子類銷售量的變化趨勢,進而采取不同的措施,來提高銷量

嬰兒階段分析

  • 1段:0-6個月(4-6月已可食用輔食)
  • 2段:6-12個月(6月大:可食用糊狀或泥狀的食物;9月大:可食用有硬度食物)
  • 3段:1-3歲
  • 4段:3-7歲(已經符合入讀公辦幼稚園的年齡,此階段奶類流質食物已經不是主流)
-- 建立年齡段資訊視圖
create view mytest.age_info as
(
    select
    b.user_id,
       cat1,
       cat_id,
       buy_mount,
       day as buy_day,
       birthday,
       (
           case
            when datediff(day,birthday)/30<0 then '未出生'
            when datediff(day,birthday)/30<6 then '0-6個月'
            when datediff(day,birthday)/365<1 then '6-12個月'
           when datediff(day,birthday)/365<3 then '1-3歲'
           when datediff(day,birthday)/365<7 then '3-7歲'
           else '大于七歲'
           end
        ) as 年齡分段,
       if((floor(((to_days(`t`.`day`) - to_days(`b`.`birthday`)) / 365)) < 0), '未出生',
          floor(((to_days(`t`.`day`) - to_days(`b`.`birthday`)) / 365))) AS `年齡`,
       (
           case gender
           when 0 then '男'
           when 1 then '女'
           else '不明'
           end
        ) as 性别
from babyinfo b
join trade t
    on b.user_id = t.user_id
where t.buy_mount<30
    );

           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總

每個年齡段的嬰兒數量和購買量:

-- 每個年齡段的人數和購買量:
select
        年齡分段,
       count(distinct user_id) as 人數,
       sum(buy_mount) as 購買總量
from age_info
group by 年齡分段
order by field(年齡分段,'未出生','0-6個月','6-12個月','1-3歲','3-7歲','大于七歲');
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 1.在整個食用奶粉的各個階段中,1-3歲對奶粉的需求量最大
  • 2.可以看到,有相當一部分家長,購買奶粉都是在孩子出生前購買的,可以考慮針對這種提前購買的行為,有針對性地展開銷售

各年齡購買情況

某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 可以看到,0-1歲的使用者量和奶粉銷量都最高,随着年齡的上升,嬰兒逐漸能夠食用其他食物,奶粉需求逐漸下降

産品使用者畫像

不同産品大類的使用者群體分布

某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總

不同使用者的産品購買比例

某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總

不同産品子類的使用者群體分布

某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總

複購情況分析

建立複購使用者的視圖

create view mytest.multi_info
as
    (
select
       user_id,
       cat_id,
       cat1,
       buy_mount,
       day
from trade
where
      user_id in
(
    select
    user_id
    from trade
    where buy_mount<30
    group by user_id
    having count(auction_id)>1
)
order by  user_id,day);
           

計算複購率

-- 計算複購率
select
a.num1/count(distinct user_id) as 複購率
from
       (select count(distinct user_id) as num1 from multi_info) as a ,
     trade b;
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總

查詢有重複購買行為使用者複購的是否是同一小類的奶粉

-- 查詢有重複購買行為使用者複購的是否是同一小類的奶粉
select
       t.num as 複購産品種類數,
       count(user_id) as 使用者數
from
    (select
    user_id,count(distinct cat_id) as num
    from multi_info
    group by user_id) as t
group by t.num;

           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總

查詢有重複購買行為使用者複購的是否是同一大類的奶粉

-- 查詢有重複購買行為使用者複購的是否是同一大類的奶粉
select
       t.num as 複購産品種類數,
       count(user_id) as 使用者數
from
    (select
    user_id,count(distinct cat1) as num
    from multi_info
    group by user_id) as t
group by t.num;
           
某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總

分析結果彙總

銷售趨勢分析

某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 可以看到每年的銷售高峰在雙十一,雙十二兩個高峰,其他時間銷售量變化比較平穩
  • 銷售量呈現逐年增加的趨勢,并且增速逐年增加
  • 每年的春節期間,會出現銷量低谷

春節銷量低谷分析

某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 截至目前2015年2月5日(據春節還有14天),已完成銷量已經超過了去年的臘月銷量,但是要想超過去年的增長率,仍然有

    1029✖(1.7741)-1129= 696

    罐的銷售額需要完成,平均每天需要完成

    696/14=49.7

    罐的銷售目标。
  • 隻有28大類的銷售同比增速超過了去年,38大類産品增速基本與去年平均增速持平,二其他大類的增速都比較低于預期,需要詳細分析營銷政策。
  • 臘月十五之後,銷量就會逐漸下降,是以需要在接下來一周内,采取營銷措施,來刺激銷量,進而達到去年的增長率

銷售周期性分析

某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總
  • 在每年中,銷量主要呈現出兩個大的周期
    • 周期1:2-5月銷量上升,5-7月銷量下降
    • 周期2:7-11月銷量上升,11-2月份銷量下降
  • 可以看到周六日的銷量和活躍使用者數量都明顯小于工作日,很有可能是部分父母在周末需要帶孩子,而在工作日進行購買奶粉
  • 5月份的銷量高峰,很可能是受到8月份出生人數增加的影響,父母為了提前準備,進而提前購買了奶粉

不同類别産品銷量占比分析

某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總

各年齡段銷售差異

某電商線上奶粉銷量資料分析-SQL+Tableau自動化分析資料預處理與導入資料探索:探索分析分析結果彙總

參考資料:

1隻會環比下降3%的資料分析師還有救嗎?

2電商嬰兒用品資料分析(SQL)