2020年9月9日 星期三

15_電商女鞋消費分析_老闆如何進貨?

 記得!系統分析的課程教授說:資訊系統是協助人類做決策,並不是取代人類

記得!資訊管理的課程教授說:資訊管理脫離不了人類的行為模式

記得!巨量資料的課程教授說:從龐大及雜亂無章的資料萃取有用的資訊

寫這篇文章想起這三位教授所講的話,雖然我不是很優秀的學生,每次上課周公總是喜歡叫我登入,甚至強迫叫我登入,由此可見周公是如此的喜歡我,但我還是深深記得這三句話,就用此資料集來...紀念....嗯....有點怪.....啊...應該說  感謝!

是的!進貨是個問題,但是貨進太少會讓消費者等太久,貨進太多東西賣不出去形成庫存,而這來來回回的過程中都是錢的投資,所以身為碼農的我,如何從龐大雜亂無章的資料分析出消費者的購買行為,找出有用的資訊協助老闆做進貨的決策,是本篇的重點。

首先從大方向角度再深入剖析

一、該購物網站鞋子的銷售狀況及百分比

簡單講就是在這個網站中消費者有購買和沒購買的狀況,直接上ggplot了解狀況

ggplot(data = shoes_dup)+

  geom_bar(mapping = aes(shoes_dup$prices.isSale))

看起來沒買是比較多(會不會失業!),精確的數字為何?

prop.table(table(shoes_dup$prices.isSale))

沒買的七成,有購買的約三成左右,所以來看年度銷售

二、年度銷售統計,金額以台幣呈現
首先將有購買的資料篩選出來並存在SalesTrue變數中
SalesTrue <- shoes_dup %>% 
  filter(shoes_dup$prices.isSale == TRUE)

進行年度統計將時間欄位轉換為時間格式,並使用substring切割字串取得年度,群組年度並統計每年的銷售總金額
YearSales <- SalesTrue %>% 
  mutate(Year = as.Date(SalesTrue$dateAdded, "%Y-%m-%d")) %>% 
  mutate(Year = substring(Year,1,4)) %>%
  group_by(Year) %>% 
    summarise(Income = sum(prices.amountMax) * 30) %>%
    ungroup()
View(yearSales)

ggplot(data=yearSales,mapping = aes(x=Year,y=Income))+
  geom_bar(stat = "identity",fill="blue")
看起來是2016年網站銷售最好約5百50幾萬,因此由該年度來萃取品牌是最好,所以延伸下個問題

三、2016年的每個月份銷售總額是多少?並換算台幣
在上面我將時間從字串轉換時間,再用字串切割取得年度或月份,做法有點麻煩,所以我們將dateAdded變數正規化,將欄位切割出年度和月份,會使用separate()函數做欄位的切割

library(tidyr)
Month2016 <- SalesTrue %>% 
  separate(dateAdded,c("Year","Month"), sep = "-") %>% 
  filter(Year == "2016") %>% 
  group_by(Month) %>% 
  summarise(Income = sum(prices.amountMax)*30) %>% 
  ungroup()
View(Month2016)

執行後R會出現警告訊息,可以不理會這只是善意提醒,因為我的時間切割只切到年度和月份,而天、時、分、秒我並沒有切,所以R提醒沒切的資料遺失,但對我們的分析沒有影響,接下來繪圖。
ggplot(data = Month2016,mapping = aes(x=Month,y=Income))+
  geom_bar(stat = "identity",fill="skyblue")
所以從圖表來1-3月穩定銷售25萬以上,到了10月開始上升,11月份到150萬元,所以就會延伸到第四個問題

四、每月是哪一些銷售品牌是最好的,並以表格呈現及以新台幣計算
通常會以表格呈現都是行銷部的姐姐的需求(我學長說的),但R經計算後會以直表呈現,但人類會比較習慣橫表的呈現,並可節省紙張,所以會使用spread()函數將品牌變數轉製成橫表,其中fill參數是沒值都填入0

Month2016Sales <- SalesTrue %>% 
  separate(dateAdded,c("Year","Month"), sep = "-") %>% 
  filter(Year == "2016") %>% 
  group_by(Month,brand) %>% 
  summarise(Income = sum(prices.amountMax)*30) %>% 
  spread(brand,Income,fill = 0)
  ungroup()
View(Month2016Sales)

所以可以看到在2016年1-12月每各品牌的銷售總額,而在品牌總共有683各品牌在2016年每月銷售金額,所以可使用write.table()將該結果匯出,但是給老闆看不會以表格呈現,會以圖形呈現,所以就延伸下面問題

五、2016年銷售最好的前30大品牌

其實程式碼跟上面差不多,但為什麼不用%>%在加程式碼,因為我將brand變數的值變成欄位形成list資料結構,而ggpolt只吃變數。

Month2016SalesTop <- SalesTrue %>% 

  separate(dateAdded,c("Year","Month"), sep = "-") %>% 

  filter(Year == "2016") %>% 

  group_by(Month,brand) %>% 

  summarise(Income = sum(prices.amountMax)*30) %>% 

  arrange(desc(Income)) %>% head(30) %>% 

ungroup()

上圖主要呈現出在2016年銷售最好30各品牌,對於銷售數字很難對應,當然前幾大可以在head()函式做調整,那老闆即可知道哪些品牌的商品受到消費者的喜愛,並協助老闆做決策;若老闆想知道這些品牌的價格區間可分為幾個區間,只要將參數的位置調整即可完成

ggplot(data = Month2016SalesTop,mapping = aes(x=brand,y=Month,fill=Income))+

  geom_bar(stat = "identity")+

  coord_flip()

所以消費行為的金額區間為4萬-8萬、8萬-12萬、12萬以上三個區間各品牌坐落於價格區間的位置;從上圖中發現沒12月份的金額,在上面做每月的銷售金額就沒12月份,因為2016年沒有12月份,其他年度皆有12月份。

拉回來!那有沒有可以看到品牌明確坐落位置區間,上圖中還是須人工對應,是不是就可一眼看出

從上圖可以看到消費者大部分的品牌銷售總額都4萬元以下的區間,其中novica銷售總額約12萬,而這些品頻是薄利多銷還是單價很貴,就延伸下一個問題,預知分解  待下期分解!



沒有留言:

張貼留言

無現金支付的反思!

  **購物經歷** - 作者花費大量時間尋找立燈,最終在IKEA購買了一個649元的立燈 - 在IKEA附近停車場遇到只接受無現金支付的情況,被迫註冊並使用Line Pay **無現金支付的觀察** - 作者認為Line Pay作為前端介面,有助於提高停車場付費效率 - 作者預...