記得!系統分析的課程教授說:資訊系統是協助人類做決策,並不是取代人類
記得!資訊管理的課程教授說:資訊管理脫離不了人類的行為模式
記得!巨量資料的課程教授說:從龐大及雜亂無章的資料萃取有用的資訊
寫這篇文章想起這三位教授所講的話,雖然我不是很優秀的學生,每次上課周公總是喜歡叫我登入,甚至強迫叫我登入,由此可見周公是如此的喜歡我,但我還是深深記得這三句話,就用此資料集來...紀念....嗯....有點怪.....啊...應該說 感謝!
是的!進貨是個問題,但是貨進太少會讓消費者等太久,貨進太多東西賣不出去形成庫存,而這來來回回的過程中都是錢的投資,所以身為碼農的我,如何從龐大雜亂無章的資料分析出消費者的購買行為,找出有用的資訊協助老闆做進貨的決策,是本篇的重點。
首先從大方向角度再深入剖析
一、該購物網站鞋子的銷售狀況及百分比
簡單講就是在這個網站中消費者有購買和沒購買的狀況,直接上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萬,而這些品頻是薄利多銷還是單價很貴,就延伸下一個問題,預知分解 待下期分解!
沒有留言:
張貼留言